当前位置: 首页 > Linux

iTerm2结合Linux期望实现ssh自动登录,通过跳板机登录服务器内网功能

时间:2023-04-06 22:37:00 Linux

痛点一般情况下,公司所有服务器都在内网,公网访问和管理服务器必须先登录到一台跳板机,然后从跳板机登录对应的服务器进行操作,跳板机和服务器的连接就是内网地址。我们经常看到的现象如下图所示(博主Mac自带的终端做的演示)。每次我们都要通过ssh登录两次,输入两次密码,还经常输错密码,非常麻烦。这时候我们就需要使用更好的工具来解决这个问题,可以实现自动登录,避免把时间花在这种无意义的事情上。我用的工具是iTerm2,iTerm2是一款非常好用的Mac终端工具,具体介绍和基本用法可以自行搜索。当然只有iTerm2是不够的,可以使用Linuxexpect的脚本实现自动登录。解决方案expext脚本通过跳板机登录内网服务器。如果只登录有外网的服务器,可以删除关于内网的部分。比如跳板机就是一个有外网的服务器。#!/usr/bin/expectsethost[lindex$argv0]setTERMSERV跳板机IPsetUSER跳板机用户名设置PASSWORD跳板机密码设置UATUN内网服务器用户名设置UATPWD内网服务器密码#登录跳板spawnssh-l$USER$TERMSERVexpect{"yes/no"{send"yes\r";exp_continue;}"*password:*"{send"$PASSWORD\r"}}#登录内网expect"*springboard用户名@*"{send"ssh-l$UATUN$host\r"}expect{"yes/no"{send"yes\r";exp_continue;}"*password:*"{send"$UATPWD\r"}}interact保存上面的脚本作为您指定文件夹中的文件,例如login_inner。我的文件路径是/Users/wangyongzhi/.ssh/login_inner,wangyongzhi是我的本地用户名。别忘了加上可执行权限,方法是chmod-Ra+x/Users/wangyongzhi/.ssh/login_inner,不然后面执行的时候会报permissiondenied:/Users/wangyongzhi/.ssh/login_inner说明上面的shell脚本是什么意思?#!/usr/bin/expect注意:这一行必须是脚本的第一行,告诉操作系统脚本中的代码使用哪个shell来执行sethost[lindex$argv0]这一行就是设置的意思变量的变量名可以随便取,尽量有意义,后面表示传入的参数,0表示第一个参数,后面会用到。下面几组类似。跳板机的用户名和密码一般都是一样的。它们可以放在这个脚本中。内网服务器可以有选择性的放,也可以放在参数里,一个一个传入。本文仅以一个为例。.spawnssh-l$USER$TERMSERVspawn是expect环境的内部命令。它的主要功能是在ssh运行过程中增加一个shell,用来传递交互指令。expect{"yes/no"{send"yes\r";exp_continue;}"*password:*"{send"$PASSWORD\r"}}expect也是expect环境的内部命令。判断上一条命令输入后得到的输出结果是否包含""双引号括起来的字符串,比如下面的"*password:*",表示最后的输出结果包含password:*通配符表示任意字符可以在前后使用。如果是第一次登录,会有“yes/no”的字符串,然后发送(send)命令“yes\r”,然后继续(exp_continue)。类似于下面。interact:执行完成后,保持交互状态,将控制权交给控制台。iTerm2的配置上面的脚本解释完之后,就到了配置iTerm2的时候了。在preferences->profiles中,选择左下角的+号,添加一个,配置如下图,Name:随便起,试着讲道理,就知道是哪个服务器Tags:标签,可写可不写,如果服务器较多,建议在开始时设置一个发送文本:/Users/wangyongzhi/.ssh/login_inner内网服务器IP也可以写成~/.ssh/login_inner内网服务器IP内网服务器IPIP就是上面shell脚本中的参数,和前面的文件空间差不多哈哈,至此,你已经完成了所有的准备工作,这时候再登录服务器,只需要三步。1.打开iTerm22.快捷键Command+o打开Profiles3如下图。选择你要进入的服务器名称,即可进入。好处:我这里有一些电子书库存。估计有几万份。ID:zhige-me),后台回复“阅读”获取。扫描下方二维码关注。