在很多实践项目中,我们经常会通过SSH来进行认证,如通过SSH拷贝文件,虽然我们可以使用公钥与私钥实现ssh 无密码登录,在不同的服务器上又需要配对相应的密钥,切换用户麻烦等问题,在一些需要交互但会涉及到批量处理的时候,通过shell 密码输入不显示,Shell输出内容不显示密码,Shell实现有密码自动登录会大大的提高工作效率
#! /bin/bash
##############################################
#Author: liaodengsong
#date: 2015-12-10
#Emil: lldss@mail.com
#Cropright: 2015@yineng
#version="0.5"
##############################################
shellDir=$(cd "$(dirname "$0")"; pwd)
prog="ysa-release"
platform="YNedut"
releaseDir="user@125.XX.93.XX:/home/ysa-web"
cmdRsync="rsync -avzrt --delete --progress -e 'ssh -p 59422' "
fileHome="/home/ysa/target/EveryVersionFile"
verHome="/home/ysa/target/version"
echo "please input the version key:"
read verKey
echo "please input the verDataBases key:"
read dbKey
if [ ! -d ${fileHome}/${verKey}/ ] || [ ! -f ${verHome}/${dbKey} ] ; then
echo "The Key Error,exit!"
exit 0;
fi
echo "please input the release host user password:"
stty -echo
read PASSWORD
stty echo
fDir="${releaseDir}/files/"
vDir="${releaseDir}/version/"
echo "sshpass -p $PASSWORD $cmdRsync ${fileHome}/${verKey}/* $fDir" >/dev/shm/tempCMD
echo "sshpass -p $PASSWORD $cmdRsync ${verHome}/${dbKey} $vDir" >>/dev/shm/tempCMD
awk '{$3="***"}1' FS=' ' OFS=' ' /dev/shm/tempCMD
echo "Any key to continue!"
read -n1
source /dev/shm/tempCMD
rm -f /dev/shm/tempCMD
一,不显示SSH输入的密码stty -echo
read PASSWORD
stty echo #关闭输入不显示
二,通过SSH输入的密码实现自动登录sshpass -p $PASSWORD ssh root@1.2.3.4 #实现SSH在shell脚本里自动登录
CentOS6安装sshpass:cd /etc/yum.repos.d/
wget http://download.opensuse.org/repositories/home:Strahlex/CentOS_CentOS-6/home:Strahlex.repo
yum install sshpass
三,输出信息时不显示密码信息awk '{$3="***"}1' FS=' ' OFS=' ' /dev/shm/tempCMD #将第三列输入的SSH密码在屏幕显示时,显示为*
http://bbs.chinaunix.net/thread-2309494-1-1.html
重点内容摘录待验证:cat filename|while read line
do
echo "$line"|awk -F\| -v v=\| '{print $1v$2v$3v$4v""v$6v}'
doneawk 'BEGIN{OFS=FS="|"}{$5="";}1' fileawk '{$5=""}1' FS=\| OFS=\| infile