ssh的连接重用
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/385)的形式标明文章原始出处和作者信息及本声明。原理很简单,开一个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
参考
Accelerating OpenSSH connections with ControlMaster
Bookmark and Share This Page
If you like this then please subscribe to the RSS Feed.
Save to Browser Favorites
Ask
backflip
blinklist
BlogBookmark
Bloglines
BlogMarks
Blogsvine
BuddyMarks
BUMPzee!
CiteULike
co.mments
Connotea
del.icio.us
DotNetKicks
Digg
diigo
dropjack.com
dzone
Facebook
Fark
Faves
Feed Me Links
Friendsite
folkd.com
Furl
Google
Hugg
Jeqq
Kaboodle
kirtsy
linkaGoGo
LinksMarker
Ma.gnolia
Mister Wong
Mixx
MySpace
MyWeb
Netvouz
Newsvine
PlugIM
popcurrent
Propeller
Reddit
Rojo
Segnalo
Shoutwire
Simpy
Slashdot
Sphere
Sphinn
Spurl.net
Squidoo
StumbleUpon
Technorati
ThisNext
Webride
Windows Live
Yahoo!
Email This to a Friend
March 10th, 2008 at 14:40:06
单独用就很好用
但是我用ssh做tunnel就不正常了
表现在,如果已经有了一个ssh
再连一个ssh不用输入密码,这个正常
但是已经不能做tunnel了
或者做了一个tunnel之后做不了第二个
[Reply]
March 10th, 2008 at 19:26:17
如果已经开了master,再作tunnel的时候
可以试着用
-S ControlPath指定其他master的socket(master也可以不存在)或者用
-o ControlMaster=no关闭对master的使用?不过我都没有测试过,建议你试试。
Update
已测试这种方式可用:
ssh fwolf.com -o ControlPath=/tmp/ssh
指定一个不存在但可写的socket文件就可以了。
[Reply]