由于本人的日常工作原因,几乎所有时间都会在远程服务器工作,之前用的是Windows系统,使用xshell保存用户名和密码很方便,后来换了MacOS之后,虽然iTerm2很好用每次登陆都要自己输用户名和密码,一次两次还好,对于经常使用的或者需要同时开很多窗口的时候就很头疼麻烦,然后通过上网搜索终于解决了这个问题,下面就详细介绍一下。
首先cd ~/.ssh/
然后vim work.sh
然后将以下代码复制进去,保存退出
#!/usr/bin/expect -fset user usernameset host 0.0.0.0set password keysset timeout -1spawn ssh -XY $user@$hostexpect "*assword:*"send "$passwordr"interactexpect eof
将username,0.0.0.0,keys分别替换成用户名,远程地址,以及相应密码即可。后面我加的-XY是为了显示图形界面。
之后,打开iTerm2->Preferences,如下图
之后会得到如下界面:
点击+号,然后将右面Name改成任何你想改的名字,下面我圈住的地方使用Command,并将expect ~/.ssh/work.sh填入进去即可。之后新建窗口选择刚才保存好的端口即可。
但是,问题又来了,虽然这样可以顺利登录进去,但是细心的人会发现这样登录存在一个问题,就是当终端窗口改变大小时,远程服务器并不会随之改变,所显示的区域还是一开始的大小,如下所示:
查找好多方法,终于找到原因所在,原来是因为设置自动登录时使用了expect,它无法检测到窗口改变,也就无法跟踪窗口,所以需要在原来代码的基础上加上如下几句:
#trap sigwinch spawnedtrap {set cols [stty columns]set cols [stty columns]stty rows $rows columns $cols < $spawn_out(slave,name)} WINCH
这个作用是可以将窗口改变的信号传送到远程服务器,最终完善的代码如下:
#!/usr/bin/expect -f#trap sigwinch spawnedtrap {set cols [stty columns]set cols [stty columns]stty rows $rows columns $cols < $spawn_out(slave,name)} WINCHset user usernameset host 0.0.0.0set password keysset timeout -1spawn ssh -XY $user@$hostexpect "*assword:*"send "$passwordr"interactexpect eof
这样就很完美啦~~~~
小帖士:
有时候远程登录服务器经常会出现如下提示,
每次都要手输yes也是件麻烦的事情,解决办法也很简单,就是修改/etc/ssh/ssh_config文件,将其中的# StrictHostKeyChecking ask 改成 StrictHostKeyChecking no就行,要用管理员身份打开呀,即sudo vim /etc/ssh/ssh_config