大叔最近在搞一个SHELL脚本的时候,需要去其它服务器拉取文件,可是发现在脚本里用SSH命令登录的时候,需要交互式的输入密码,这就造成了不能完成大叔所需要的任务,于是,大叔去谷歌了一下,发现了好几个可以非交互式远程登录的工具,大叔就是用了Sshpass完成的。大叔就简单说一下这个工具的用法吧。
大叔多说几句,如果是经常使用的服务器,还是推荐大家使用密钥登录,这样不但可以省去这些麻烦也更安全,大叔这是临时的测试服务器,所以没有使用密钥登录。
安装
- Ubuntu/Debian:
apt-get install sshpass
- Fedora/CentOS:
yum install sshpass
- Arch:
pacman -S sshpass
使用方法
NAME
sshpass - noninteractive ssh password provider
SYNOPSIS
sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
Options
-p password
The password is given on the command line. Please note the section titled "SECURITY CONSIDERATIONS".
-f filename
The password is the first line of the file filename.
-e The password is taken from the environment variable "SSHPASS".
基本上常用的就这几个命令,大叔直接举例来说明
-p 后面直接跟密码
[root@10-46-164-253 ~]sshpass -p '123456' ssh ubuntu@103.72.246.237
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-112-generic x86_64)
Last login: Wed Feb 13 20:47:59 2019 from 117.50.53.210
ubuntu@10-8-167-221:~$ exit
logout
Connection to 103.72.246.237 closed.
-f 后面跟密码文件
#vim pass.txt
123456
sshpass -f pass.txt ssh ubuntu@103.72.246.237
-e 需要配合指定环境变量,变量为SSHPASS
export SSHPASS=123456
sshpass -e ssh ubuntu@103.72.246.237
说一下SCP拉取文件吧
sshpass -p '123456' scp ubuntu@103.72.246.237:/home/fklds.txt ~/
另外,需要注意三点
1、如果是自定义端口,可以直接在主机后面加,也可以使用ssh的-p 参数
sshpass -p '123456' ssh ubuntu@103.72.246.237:6666
或者
sshpass -p '123456' ssh -p 6666 ubuntu@103.72.246.237
2、如果是首次连接的远程主机,并且需要下载公钥的话,需要配合ssh参数使用,否则会没有任合反馈
sshpass -p '123456' ssh -o StrictHostKeyChecking=no ubuntu@103.72.246.237
3、-p 参数的密码不可以含有特殊字符,需要转义,因此建议使用文件方式。
大叔结语
大叔只是在测试服务器,因此只是用了最直接的方式来解决,要在脚本中处理大量的交互的话,还是要用expect,大家有兴趣的可以多看看,大叔有时间再整理一下。