Bash
帶密碼的 Sudo 並通過 SSH 附加到文件
我想要做的是以下。
SSH 到遠端主機。
將登錄使用者授權密鑰文件中的 public_keys 附加到所有使用者 .ssh/authorized_keys 文件中。
嘗試在一行中使用密碼執行 sudo & cat 時遇到問題。任何人都知道如何解決這個問題?
我嘗試實現這一目標的方法之一。
ssh -t $userHost -p $remotePort \ "for localUser in $(ls /home | grep -v $USER); \ do sudo mkdir -p /home/$localUser/.ssh && \ cat /home/$USER/.ssh/authorized_keys | sudo tee --append \ /home/$localUser/.ssh/authorized_keys > /dev/null; done"
但是 sudo 命令似乎不能用作 ssh 命令。sudoers 文件中的 NOPASSWD 不是一個選項。
這就是我解決它的方法。
#!/bin/bash userHost="user@host.example" remotePort="1234" password="password" # Send public key to remote host echo "Sending public key to remote host..." cat "$HOME/.ssh/id_rsa.pub" | ssh $userHost \ -p $remotePort "cat >> ~/.ssh/authorized_keys" # Add the public key to all users on the remote system ssh $userHost -p $remotePort 'echo '"$password"' | sudo -S \ ls /home/ && for localUser in $(ls /home | grep -v $USER); \ do sudo mkdir -p /home/$localUser/.ssh && \ sudo touch /home/$localUser/.ssh/authorized_keys && \ sudo chown "$localUser:$localUser" /home/$localUser/.ssh/authorized_keys && \ cat /home/$USER/.ssh/authorized_keys | sudo tee \ --append /home/$localUser/.ssh/authorized_keys > /dev/null; done'
我首先使用
echo '"$password"' | sudo -S ls /home/
垃圾命令從標準輸入讀取並將密碼記憶體在遠端主機上。然後繼續執行其餘的 sudo 命令。相當混亂的 oneliner,但無論如何,這個腳本只打算在每個遠端主機上執行一次。
不喜歡我必須兩次輸入 SSH 密碼的事實,首先將其儲存在變數中,然後繼續第一次登錄到遠端主機。
sudo
帶密碼將需要一個tty
. 遠端命令執行不會tty
分配給它。NOPASSWD
因此,除非您允許,否則它將無法工作。相反,請考慮在遠端伺服器上擁有一個強制帳戶,腳本是 shell,您的腳本執行命令。您使用基於密鑰的身份驗證登錄到強制帳戶以規避兩次輸入密碼,自動執行腳本。在腳本的最後一行,發出
exit
退出命令。由於這本質上將是一個互動式會話,因此它將tty
允許您輸入密碼,而您必須保持相同的擊鍵次數。我想不出任何其他方式,除非 sudo 中有一個我不知道的新功能