sshpass的安装与使用
Posted 鮀城小帅
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sshpass的安装与使用相关的知识,希望对你有一定的参考价值。
1. sshpass的定义与安装
(1)定义
sshpass 的定义:ssh 登陆不能在命令行中指定密码,sshpass 的出现则解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,它支持密码从命令行、文件、环境变量中读取。
(2)安装
Ubuntu:
apt-get install sshpass
centos:
# 源码包安装
wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz
tar xvzf sshpass-1.05.tar.gz
cd sshpass-1.05.tar.gz
./configure
make
make install
# yum安装
yum -y install sshpass
2. sshpass 的参数
sshpass安装后,可以在控制台输入sshpass命令查看所有选项参数:
$ sshpass
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
-f filename Take password to use from file
-d number Use number as file descriptor for getting password
-p password Provide password as argument (security unwise)
-e Password is passed as env-var "SSHPASS"
With no parameters - password will be taken from stdin
-P prompt Which string should sshpass search for to detect a password prompt
-v Be verbose about what you're doing
-h Show help (this screen)
-V Print version information
At most one of -f, -d, -p or -e should be used
如上所示,command parameters为你要执行的需要交互式输入密码的命令,如:ssh、scp等。当sshpass没有指定参数时会从stdin获取密码,几个密码输入相关参数如下:
-f filename:从文件中获取密码
-d number:使用数字作为获取密码的文件描述符
-p password:指定明文本密码输入(安全性较差)
-e:从环境变量SSHPASS获取密码
注意:-p 也可用于指定port端口,一般在 username@ip 前使用。
3. 基于sshpass登录远程服务器与验证
sshpass:用于非交互的ssh 密码验证。 参数 p 的使用:使用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取
(1)直接远程连接某台主机:
命令:sshpass -p '密码' ssh root@192.168.11.11 【默认为22端口】
(2)远程连接指定ssh的端口:
4. 远程执行命令或脚本( sshpass+ssh)
使用sshpass远程免密,在远程主机上执行shell命令,如下远程执行命令:touch /opt/file.txt
[root@linkhot opt]# sshpass -p 'root' ssh root@192.168.126.135 "cd /opt && touch file.txt"
如果是执行脚本,则将 touch file.txt 改成 sh file.sh就行了。
5. 远程文件拉取与上传 (sshpass+scp)
文件的拉取与上传使用 scp 参数。
(1)拉取文件
命令:sshpass -p 'password' scp username@ip:/远程文件目录/远程服务器文件 /本地文件目录/
[root@linkhot opt]# sshpass -p 'root' scp root@192.168.126.135:/opt/file.txt /tmp/
(2)上传文件
命令:sshpass -p 'password' scp /本地路径/文件名 username@IP:/远程服务器目录
[root@linkhot tmp]# sshpass -p 'root' scp /opt/file.txt root@192.168.126.135:/home
6.从文件读取密码、ip、端口
(1)从密码文件读取文件内容作为密码去远程连接主机
7. 连接远程服务器批量操作
使用脚本语言执行sshpass,并从文件读取pass、ip
7.1 当前脚本文件用于连接远程服务器执行命令。
(1)testScript.sh
#!/bin/bash
input=systemIp
while IFS= read -r ip
do
arr=($ip//,/ )
if ping -c1 -W4 $arr[1] >/dev/null 2>&1;
then
echo "---current system:$arr[0] ---"
sshpass -f password ssh -o StrictHostKeyChecking=no -p 22 root@$arr[1] "cat /tmp/file.txt" < /dev/null
else
echo "$ip: Ping Fail - `date`"
fi
done < "$input"
(2)systemIp
当前文件用于记录要连接的远程服务器名与ip.
[root@linkhot sshpass]# cat systemIp
LinkHot,192.168.126.135
(3)执行testScript.sh 脚本查看远程服务器的文件
7.2 连接远程服务器进行批量上传文件的脚本如下:
#!/bin/bash
input=systemIp
while IFS= read -r ip
do
arr=($ip//,/ )
if ping -c1 -W4 $arr[1] >/dev/null 2>&1;
then
echo "---current system:$arr[0] ---"
sshpass -p 'root' scp -o StrictHostKeyChecking=no -P 22 ./file.txt root@$arr[1]:/opt/file.txt
else
echo "$ip: Ping Fail - `date`"
fi
done < "$input"
7.3 连接远程服务器进行批量操作DB的脚本如下:
以下是连接远程服务器的Postgresql进行DB操作的脚本。
#!/bin/bash
input=systemIp
while IFS= read -r ip
do
arr=($ip//,/ )
if ping -c1 -W4 $arr[1] >/dev/null 2>&1;
then
echo "---current system:$arr[0] ---"
PGPASSWORD=123456 /home/postgres/db/pgsql/bin/psql -h $arr[1] -p 5432 -U postgres
$PGPASSWORD -d "testdb" -c "SELECT * FROM "wechat_user" WHERE "key" = 'WSP'
else
echo "$ip: Ping Fail - `date`"
fi
done < "$input"
8. 常见问题
(1)问题现象如下所示:使用sshpass没有反应,以为sshpass装错了,但linux装的应该不会出错
rpm -qa | grep sshpass
sshpass-1.06-2.el7.x86_64
解决措施:
方法一:使用ssh root@192.168.126.135命令先建立链接记录
方法二:可以添加-o StrictHostKeyChecking=no选项【表示远程连接时不提示是否输入yes/no】
以上是关于sshpass的安装与使用的主要内容,如果未能解决你的问题,请参考以下文章