Функция ControlMaster
в ssh
позволяет использовать один и тот же канал для нескольких ssh
-команд, см., Например, Как сохранить открытое ssh-соединение и использовать его из сценариев оболочки?
Чтобы использовать 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/peter@example.com-22.O2cv7vtsgMAFCav7
Чтобы это исправить, я могу запустить 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/sockets
? Должен ли sockets
быть даже в ~/.ssh
?
Вы можете поместить свой каталог sockets
в любое удобное для вас место (при условии, что у вас есть соответствующие права для записи в него), но размещение его внутри .ssh
кажется мне более разумной идеей (за исключением некоторых очень редких конкретных случаев). как у меня было однажды: путь был слишком длинным)
Поскольку .ssh
уже должно быть чем-то вроде drwx------
, права на .ssh/sockets
могут быть такими же или более либеральными, это не окажет никакого влияния.
Но я не думаю, что это твоя проблема. Ваше сообщение об ошибке не соответствует вашему файлу конфигурации. Файл конфигурации имеет @
в ControlPath
(и это нормально), но в сообщении об ошибке его нет. S>
При тестировании сначала убедитесь, что все работающие запущены. ssh
экземпляров к данному хосту, так как некоторые могут сохраняться для вашей конфигурации, а затем, если вы измените его, вы можете не получить ожидаемого поведения.
PS: пожалуйста, используйте example.com
, когда вам нужно фиктивное имя хоста для документирования s>