使用 sshpass 进行非交互式的 SSH 连接

首先,抱歉,这个标题很拗口。
说一下,sshpass 能干吗。我们在终端命令行下直接用 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 ~

--------------


好玩儿的地方:

在 Mac OS X 下通过 brew install 方式安装 sshpass 时,碰到下面的话:

$ brew install sshpass
Error: No available formula for sshpass
We won't add sshpass because it makes it too easy for novice SSH users to
ruin SSH's security.

看来 sshpass 这种方式并不安全,因此,实际生产环境下建议只在内网使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值