使用密碼從指令碼連線
當你真的需要指令碼 ssh
連線時,將密碼輸入 ssh
命令不起作用(echo passw0rd | ssh host
)。這是因為密碼不是從標準輸入讀取的,而是直接來自 TTY(電傳打字機,電傳打字機,電傳打字機,因為歷史原因)。
但是有一個 sshpass
工具可以解決這個問題。它可以從引數,檔案或環境變數中讀取密碼。但請注意,這些選項都不能滿足密碼的安全要求!
$ sshpass -p passw0rd ssh host
$ sshpass -f /secret/filename ssh host
$ SSHPASS=passw0rd sshpass -e ssh host
命令列選項可以由 ps
中的其他使用者看到(在執行時它被遮蔽,但在開始時間不是,你不能依賴它):
... 23624 6216 pts/5 Ss Aug30 0:00 \_ /bin/bash
... 12812 1988 pts/5 S+ 08:50 0:00 | \_ sshpass -p passw0rd ssh host
... 45008 5796 pts/15 Ss+ 08:50 0:00 | \_ ssh host
請注意,使用/proc/PID/environ
檔案,系統上的其他程序也可以訪問程序的 environemnet 變數。
最後,將密碼儲存在檔案中可能看起來是最好的想法,但仍然使用其他示例中描述的金鑰是使用 ssh
的首選方式。