为什么不在OpenSSH ssh的ControlPath选项中简单地使用%h?


13

为什么“ ssh_config(5)”联机帮助页建议该ControlPath选项至少包含%h%p%r占位符,以便唯一标识每个共享连接?

我认为多个会话应该通过连接到同一主机共享同一套接字。那么拥有一个简单的定义(如:)是否有意义?

ControlPath ~/.cache/ssh/mux/%h

而不是这样的:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

根据我对第一个定义的理解,一个连接在具有不同远程用户的多个会话之间共享到不同远程端口上的同一远程主机。

我想在主机默认部分中有第一个定义,这样就足以说了ssh -o ControlMaster=no

我想在同一本地用户发起的所有会话之间共享与同一远程主机的连接,而不管远程用户和远程端口如何。主客户端的套接字应位于本地用户的主目录下。


“我想在同一个本地用户发起的所有会话之间共享与同一个远程主机的连接,而不管远程用户和远程端口如何。” 简短答案:您不能。我在回答中添加了一种解释。
goldilocks 2013年

Answers:


13

“我认为多个会话应该通过连接到同一主机共享同一套接字。”

他们能。但是,请注意,如果您使用现有连接通过连接到主机ControlPath,则无论您打算以哪个用户身份登录,都将以该连接的原始用户身份登录。例如,与“某处”没有已建立的连接:

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

本次会议是bob @ somewhere。

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

此会话将是bob @ somewhere,因为您使用了相同的ControlPath并设置了ControlMaster=no; 如果ControlMaster=yes,则您将以sue身份登录,但是ssh会忽略您的ControlPath参数,这暗示于man ssh_config

其他会话可以使用相同的ControlPath (将ControlMaster设置为'no')连接到此套接字

作为证明,如果ControlMaster=yes在两种情况下,当bob退出时,~/.ssh/somewhere即使“ sue”会话仍在运行,ControlPath套接字也将消失,这意味着sue会话从未使用过该套接字

因此,如果您想使用相同的连接,那%h很好,但是请注意,您不能以多个不同的远程用户身份共享连接 -ssh不会允许您。


非常感谢。在做出详尽的回答之前,我错过了一个事实,那就是在不同的远程用户之间不能共享客户端的主套接字,而第二个远程用户不能同时假设第一个远程用户的身份。
Tim Friske 2013年

5

您甚至可以为同一台服务器使用多个用户和多个端口。我本人连接到公司Intranet上的数百个系统,大多数系统具有具有不同功能或应用服务器的多个用户。对userA的访问与对userB的访问非常不同,并且主连接将需要不同。更简洁地说,如果要运行:

$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA

如您所见,我们没有通过userB获得OpenSSH会话,但通过userA获得了原始会话。这意味着主目录,权限甚至身份验证本身都不是预期的。使用此方法,如果要尝试删除userB目录中的文件,则a)可能是错误的文件,b)可能是错误的权限。

如果您永远不会使用单个端口连接到任何一台服务器上的单个用户,那么可以,使用%h就足够了。在您的~/.ssh/config文件中,您想使用:

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

使用该ControlPersist选项,主连接将在后台保持打开状态,直到被终止或终止ssh -O exit。这是一个很棒的“设置即忘”功能。

但是,如果有任何连接到多个用户的任何一台主机上的可能性,那么你会想要的东西更安全:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes

我还是很困惑。我试图在“我想要”段落中阐明配置方案和意图。你们中的任何人都可以使用此附加信息更准确地回答我的问题吗?
Tim Friske 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.