使用txt填充密码在Linux,ssh登录自动填充密码

问题

要通过一个跳板机ssh登录其他主机,每次使用ssh hostIp -l username再输入密码的方式太耗时,想要进行密码自动填充

使用expect+bash shell

在ssshHost.sh脚本中封装expect的ssh登录自动填充密码功能

使用expect的自动填充密码功能+interact交互功能

将(hostIp,connectionStr)写入配置文本或者直接在shell脚本作为字典

shell读取用户输入hostIp,匹配出connectionStr,调用expect进行ssh登录,相关操作完成后ctrl+d退出

主要代码:

expect部分:

function auto_login_ssh(){

expect -c "

set timeout 3600;

spawn ssh -o StrictHostKeyChecking=no $2;

expect {

*assword:* {

send $1\r;

}

}

interact

"

return $?

}

bash shell部分:

declare -a hostInfoDict

hostInfoDict=(

["127"]="127.0.0.1 username passwd"

)

echo $#

if [ $# -ne 1 ]; then

echo "The args are problematic need hostIPNickName"

exit 1

fi

sshHostIp=$1

echo $sshHostIp

# echo ${hostInfoDict[$sshHostIp]}

OLD_IFS="$IFS"

IFS=" "

path_info_arr=(${hostInfoDict[$sshHostIp]})

IFS="$OLD_IFS"

hostIP=${path_info_arr[0]}

hostUser=${path_info_arr[1]}

hostPassWD=${path_info_arr[2]}

auto_login_ssh $hostPassWD $hostUser"@"$hostIP

其中:

expect部分设置timeout为3600s强制退出

interact 开启交互模式

return $? 返回上一个命令执行结果,0:正常执行,正值:异常

declare -a hostInfoDict声明shell字典

["127"]="127.0.0.1 username passwd" [hostIpNickName]="hostIp userName passWD"

$#获取输入参数个数

[ $# -ne 1 ] 对于数值比较,要用文本类型描述,如:ne、eq、gt等,对于字符串比较,用符号描述,如:==、!=、>等

sshHostIp=$1 获取第一个参数,即hostIpNickName

IFS=" " 设置分隔符,注意保护现场与恢复现场

(${hostInfoDict[$sshHostIp]}) shell字典取值使用${}

执行脚本:

ssshHost.sh 127

存在的安全性等问题

1、 ssh的用户名、密码为明文,很容易泄露

2、只要通过前台登录上堡垒机,都能执行该脚本登录相关主机

3、如果设置timeout = -1永不过期,若ssh连接界面没有使用ctrl+d,而是直接关闭界面的话,该脚本不会退出,一直停留在后台

4、ssh登录到别的主机之后,存在中文乱码现象。

相关解决方案思考:

1、 将shell脚本加密,或者使用编译后的C来调用该脚本

2、没有好方法,如果要进行密码校验的话,失去了脚本的基本功能-_-!

3、根据场景设置了3600s强制下线,这个可以新增一个脚本对当前类似于僵死进程kill掉

4、在跳板机增加LANG=zh_CN.GBK,默认以GBK登录

容我再想想……

参考文章

总结

以上是编程之家为你收集整理的ssh登录自动填充密码全部内容,希望文章能够帮你解决ssh登录自动填充密码所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值