SSH建立连接后执行命令不自动退出

情景

在实习期间,我需要连接公司的开发机做日常的开发项目,但是我需要先设置一个环境变量USER_NAME然后进入我自己的个人文件夹。
在windows上这是比较简单就能实现的,只要用securyCRT启动时附带启动脚本就可以实现建立ssh链接后,在远程机执行命令

探究

如果我们使用

1
ssh 1@2.com -p 22 'pwd'

电脑会进行ssh连接,连接成功后执行pwd命令返回当前目录,然后会自动退出

但是纵观mac的terminal并没有预设命令的功能,尝试iterm2有一个profile的选项卡,这个可以实现建立ssh连接并远程执行命令,但是由于只能设置快捷键启动profile,而且不能通过alfred的>alias来快速执行bash命令。
所以我继续探索有没有方法在原生的terminal上实现这个功能,经过V2EX的高人指点发现是可行的。

具体命令

1
ssh 1@2.com -p 22 -o ServerAliveInterval=60 -t 'pwd;bash;'

解释

-o ServerAliveInterval:首先-o是为这个连接添加一个属性(option),那么要添加的属性叫做ServerAliveInterval,这个属性的作用是client每隔60秒发送一次请求给server,然后server响应,从而保持连接。

-t:建立这个连接时强制使用伪终端模式,具体效果观者可以试着去掉这个命令对比一下效果。

'pwd;bash;':这就是我们要执行的命令,首先执行了一个pwd命令,查看当前的目录,第二命令是重点,执行bash命令能够让我们远程执行命令后不自动断开ssh连接。

所以解决自动退出的有效方法就是在执行命令最后使用bash;这个命令。

号外

其实linux系统可以用alias命令让我们简化ssh命令连接打这么多字母,这个你可以自己百度一下噢~