sshpass主要的作用是可以在命令行直接使用密码来进行远程操作(远程连接和远程拉取文件)或是免密免交互进行某些本地操作,之所以会聊到这个命令,今天在迁移发布打包脚本的时候整理查资料总结的
使用前提,需要安装sshpass:
//yum安装
yum -y install sshpass
//源码安装
tar xvzf sshpass-1.05.tar.gz
cd sshpass-1.05.tar.gz
./configure
make
make install
实例1:
sshpass -p 密码 ssh -oStrictHostKeyChecking=no -p 端口 root@ip
如果不加-oStrictHostKeyChecking=no,是无法远程登录的.
StrictHostKeyChecking: 主机公钥确认
(1)StrictHostKeyChecking=no 最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网测试时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。
(2)StrictHostKeyChecking=ask 默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。
(3)StrictHostKeyChecking=yes 最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。
实例1:可以这样测试没有StrictHostKeyCheck为什么不行:
ssh p 端口 root@ip
会发现,原来需要登录确认,所以实例1指令如果后面的命令不带-oStrictHostKeyChecking就没反应:
[root@xxxxx ~]# ssh -p 端口 root@ip
The authenticity of host '[ip]:端口 ([ip]:端口)' can't be established.
ECDSA key fingerprint is cc:d8:89:91:b2:b9:56:4d:0b:d7:e3:c7:be:a4:c1:50.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[ip]:端口' (ECDSA) to the list of known hosts.
root@ip's password:
当输入密码后,会往~/.ssh/know_hosts里加一条记录(表示信任),后续则不再需要check了.
除了上述ssh -o加上StrictHostKeyChecking=no之外,还可以用下面的方法免交互确认
~/.ssh/config (或者在/etc/ssh/ssh_config)
Host *(或是指定的host)
StrictHostKeyChecking no
实例2:在本地执行远程机器的命令
sshpass -p xxx ssh root@192.168.11.11 "ethtool eth0"
[root@xxxx ~]# sshpass -p 密码 ssh -oStrictHostKeyChecking=no -p 端口号 root@ip
Last login: Thu May 28 23:50:49 2020 from ip2
Welcome to tlinux 2.2 64bit
[root@yy ~]# cd /tmp/
[root@yyy /tmp]# ls -lh | grep clark
-rw-r--r-- 1 root root 0 May 28 23:51 clarksss.log
实例3:从密码文件读取内容作为密码去远程连接主机
sshpass -f xxx.txt ssh root@192.168.11.11