持久化ssh连接
Oct 12, 2015
前两天在设置github
的多ssh-key
登陆时,有个问提扰了我好久,直到后来才找到原因,特此记录一下。
话说前段时间在用超算中心跑实验的时候,由于学校的战斗力为5的渣渣网速,ssh
以及sshfs
每隔几分钟就断掉一次,而每次连接又耗费大量时间等待其身份验证,于是从google上查找了一下,在~/.ssh/config
添加两行:
好吧,瞬间有一种便秘了好多天突然畅通无阻的感觉(我承认我是有够低俗的),心情舒畅了不少。但具体是什么意思自己也没细想,就把他搁那儿了。
然后的然后,在设置多个github
登陆时,又修改了.ssh/config
文件如下:
然后ssh
分别进行测试两个Host能否联通,但令人抓狂的是每次return的都是Hi, User1
,而且对User2的repo进行push
也无法认证,因为是User1的sshkey,如此几次怎么查找都找不出问题所在,后来一怒之下关机重启了。
再一次进行ssh
测试User2的连接情况,奇迹发生了,终于出现Hi, User2
了,但这时ssh
User1也成了Hi, User2
,突然想起来是不是config
里前三行搞的鬼?然后继续问谷歌吧。
ControlMaster auto
告诉ssh客户端尝试重用现有的连接(master connection)。ControlPath
指定了这个连接的socket保存位置,这里保存在/tmp
路径下,以便重启后便删除了,实际放在其他地方也可以。文件名中%h表示远程主机名(host),%p表示端口(port),%r表示远程用户名(remote user name)。文件可随时rm
掉然后重新连接。ControlPersist 4h
表示在创建的首个连接(master connection)的会话推出后,master连接仍然在后台保留,以便其他复用该连接的会话不会出现问题。- — @李林克斯 《重用SSH连接》
难怪,由于的我的ControlMaster
配置没有在哪个Host
下,因此对全局生效,况且github
的user都是git
,所以导致每次验证的都是master
的连接,难怪会出现问题。看来以后遇到问题后不能什么都不懂直接Copy,因为接下来总会有莫名其妙的问题等着你。
12 Oct 2015
Post by: MetaCoder