使用密码从脚本连接

当你真的需要脚本 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 的首选方式。