Shell
我想通過 SSH 複製遠端 txt 文件,但不使用 root 訪問
我想將我的主機複製到遠端
/etc/hosts
,但它不起作用。我知道 root SSH 訪問使事情變得更容易,但恕我直言,root SSH 訪問有點危險。cat /etc/hosts|ssh samba2 "sudo su -c "sh -c cat > /etc/hosts""
此命令失敗,權限被拒絕;我的使用者有權
sudo
訪問。有什麼解決辦法嗎?
cat /etc/hosts | ssh samba2 'sudo tee /etc/hosts > /dev/null'
以
tee
root身份執行,因此能夠/etc/hosts
用標準輸入覆蓋。扔掉tee's
標準輸出,因為我們不需要/不想看到它。並且無需為不尋常的引用跳過任何障礙。
如果您需要追加(如
>>
)而不是覆蓋,您可以使用tee -a
.
ssh -tt samba "sudo bash -s" <<EOF echo "$(cat /etc/hosts)" >/etc/hosts exit 0 EOF
這將打開一個會話並使用作為腳本傳遞的heredoc執行提升的bash -tt參數用於ssh分配一個偽tty,否則sudo會抱怨,在heredoc中,命令替換將在本地進行,全文將得到遠端迴響。
編輯:圍繞命令替換的引號。編輯 2:向腳本添加了退出,否則 bash 將繼續等待命令。