sshpass

Zss 发表于:

在实际应用中可能需要远程其他的主机,但是这个过程中涉及到另外一台机器的账号密码的输入,这个过程需要使用自动输入的方式来解决

这时sshpass就是一个很好的选择,例如工作中我需要写的一个自动安装server的脚本中有所涉及到,需要远程到另外一台主机来对它进行一系列的操作

应用范围:可以在命令行直接使用密码来进行远程连接,远程拉取文件,远程服务器的操作

1.远程主机     其中admin\!234 实际表示的是将 ! 转义,而我的密码是admin!234

sshpass -p admin\!234 ssh root@10.6.161.252

[root@localhost ~]# sshpass -p admin\!234 ssh root@10.6.161.252
Last login: Sun Jun 10 00:42:54 2018 from 10.6.161.67
[root@altai ~]# ^C
[root@altai ~]#

若我的!没有被转义则会出现报错的情况,这是一种方式,另外一种方式是密码加   ‘ ‘也是可以正常远程的

sshpass -p ‘admin!234’ ssh root@10.6.161.252

[root@localhost ~]# sshpass -p 'admin!234' ssh root@10.6.161.252
Last login: Sun Jun 10 00:43:32 2018 from 10.6.161.67
[root@altai ~]#

2.指定端口的远程连接   实际上使用的也就是ssh中加入参数-p 来指定端口

sshpass -p ‘admin!234’ ssh -p 22 root@10.6.161.252

[root@localhost ~]# sshpass -p 'admin!234' ssh -p 22 root@10.6.161.252
Last login: Sun Jun 10 00:47:12 2018 from 10.6.161.67
[root@altai ~]#

3.从文件读取来远程主机   这个文件中直接写入主机的密码就好了 也就是admin!234

sshpass -f test.txt ssh -p 22 root@10.6.161.252

[root@localhost ~]# sshpass -f test.txt ssh -p 22 root@10.6.161.252
Last login: Sun Jun 10 00:50:13 2018 from 10.6.161.67
[root@altai ~]#

4.配合scp,远程下载文件

将10.6.161.252主机上的/root目录下的paris1.cap下载本地home文件夹下面

sshpass -p 'admin!234' scp root@10.6.161.252:/root/paris1.cap /home

5.对于某些第一次登陆出现的yes或者no的情况可以使用 -o StrictHostKeyChecking=no来解决

对于ssh的第一次登陆,会提示:“Are you sure you want to continue connecting (yes/no)”,这时用sshpass会不好使

解决办法:可以在ssh命令后面加上 -o StrictHostKeyChecking=no来解决

 

远程后需要操作主机的话可以使用一下的方法来解决,stty erase ^H表示的是使用read的时候可以退格

这个地方的 `exit,若没有使用  `   ` 来操作是无法退出登陆的

    stty erase ^H
    sshpass -p ${server_password} ssh ${server_name}@${server_ip} -o StrictHostKeyChecking=no <<DOC
    if [ -f ${server_path}/file_list.txt ];then
       rm -f ${server_path}/file_list.txt
    fi    
    ls ${server_path}/ | grep altaicare > ${server_path}/file_list.txt 2>&1  
    `exit`
DOC

rpm包:sshpass-1.06-2.el7.x86_64

使用  rpm -ivh 包名来安装就好了