全部博文(151)
分类: LINUX
2009-11-26 09:15:42
原理很简单,开一个ssh连接在后台放着,以后再有需要用到ssh到同样主机的时候,直接使用这个连接的socket文件,不用再创建连接了,同理,也不需要再进行用户身份验证。
默认是关闭的,可以在~/.ssh/config
中打开:
Host *
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p
创建“Master”连接就可以用:
ssh -M -N -f fwolf.com
认证成功后会创建socket文件master-fwolf@fwolf.com:22
。
其它的介绍资料也很多,我是在中看到的,惭愧,使用ssh很久了,现在才知道,网上用ssh master ControlMaster搜索资料很多。
实际使用中,我倒有一个反面的感觉,创建了“Master”之后,一般的scp什么的操作的确是快了,可如果单独开一个ssh terminal上去的话,输入的响应速度很变慢。开始以为是这个ssh连接也重用了“Master”的原因,后来加上-o ControlMaster=no
参数强制不使用Master,单独创建新连接也是一样,不知道是什么原因导致的。
仔细测试一下效果,首先在已经创建Master的情况下连接主机,执行命令并马上退出:
$ time ssh fwolf.com -C pwd
执行多次,得到的执行时间一般在0.33秒左右,然后关闭Master,再次执行这个命令,平均执行时间为6.7秒,的确是快了许多。
后来才发现,刚才对响应速度“慢”的感觉应该是错误的,可能是由于另外开着一个scp的缘故,scp完成之后,速度就快很多了。之所以会感觉“慢”,其实也是相对而言的,因为单独ssh连接上去之后,也是不中断的持续连接、持续响应,同样没有重新建立连接的时间,速度也是非常快的。开启Master主要对那些一会儿连接、一会儿断开,请求断断续续的情况最有效果。
另外,还有两个比较有用的相关控制命令:
# 检查当前是否已经创建Master连接
$ ssh fwolf.com -O check
Master running (pid=6350)
# 发送断开当前Master连接的请求,比我用的笨kill方式好多了
$ ssh fwolf.com -O exit
Exit request sent.
$ ssh fwolf.com -O check
Control socket connect(/home/fwolf/.ssh/master-fwolf@fwolf.com:22): No such file or directory