一.简介
1.定义:
ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。
2.使用 sshpass 原因
使用 sshpass 来进行远程批量操作,批量修改、添加日志清理工具的配置内容;在不影响生产的情况下不停机用 sshpass 去批量修改基础数据,并使用预留的 reload 功能重载数据;此外还有新增一些比如服务的进程监控的功能进行服务化。
这一系列操作都可以通过 sshpass 进行远程操作,只需几行或几十行 shell脚本就可以做到。最大限度提高效率和不影响产能。
二.使用
1.格式:
sshpass 选项 命令
常见选项:
-p password | 允许用 -p 参数指定明文密码,然后直接登录远程服务器 |
-f filename | 跟保存密码的文件名,密码是文件内容的第一行 |
-e | 将环境变量SSPASS作为密码 |
-d number | 使用数字作为获取密码的文件描述符 |
2.操作
先安装 sshpass 软件
① 直接远程连接某台主机
sshpass -p '密码' ssh root@192.168.44.20 (默认为22端口)
② 远程连接指定ssh的端口
使用ssh访问时,A通过ssh首次连接到B,B会将公钥1(host key)传递给A,在首次链接时,会弹出交互验证B的公钥1是否正确,如果正确则输入yes确认,A将公钥1存入known_hosts文件中,以后A再连接B时,B依然会传递给A一个公钥2,OpenSSH会核对公钥,通过对比公钥1与公钥2 是否相同来进行简单的验证,如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。
但是如果程序自动链接ssh远端机器,就需要由程序自动应答这个确认公钥的交互过程。
③ 从密码文件读取文件内容作为密码去远程连接主机
sshpass -f xxx.txt ssh root@192.168.44.20
④ 从远程主机上拉取文件到本地
文件的拉取与上传使用scp参数
拉取文件
命令: sshpass -p 'password' scp username@ip:/远程文件目录/远程服务器文件/本地文件目录/
上传文件
命令:sshpass -p 'password' scp /本地路径/文件名 username@ip:/远程服务器目录
⑤ 从文件读取密码、ip、端口
⑥ 想批量操作连接远程服务器,建议使用脚本文件
⑦ 可以添加-o StrictHostKeyChecking=no选项
表示远程连接时不提示是否输入yes/no
也可以直接去配置文件里面修改
vim /etc/ssh/ssh_config