[转]----使用 sshpass 进行非交互式的 SSH 连接

浏览: 1394

我们在终端命令行下直接用 ssh 连接远程主机时,默认状态下,会提示输入密码。可以看到,这个步骤实际上是在终端下以交互式的方式完成的 — 终端给提示,用户手动输入密码。

由于需要人工参与,在脚本中进行自动化的 ssh 远程连接就不可能实现了。

在自动化脚本中进行 ssh 连接,我知道的方式有三种:

1. 通过 ssh-key 的方式建立两台机器间的互相信任关系

2. 借助 sshpass 工具,将密码以参数的方式提供

3. 借助 expect,将密码在脚本中提供

本文只介绍第 2 种方式。

sshpass 是一个工具,通过它可以做这样一件事:将远程主机的密码以参数的形式提供给 sshpass 之后,再执行 ssh 连接时就不需要交互式的人工输入密码了。

用法很简单:

$ sshpass -p password ssh username@host

但是,实际使用时发现,当第一次连接某台主机时,执行上面这条 sshpass 命令没有任何反应。把 sshpass 部分去掉,单独使用 ssh 连接该主机时,发现了规律。

$ ssh myusername@10.x.x.x
The authenticity of host ’10.x.x.x (10.x.x.x)' can't be established.
RSA key fingerprint is a4:eb:8c:7d:2a:ef:d6:1c:a3:0c:e8:e5:00:d2:eb:60.
Are you sure you want to continue connecting (yes/no)?

即:ssh 结合 sshpass 使用,碰到首次连接一台主机的情况时,上面这行提示被吞没掉了。

如果确定首次连接的主机是安全的,可以对 sshpass 命令下的 ssh 添加选项:-o StrictHostKeychecking=no

完整命令如下:

$ sshpass -p password ssh -o StrictHostKeychecking=no username@host

另外,由于 scp 使用 ssh 方式进行远程主机间文件复制,因此,sshpass 也可以作用于 scp。

scp  + sshpass 例子如下:

$ sshpass -p password scp -o StrictHostKeychecking=no -r username@host:~/test ~



From: http://wxl24life.iteye.com/blog/2128401

推荐 1
本文由 Yuchi608 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册