Pao*_*olo 74 ssh connection-sharing
使用以下.ssh/config
配置:
ControlMaster auto
ControlPath /tmp/ssh_mux_%h_%p_%r
ControlPersist 4h
Run Code Online (Sandbox Code Playgroud)
如何在 4 小时前关闭持久连接?
我知道你可以建立新的连接,但是如何关闭它们(全部)?
也许有一种方法可以显示所有持久连接并单独处理它们,但我找不到它。
Gil*_*il' 102
从手册:
-O ctl_cmd
控制活动连接多路复用主进程。当-O
指定选项时,ctl_cmd
参数被解释并传递给主进程。有效的命令是:(check
检查主进程是否正在运行)、forward
(请求转发而不执行命令)、cancel
(取消转发)、exit
(请求主进程退出)和stop
(请求主进程停止接受进一步的多路复用请求)。
旧版本只有check
和exit
,但这足以满足您的目的。
ssh -O check host.example.com
Run Code Online (Sandbox Code Playgroud)
如果您想一举删除所有连接(不仅仅是与特定主机的连接),则fuser /tmp/ssh_mux_*
orlsof /tmp/ssh_mux_*
将列出控制每个套接字的 ssh 客户端。用于fuser -HUP -k tmp/ssh_mux_*
干净地杀死它们(使用 SIGHUP 作为信号是最好的,因为它可以让客户端正确删除它们的套接字)。
小智 12
我编写了一个开源实用程序cmc
来管理 ControlMaster 会话:ClockworkNet/cmc:
Usage: cmc [ -c HOST | -o HOST | -x HOST ]
cmc [ -L | -l | -O | -X ]
cmc -h
ControlMaster Controller - Eases management of SSH ControlMaster connections
Options:
-h show this help message and exit
-c HOST check HOST ControlMaster connection status (maybe specified more
than once)
-L list ControlMasters defined in SSH_CONFIG
-l list ControlMaster connection sockets in ~/.ssh/ and check their
connection status
-O open all ControlMasters defined in SSH_CONFIG
-o HOST open a ControlMaster session (maybe specified more than once)
-x HOST close ControlMaster session (maybe specified more than once)
-X exit all ControlMaster connections with sockets in ~/.ssh/
Notes:
* Any unopened sockets in ~/.ssh/ are removed with -l and -X
Run Code Online (Sandbox Code Playgroud)
这对我来说仅使用控制主机的套接字文件即可:
$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>
Run Code Online (Sandbox Code Playgroud)
这是我已经建立到远程服务器的连接的示例:
$ ssh -o ControlPath=~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$
Run Code Online (Sandbox Code Playgroud)
并断开连接:
$ ssh -o ControlPath=~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$
Run Code Online (Sandbox Code Playgroud)
如果它仍然连接,这将迫使它立即退出:
$ ssh -o ControlPath=~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$
Run Code Online (Sandbox Code Playgroud)
我不清楚,但它似乎可能是一个错误,因为ssh
它在最后需要一个额外的参数,尽管blah
在我正在使用的开关的上下文中毫无意义。
没有它给我这个:
$ ssh -o ControlPath=~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port]
[-Q cipher | cipher-auth | mac | kex | key]
[-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] [user@]hostname [command]
Run Code Online (Sandbox Code Playgroud)
$ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
Run Code Online (Sandbox Code Playgroud)
CentOS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
Run Code Online (Sandbox Code Playgroud)
我确认,在这两个版本中,都需要额外的虚假参数。
归档时间: |
|
查看次数: |
31981 次 |
最近记录: |