Shell

我想通過 SSH 複製遠端 txt 文件,但不使用 root 訪問

  • April 22, 2016

我想將我的主機複製到遠端/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'

teeroot身份執行,因此能夠/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 將繼續等待命令。

引用自:https://unix.stackexchange.com/questions/278231