Bash

帶密碼的 Sudo 並通過 SSH 附加到文件

  • March 26, 2016

我想要做的是以下。

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 中有一個我不知道的新功能

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