Могу ли я заставить ssh сказать мне, какой файл управления он будет использовать для мультиплексирования?
Я использую следующие параметры в моем ~/.ssh/config
чтобы включить мультиплексирование соединения:
ControlMaster auto
ControlPath ~/.ssh/control/master-%r@%h:%p
Однако это вызывает досадную проблему, заключающуюся в том, что первая оболочка, подключающаяся к определенному серверу, должна отключаться последней, потому что это главное соединение, которое используют все остальные соединения. Так что, если вы выйдете из мастера, он просто зависнет. Чтобы решить эту проблему, я хотел бы обернуть ssh скриптом, который проверяет, существует ли главный файл управления, и если нет, запускает основной процесс ssh в фоновом режиме. Затем начнется сеанс подчиненного SSH.
Для этого мой сценарий должен определить путь к контрольному файлу, который будет использовать ssh. Это повлечет за собой анализ параметров командной строки и файлов конфигурации ssh и реализацию логики для определения ControlPath. Есть ли способ просто спросить ssh, какой путь он будет использовать, чтобы я мог проверить это?
2 ответа
Из моих тестов принят ответ:
ssh -O check HOST
даст только контрольный файл, если он не выходит
Control socket connect(<path to control file>): No such file or directory
иначе
Master running (pid=<number>)
Тем не менее, grep и ssh -G
всегда даст вам путь.
-G Заставляет ssh распечатать свою конфигурацию после оценки блоков Host и Match и выйти.
>>> ssh -G HOST | grep controlpath
controlpath <path to control file>
Примечание: если вы используете %l
или же %C
(например) в конфигурационном файле ssh это будет оцениваться для локальной машины.