美文网首页程序员
ssh+expect自动填充密码

ssh+expect自动填充密码

作者: 是阿离 | 来源:发表于2017-10-02 11:39 被阅读0次

问题

要通过一个跳板机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 ] 对于数值比较,要用文本类型描述,如:neeqgt等,对于字符串比较,用符号描述,如:==!=>
  • 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登录
容我再想想……

参考文章

shell expect的简单用法
shell数组和字典

相关文章

  • ssh+expect自动填充密码

    问题 要通过一个跳板机ssh登录其他主机,每次使用ssh hostIp -l username再输入密码的方式太耗...

  • Chrome浏览器☞坑爹的自动填充密码功能

    完成项目后,发现:好多的输入框会自动的被填充密码。 这个在登录时候非常有用,可以存储密码,下次自动填充登录,方便用...

  • 开发知识点总结2

    1、修改Chrome记住密码后自动填充表单的黄色背景 产生原因:由于Chrome默认会给自动填充的input表单加...

  • iOS - Password AutoFill

    密码自动填充 Version - - iOS 11.0 简化登陆流程 保存密码,用户不用记住密码 一、实现原理 将...

  • iOS自动填充密码弹框影响键盘高度

    打开iOS的自动填充密码,在我们APP输入账户密码登录成功后,系统会有一个填充密码的弹框,如果点击取消的话,之后在...

  • Mac Safari浏览器填充密码需要使用指纹

    每次填充密码的时候需要指纹或者输入开机密码.由于外接屏幕和键盘,这样操作很麻烦.所以取消触控ID里面的自动填充密码就好了

  • aText 填充账号密码

    实现自动填充账号,并将密码复制到剪切板。如键入mail,邮箱账号自动完成输入,再到密码框咱贴一下密码,完成优雅输入...

  • Android自动填充服务

    一、背景 优化用户登录体验问题,希望能通过google自动化填充服务,实现账号密码自动填充功能,方便快捷登录 二、...

  • iOS-账号密码自动填充与添加

    写的很详细,收藏下iOS-账号密码自动填充与添加

  • 禁止自动填充密码、提示密码问题

    控制密码显示与隐藏的功能已经完美实现。然而问题又来了:浏览器有个记住密码的功能,下次登录时会自动填充上次登录记住的...

网友评论

    本文标题:ssh+expect自动填充密码

    本文链接:https://www.haomeiwen.com/subject/kmbzextx.html