sshpass 配置与用法介绍

sshpass 配置安装


一、sshpass介绍

ssh登陆不能在命令行中指定密码,需要用户交互输入密码,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器,

它支持密码从命令行、文件、环境变量中读取。所以,通过sshpass实现以非交互的形式为ssh提供密码。


二、安装配置

1、下载:目前1.0.5是最新版本,下载地址:

wget http://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz

2、编译安装

#tar xf sshpass-1.05.tar.gz

#cd sshpass-1.05

#./configure

#make && make install

查看安装成功与否:

#which sshpass

/usr/local/bin/sshpass   --安装成功。

3、sshpass用法和命令介绍

#sshpass -h              --查看帮助

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


   -h            Show help (this screen)

   -V            Print version information

At most one of -f, -d, -p or -e should be used


三、用法范例

1、从命令行方式传递密码

ssh 端口为默认22的时候:

#sshpass -p userpassword ssh username@serverip   

ssh 端口不是默认22的时候,假如为1234

#sshpass -p userpassword ssh -p1234 username@serverip 

2、从文件读取密码

#echo "userpassword" > mypasswd

#sshpass -f mypasswd ssh username@serverip


遇到的问题:

第一次从一台服务器使用sshpass登录另一台服务器的时候,有时候执行

#sshpass -p userpassword ssh username@serverip 命令,无响应,也无报错,也无法登录到另一台服务器

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

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

如:

#sshpass -p userpassword ssh -o StrictHostKeyChecking=no [email protected]

Warning: Permanently added '10.0.18.156' (RSA) to the list of known hosts.

Last login: Thu Nov  5 17:37:51 2015 from 10.0.18.157

这样就登陆成功了


如果不想在命令行中添加-o StrictHostKeyChecking=no参数,可以在sshd配置文件中修改

在所有机器上修改/etc/ssh/ssh_config文件中设置StrictHostKeyChecking no即可(默认为 #StrictHostKeyChecking ask )

3、从环境变量获取密码(测试是可以的)

#export SSHPASS="user_password"

#sshpass -e ssh username@serverip


四、实际工作中的一个小的案例

定期修改服务器(百台左右)密码之后,验证是否修改成功

#cat server_list.cfg

web1

web2

web3


#cat check_passwd.sh

#!/bin/bash

ips=`cat server_list.cfg`

for ip in $ips

do

        echo ==========$ip===========

        sshpass -p "server_password" ssh root@$ip ":" 

        [ $? -eq 0 ] && echo -e  "\033[32m ==$ip==password is ok... \033[0m" || echo -e "\033[31m ==$ip==Password is error!!! \033[0m"

done


或者也可以将密码存放在一个文件中,然后使用-f 参数来获取密码


你可能感兴趣的:(sshpass)