ControlMaster 目录的权限

ControlMaster 目录的权限

允许使用同一通道执行多个命令ControlMaster的功能,例如sshssh我如何维持开放的 ssh 连接并从 shell 脚本中使用它?

为了使用ControlMaster,我添加了以下几行~/.ssh/config

Host example.com
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 5m

当我运行时ssh example.com,出现以下错误:

$ ssh example.com
bind: No such file or directory
unix_listener: cannot bind to path: /home/peter/.ssh/sockets/[email protected]

为了解决这个问题,我可以运行mkdir ~/.ssh/sockets

$ mkdir ~/.ssh/sockets
$ ll ~/.ssh/sockets
total 8
drwxrwxr-x 2 peter peter 4096 Dec 28 17:51 ./
drwx------ 3 peter peter 4096 Dec 28 17:51 ../

可以看到,该目录~/.ssh/sockets是有权限的rwxrwxr-w的权限应该是什么~/.ssh/socketssockets甚至应该在~/.ssh

答案1

您可以将sockets目录放在任何您喜欢的地方(只要您有在那里写入的适当权限),但将其放在里面在我.ssh看来是更明智的想法(除了一些非常罕见的特殊情况,比如我曾经遇到过:路径名太长)

因为.ssh应该已经是 之类的了drwx------, 的权利.ssh/sockets可能相同甚至更加自由,这不会产生任何影响。

但我不认为这是你的问题。你的错误消息与你的配置文件不一致。配置文件@中有ControlPath(并且没问题)但在错误消息中没有。

测试时,请确保首先终止ssh给定主机上所有正在运行的实例,因为某些实例可能会根据您的配置持续存在,然后如果您更改它,您可能无法获得预期的行为。

example.comPS:当你需要虚拟主机名用于文档目的时请使用

答案2

创建您将要创建 unix 套接字的目录,如在 OP 中一样,如果您使用ControlPath ~/.ssh/sockets/%r@%h-%p,则使用以下命令:

mkdir -p ~/.ssh/sockets

编辑:该目录可能不存在。

相关内容