热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

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

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

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

#!/usr/bin/expect
# 设置超时时间,单位秒
set timeout 10
# 主要功能是给ssh运行进程加个壳,用来传递交互指令
# ssh -A 是转发密钥设置,用于有堡垒机的场景,一般情况下不需要
spawn ssh -A yourname@yourdomain.com
# 判断上次输出结果里是否包含 Password: 的字符串,如果有则立即返回,否则就等待一段时间后返回,这里等待时长就是前面设置的 10秒
expect "Password:"
# 发送密码 \r 表示字符串结束
send "yourpassword\r"
# 执行完成后保持交互状态,把控制权交给控制台,这个时候就可以手工操作了。
# 如果没有这一句登录完成后会退出,而不是留在远程终端上。
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 登录,不然会出现很多意想不到的情况。当然,这些可能是公司堡垒机有关,我自己服务器不会用得到的。

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 带来的副作用,感谢 穗乃果~


推荐阅读
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 本文将详细探讨 Linux 系统中的 netstat 命令,该命令用于查看网络状态和连接情况。通过了解 IP 地址和端口的基本概念,我们将更好地理解如何利用 netstat 命令来监控和管理网络服务。 ... [详细]
  • VMware Horizon View 5.0桌面虚拟化部署实践与心得
    在近期的研究中,我花费了大约两天时间成功部署了桌面虚拟化环境,并在此过程中积累了一些宝贵的经验。本文将分享这些经验和部署细节,希望能对同样关注桌面虚拟化的同行有所帮助。 ... [详细]
  • Android中解析XML文件的实践指南
    本文详细介绍了在Android应用开发中解析XML文件的方法,包括从本地文件和网络资源获取XML文件的不同途径,以及使用DOM、SAX和PULL三种解析方式的具体实现。 ... [详细]
  • 本文介绍如何从JSON格式的文件中提取数据并将其分配给Bash脚本中的变量。我们将探讨具体的命令和工具,帮助你高效地完成这一任务。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细介绍了如何解压并安装MySQL集群压缩包,创建用户和组,初始化数据库,配置环境变量,并启动相关服务。此外,还提供了详细的命令行操作步骤和常见问题的解决方案。 ... [详细]
  • 本文深入探讨了 PHP 实现计划任务的方法,包括其原理、具体实现方式以及在不同操作系统中的应用。通过详细示例和代码片段,帮助开发者理解和掌握如何高效地设置和管理定时任务。 ... [详细]
  • MySQL 'Too Many Connections' 错误处理及优化方案
    本文详细介绍了如何诊断和解决MySQL数据库中出现的‘Too Many Connections’错误,包括查看当前连接状态、调整配置文件以及优化应用代码等方法。 ... [详细]
  • 理解文档对象模型(DOM)
    本文介绍了文档对象模型(DOM)的基本概念,包括其作为HTML文档的节点树结构,以及如何通过JavaScript操作DOM来实现网页的动态交互。 ... [详细]
  • 请看|间隔时间_Postgresql 主从复制 ... [详细]
  • 本指南详细介绍了如何在同一台计算机上配置多个GitHub账户,并使用不同的SSH密钥进行身份验证,确保每个账户的安全性和独立性。 ... [详细]
  • 本文档详细介绍了在 Kubernetes 集群中部署 ETCD 数据库的过程,包括实验环境的准备、ETCD 证书的生成及配置、以及集群的启动与健康检查等关键步骤。 ... [详细]
  • 在使用 Spring Cloud Config 作为配置中心时,若在配置文件中指定了请求路径但未能生效,本文将探讨其原因及解决方案。 ... [详细]
  • 前言Git是目前最流行的版本控制系统,在它的基础之上,GitHub和GitLab成为当前最流行的代码托管平台,它们均提供的代码评审、项目管理、持续集成等功能,越来越多的互联网企业都 ... [详细]
author-avatar
jac
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有