使用密碼從指令碼連線

當你真的需要指令碼 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 的首選方式。