利用sshpass解决ssh与scp交互密码验证,tee -a 写日志与终端

众人所知,利用ssh与scp连接远程linux主机与传输文件的时候需要交互式的输入密码,有时候我们写脚本的时候,需要自动的输入密码,ssh可以利用密钥方式免输入密码。今天我所讲的是利用sshpass(google一下下载)进行非交互式输入密码。据说也可以利用except,具体的用法你可以google一下,我今天只讲sshpass的用法。
#!/bin/sh

#在打包目录自动对设备进行升级

 

PASSWORD=admin@rizhi

USERNAME=root

 

 

FILENAME=log.txt

IP="200.200.103.1,200.200.103.3,200.200.103.7,200.200.103.9"

 

LOG_NAME=auto_update_log.txt

 

#打印错误代码并退出

die()

{

ecode=$1;

shift; 

echo "$*, exit $ecode$" | tee -a $LOG_NAME;

exit $ecode;

}

#[ $#  -lt 2 ] && usage

 

update_device()

{

iparr=`echo $IP | sed 's/,/ /g'`

echo "IP = [$iparr]" | tee -a $LOG_NAME

for iptem in $iparr

do

iptem=`echo $iptem | sed 's/ //g'`

 

echo "auto_update device ${iptem} ${CGREEN}step 1:upload ${FILENAME}...${C0}" | tee -a $LOG_NAME

sshpass -p ${PASSWORD} scp -P 222 vtp.pkg ${USERNAME}@${iptem}:/sf/ | tee -a $LOG_NAME

if [ $? -ne 0 ]; then

echo "${CRED}auto_update device ${iptem} step 1:upload ${FILENAME} FAILED!${C0}" | tee -a $LOG_NAME

continue

fi

 

echo "auto_update device ${iptem} ${CGREEN}step 2: update from pkg...${C0}" | tee -a $LOG_NAME

sshpass -p ${PASSWORD} ssh -p 222 ${USERNAME}@${iptem} "cd /sf;chmod u+x vtp.pkg;if [ $? -eq 0 ];then reboot;else echo update fail;fi" | tee -a $LOG_NAME

if [ $? -ne 0 ]; then

echo "${CREAD}auto_update device ${iptem} step 2:update from pkg FAILED!${C0}" | tee -a $LOG_NAME

continue

fi

done

}

 

main()

{

update_device

rm -f vtp.pkg

}

 

main $*

exit 0
由以上代码:红色标记的则为重点使用sshpass传入密码给scp和ssh,并进行操作。
我在代码中利用tee -a $LOG_NAME,这是把打印的信息既可以打印大终端(屏幕)有可以写入$LOG_NAME 中。在使用sshpass之前你要安装它才行。

你可能感兴趣的:(ssh)