您甚至可以为同一台服务器使用多个用户和多个端口。我本人连接到公司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