
從本機在遠端系統上執行命令
我需要透過 ssh 連線在遠端 lubuntu 22.04 系統上執行命令,但不開啟 shell。該指令將在腳本內執行。該腳本在我的本機系統(安裝了其他 Ubuntu 發行版)上執行。我發現我可以成功地做到這一點,在本機系統上執行以下腳本:
# define a variable which stored the password
MYPASSWORD='mypassword'
sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"
在我使用的命令sshpass
(安裝在我的本機系統上)中,以避免輸入myuser
驗證 ssh 會話所需的使用者密碼。
我的需求
我還必須cp
像前面一樣執行命令,但檔案的目標是 的子資料夾/etc
,這需要sudo
特權。所以腳本變成:
MYPASSWORD='mypassword'
sshpass -p $MYPASSWORD ssh [email protected] "cp /home/myuser/file1 /path/to/dest/"
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S cp /home/myuser/file1 /etc/sub/folder/"
如果我執行該腳本,該腳本的最後一個命令將輸出以下請求:
[sudo] password for myuser:
因此腳本停止執行並等待sudo
密碼。
我不想要這個!
我的一次嘗試
如果我執行命令:
> echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/
直接地在遠端系統的終端機上它可以工作並複製file1
到而/etc/sub/folder/
無需詢問sudo
密碼。
但是如果我執行以下命令在我的本機系統上:
sshpass -p 'mypassword' ssh [email protected] "echo mypassword | sudo -S -s cp /home/myuser/file1 /etc/sub/folder/"
它不起作用!
我的問題
sudo
有沒有辦法避免透過鍵盤輸入密碼?可以自動發送密碼嗎?
答案1
我找到了解決方法/解決方案。
使用臨時儲存密碼的文件sudo
我修改了在本機系統中執行的腳本,並添加了一些命令,如下所示:
- 透過命令在遠端系統的資料夾中建立文字檔案
echo
;該檔案被呼叫並且僅包含使用者的password.txt
密碼( ) 。"mypassword"
myuser
- 該文件
password.txt
直接作為sudo
操作員命令的輸入<
。 - 命令的執行
sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/
- 從遠端系統刪除檔案 /home/myuser/password.txt
此解決方案用於安全的開發環境,因此不會破壞任何安全約束。
新腳本
使用此指令,在本機系統中執行的腳本將變為:
MYPASSWORD='mypassword'
# creation of the file password.txt on the home folder of the remote system
sshpass -p $MYPASSWORD ssh [email protected] "echo $MYPASSWORD > /home/myuser/password.txt"
# execution of the command which needs the sudo privileges (on remote system)
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S < /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/"
# The '<' directs file passowrd.txt as input to sudo ===========================
# deletion of the file password.txt
sshpass -p $MYPASSWORD ssh [email protected] rm /home/myuser/password.txt
抑制輸出sudo -S
我發現了另一個改進,它允許抑制從 ssh 發送到本地系統的[sudo] password for myuser:
命令的輸出 ( ) 。 使用如下所示的操作器和設備就足夠了:sudo -S
&>
/dev/null
sshpass -p $MYPASSWORD ssh [email protected] "sudo -S \
< /home/myuser/password.txt cp /home/myuser/file1 /etc/sub/folder/" &> /dev/null
筆記[sudo] password for myuser:
在我的本機系統中,透過以下重定向抑制輸出:
&>/dev/null
>&/dev/null
這是正常的,因為先前的運算子是等效的(請參閱這個帖子在超級用戶上)。
鎮壓不起作用透過以下重定向:
>/dev/null