ControlMaster目录的权限

Pet*_*ter 6 ssh permissions

ControlMaster功能ssh允许对多个命令使用相同的通道ssh,请参见如何维护开放的 ssh 连接并从 shell 脚本中使用它?

为了使用ControlMaster,我将这些行添加到~/.ssh/config

Host example.com
  ControlMaster auto
  ControlPath ~/.ssh/sockets/%r@%h-%p
  ControlPersist 5m
Run Code Online (Sandbox Code Playgroud)

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

$ ssh example.com
bind: No such file or directory
unix_listener: cannot bind to path: /home/peter/.ssh/sockets/peter@example.com-22.O2cv7vtsgMAFCav7
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我可以运行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 ../
Run Code Online (Sandbox Code Playgroud)

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

Pat*_*zek 4

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

由于.ssh应该已经是类似 的东西drwx------, 的权利.ssh/sockets可能相同或更自由,因此这不会产生任何影响。

但我不认为这是你的问题。您的错误信息与您的配置文件不一致。配置文件@中有一个ControlPath(这是可以的),但在错误消息中你没有。

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

PS:example.com当您需要虚拟主机名用于文档目的时,请使用