资讯专栏INFORMATION COLUMN

使用 expect 在必要情况下实现自动输入密码登陆

Barry_Ng / 544人阅读

摘要:原文地址补充网友穗乃果提示,用可以更完美地解决这个问题。试了一下,因为安全原因,默认不支持安装可以用以下命令安装使用方法你的密码添加命令别名在中添加一行你的密码使之生效完美解决了使用带来的副作用,感谢穗乃果

由于公司的堡垒机必须要用域账号登陆,然后转发密钥,所以每次登陆堡垒机的时候都需要手动输入域账号密码。密码太长且复杂,手动输入容易输错,故使用 expect 写了个脚本来做这个事情,实现免输入密码登陆,工作效率大大提升!

首先我们创建以一个文本文件,我们就命名为 proxy.expect,内容如下:

#!/usr/bin/expect

# 设置超时时间,单位秒
set timeout 10

# 主要功能是给ssh运行进程加个壳,用来传递交互指令
# ssh -A 是转发密钥设置,用于有堡垒机的场景,一般情况下不需要
spawn ssh -A  yourname@yourdomain.com

# 判断上次输出结果里是否包含 Password: 的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的 10秒
expect "Password:"

# 发送密码 
 表示字符串结束
send "yourpassword
"

# 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。
# 如果没有这一句登录完成后会退出,而不是留在远程终端上。
interact

注意一下,这个 proxy.expect 文件里的内容,都是交给 expect 去执行的,而不是 bash,所以第一行的内容是 #!/usr/bin/expect,并且里面的命令如 spawnexpectsendinteract 都是 expect 的命令而不是 bash 命令。

执行命令如下:

expect proxy.expect

这样就自动登陆了。

当然,也可以自定义一个命令别名,在 .bash_profile 文件里增加一行:

alias bb="expect /path/to/proxy.expect"

然后 source ~/.bash_profile 使之生效。

以后只需要输入 bb 就可以了自动登陆堡垒机了,完美~

注意事项

无论使用 macOS 自带的 Terminal 还是第三方的 iTerm,我发现使用 expect 自动输入密码会带来一些副作用,比如 top 命令显示出来的效果会出现多余空行、vim 编辑时内容不能全屏、rz/sz 上传下载文件失效等等,做一些复杂的工作的时候,还是不要使用 expect 登录,不然会出现很多意想不到的情况。当然,这些可能是公司堡垒机有关,我自己服务器不会用得到的。

原文地址:CroWall Notes

2019-06-19 补充

网友穗乃果提示,用 sshpass 可以更完美地解决这个问题。

试了一下,因为安全原因,brew 默认不支持安装:

TMBP:~ tony$ brew install sshpass
Error: No available formula with the name "sshpass"
We won"t add sshpass because it makes it too easy for novice SSH users to
ruin SSH"s security.

可以用以下命令安装:

brew install http://git.io/sshpass.rb

使用方法:

sshpass -p 你的密码 ssh -A -g yourname@ip

添加命令别名:

# 在 ~/.bash_profile 中添加一行

alias bb="sshpass -p 你的密码 ssh -A -g yourname@ip

# 使之生效
source ~/.bash_profile

完美!解决了使用 expect 带来的副作用,感谢 穗乃果~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/63773.html

相关文章

  • 加速器:Expect脚本

    摘要:目前,大部分系统安装有。命令会等待接受该进程返回的结果并且会根据返回的字符串来决定下一步的操作。然后结束脚本的运行。为了能够提高效率,可以借助脚本。无参数的脚本内容如下在终端执行,终端显示。 1、Expect简介 Expect是由 Don Libes 基于Tcl语言开发的,并被广泛应用于交互式操作和自动化测试的场景中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度提高系统...

    dongxiawu 评论0 收藏0
  • 加速器:Expect脚本

    摘要:目前,大部分系统安装有。命令会等待接受该进程返回的结果并且会根据返回的字符串来决定下一步的操作。然后结束脚本的运行。为了能够提高效率,可以借助脚本。无参数的脚本内容如下在终端执行,终端显示。 1、Expect简介 Expect是由 Don Libes 基于Tcl语言开发的,并被广泛应用于交互式操作和自动化测试的场景中,它尤其适用于需要对多台服务器执行相同操作的环境中,可以大幅度提高系统...

    everfight 评论0 收藏0
  • iTerm2 结合 Linux expect 实现 ssh 自动登陆, 通过跳板机登录服务器内网功能

    摘要:解决方法脚本通过跳板机登录内网服务器,如果只登陆有外网的服务器,把有关内网的部分删掉就可以啦,例如跳板机就是有外网的服务器。执行完成后保持交互状态,把控制权交给控制台。 痛点 一般情况下,公司所有的服务器都在内网,公网访问、管理服务器都要先通过登录一台跳板机,然后再由跳板机登录到相应的服务器进行操作,跳板机与服务器的连接都是内网地址。我们经常看到的现象就是下图这样(博主 Mac 自带的...

    williamwen1986 评论0 收藏0
  • 搭建自己的前端自动化测试脚手架(三)

    摘要:如果您在进行模拟鼠标的测试,您的鼠标指针可能会干扰您的测试,因此建议运行测试后将您的指针移动至屏幕外部,以避免干扰到浏览器测试。 上一篇:搭建自己的前端自动化测试脚手架(二)By LancerComet at 23:47, 2016.07.22. 欢迎转载,转载时还请保留作者署名。 这是最后一章了!(・∀・)之前我们配置好了我们的脚手架工具,现在可以编写测试用例了! 开始编写测试用例 ...

    seanlook 评论0 收藏0
  • vue轻量级后台管理系统基础模板

    摘要:具体实现请查看和的退出登陆回调方法。现在除了必要的页面需要在一开始添加到路由表里,其他的页面都可以根据后台数据来自动生成。另外,如果在未登陆时要访问某一指定页面,会重定向到登陆页,登陆成功后会自动跳到这个指定页面。 项目地址 vue-admin-template 在线预览 更新 2019.6.25 更新 修复路由表冲突问题 退出当前用户,换账号重新登陆时,上个账号和现在的账号路由表会有...

    2shou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<