使用密码从脚本连接
当你真的需要脚本 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
的首选方式。