欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

iTerm2结合expect实现一键登录ssh服务器

程序员文章站 2022-07-09 15:28:09
...

        作为一名程序员,每天免不了要远程链接服务器,一般情况下公司的服务器都在内网,访问一般先登陆跳板机,然后再通过跳板机登陆到相应的服务器进行操作。这样的话,我们在登陆过程中输入密码较为麻烦,如果有一个自动化工具,那么每次操作就方便多了,接下来介绍具体的操作方法:

 

01 自动登陆的实现原理

       由于跳板机上无法保存文件,因此无法通过配置秘钥来实现免密登陆的功能。但是我们可以通过Linux的shell脚本嵌套expect来实现。

       expect基于tcl语言,是一个控制交互式程序的工具。不管是交互性还是非交互性的操作,expect都能实现。基于此,才能有接下来利用ssh进行登录远程服务器的操作。

 

02 实现步骤(以iTerm2为例)


1.  打开iTerm2终端,输入 cd ~/.ssh ,进入到账户的的主目录下的~/.ssh目录。

2. 进入到~/.ssh目录后,创建一个关于自动登录shell文件,例如:命名为iterm2_login,执行 touch iterm2_login 命令创建好文件。

3. 使用命令 vi iterm2_login 打开创建好的文件,写入内容:

#!/usr/bin/expect#trap sigwinch spawned#捕获窗口大小改变的信号,解决expect导致窗口缩放,vim错乱的问题trap {    set rows [stty rows]    set cols [stty columns]    stty rows $rows columns $cols < $spawn_out(slave,name)} WINCH
#设置超时时间set timeout 300
set HOST [lindex $argv 0] 
set TERMSERVIP 跳板机服务器ipset TERMSERVUSER 跳板机用户名set TERMSERVPWD 跳板机密码set UATUSER 内网用户名set UATPWD 内网密码
# 登录跳板机spawn ssh -l $TERMSERVUSER $TERMSERVIPexpect {    "yes/no" {send "yes\r";exp_continue;}    "*password:*" { send "$TERMSERVPWD\r" }}# 登录内网expect "*aaa@qq.com*" {send "ssh aaa@qq.com$HOST\r"}expect {    "yes/no" {send "yes\r";exp_continue;}    "*password:*" { send "$UATPWD\r" }}# 交互模式,脚本执行完后控制权会交给控制台interact

4. 给文件可执行权限 chmod +x iterm2_login

 

5. 配置Profile

(1)打开iterm2,打开profiles(再者菜单Profiles->Open Profiles),点击右下角的Edit Profiles ,里面选左下角的 + 号增加一条,配置如下图所示:

iTerm2结合expect实现一键登录ssh服务器

 

Name: 无限制,尽量方便自己识别Tags: 标签,可写可不写,服务器多的话建议设置一个send text at start: /Users/xxxx/.ssh/iterm2_login 内网服务器IP也可以写成 ~/.ssh/login_inner 内网服务器IP

 

iTerm2结合expect实现一键登录ssh服务器

【微语】

生活就是知道自己的价值、自己所能做到的与自己所应该做到的。  

——雨果《莎士比亚论》 

iTerm2结合expect实现一键登录ssh服务器

 

 

iTerm2结合expect实现一键登录ssh服务器

更多及时干货,请关注微信公众号:JAVA万维猿圈