# 利用 SSH pipe 遠端文字檔回來

# 情境描述

狀況是這樣,我要備份 server 上的一些設定檔,所以要從 server 要抓文字檔回來

我想到有幾種方法可以用,不過都有點小困擾的地方

# cat 文字檔,再從終端機複製,貼上到本地檔案

這個如果遇到很長的文字檔就很不方便了

# 用 sftp 抓下來

如果檔案是 root 才能存取的檔案,像是 nginx 設定檔,就要複製檔案到 user space 再刪除,這樣的步驟有點麻煩

最後我想到用 SSH 的方式把檔案 pipe 到本機

# User 的檔案

首先我要備份 crontab 的設定,使用以下指令就可以把 crontab 的內容 pipe 到本機端

ssh -e none USERNAME@REMOTE "crontab -l" > crontab

其中用到 -e none 這個參數,是設定 ssh 不要 escape 任何字元,後面 "" 就接要執行的指令,就可以把指令的結果 pipe 到本機

# Root 的檔案

再來是備份 root 才能存取的檔案,這邊因為 ssh 登入的是一般帳號,要存取 root 的檔案要透過 sudo 的方式

ssh -e none USERNAME@REMOTE "sudo -S cat /etc/nginx/nginx.conf" > nginx.conf

這邊執行的指令就要加上 sudo -S 讓我們可以輸入密碼

# 其他 User 的檔案

如果是其他 user 的檔案,像是 db user 的檔案,就要指定 sudo 的 user

ssh -e none USERNAME@REMOTE "sudo -S su DB_USER -c \"cat db.conf\"" > db.conf

這邊 sudo 執行的指令就要加上 -c \"COMMAND\" 讓我們可以切換成另外一個 user 執行指令


透過這樣的方式就可以把遠端的文字檔 pipe 回來,另外也可以 pipe 到剪貼簿,只要後面 pipe 到檔案改為 | pbcopy 就可以將內容 pipe 到剪貼簿內了

Last Updated: 2021-11-26 16:02:26
贊助商連結
    贊助商連結
    (adsbygoogle = window.adsbygoogle || []).push({});