sshpass用法介绍

参考文章:http://www.mamicode.com/info-detail-1105345.html

https://www.jianshu.com/p/a2aaa02f57dd

1.ssh与sshpass的区别

  • ssh登录需要与用户进行交互,需要用户输入密码
  • sshpass 用于非交互的ssh密码验证,允许使用-p参数指定明文密码

2.sshpass的用法

使用-p参数指定密码
  • sshpass -p password ssh -p port user@ip  登录
  • sshpass -p password ssh -p port user@ip  " cmd "  执行命令
  • sshpass -p password scp -P22 user@ip:remote_file local  scp命令
还可以加参数 -q 【去掉进度显示】

1.使用ssh第一次登录某台服务器时,会有提示“Are you sure you want to continue connecting (yes/no)”,这时用sshpass会不好使  

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

eg:sshpass -p password ssh -o StrictHostKeyChecking=no user@ip

除此之外还可以修改ssh的配置文件,在所有机器上修改/etc/ssh/ssh_config (mac中为/etc/ssh_config)文件中设置StrictHostKeyChecking no即可(默认为 #StrictHostKeyChecking ask )

2.设置ssh连接超时时间

ssh -o ConnectTimeout=3 192.168.0.10

参考:http://t.zoukankan.com/mengdeep-p-4851517.html

使用-f参数从指定文件中读取密码

echo 'password' >mypasswd

sshpass -f mypasswd ssh user@ip

使用-e参数从环境变量中获取ssh密码  

export SSHPASS= "password "

sshpass -e ssh user@ip

 

案例:

功能 脚本 知识点
验证服务器是够能够成功登录

cat check_passwd.sh

#!/bin/bash

ips=`cat server_list.txt`

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

1.server_list.txt是存放server IP的list

2.验证是否能登陆时,使用命令ssh root@$ip ":" ,其中":"代表要在登陆到的服务器中执行的命令,如果没有这个命令,使用该命令就直接登录到远程机器中,而不会执行后续步骤

3.shell中设置颜的格式为格式: echo -e "\033[字背景颜色;字体颜色m 字符串 \033[0m" 

其中其他属性与字体颜色同时使用时用时,格式为 echo -e "\033[5m \033[字背景颜色;字体颜色m 字符串 \033[0m" ,其中两者顺序可以调换

 

字背景颜色范围:40----49 字颜色:30-----------39   其他属性
40:黑 
41:深红 
42:绿 
43:黄色 
44:蓝色 
45:紫色 
46:深绿 
47:白色 
30:黑 
31:红 
32:绿 
33:黄 
34:蓝色 
35:紫色 
36:深绿 
37:白色

\33[0m 关闭所有属性 
\33[1m 设置高亮度 
\33[4m 下划线 
\33[5m 闪烁 
\33[7m 反显 
\33[8m 消隐

 

 

#!/bin/bash

ip=$1
num=$2

rm -rf ./log/*
rm -rf ./report/*

log_dir="/LocalRun/sct/auto_test/scripts/sct_scripts/test_integration/log/system_sdk_log"

#get log dirs
log_names=`sshpass -p xxxxxx ssh -o StrictHostKeyChecking=no root@10.28.15.$ip "cd $log_dir&&ls -lt|grep -v 'total'|head -n $num|awk '{print \\$NF}'"`
if [ $? -eq 0 ];then
i=1
for log in $log_names;do
echo "-------copy $log-------"
sshpass -p xxxxxx scp -r root@10.28.15.$ip:$log_dir/$log ./log
if [ $? -eq 0 ];then
echo -e "\033[32m $i ok \033[0m"
else
echo -e "\033[31m $i error \033[0m"
fi
let i+=1
done
fi

 
相关ssh文档:ssh远程执行命令
posted @ 2018-09-14 18:26  声声慢43  阅读(3665)  评论(0编辑  收藏  举报