Могу ли я заставить ssh сказать мне, какой файл управления он будет использовать для мультиплексирования?

Я использую следующие параметры в моем ~/.ssh/config чтобы включить мультиплексирование соединения:

ControlMaster auto
ControlPath ~/.ssh/control/master-%r@%h:%p

Однако это вызывает досадную проблему, заключающуюся в том, что первая оболочка, подключающаяся к определенному серверу, должна отключаться последней, потому что это главное соединение, которое используют все остальные соединения. Так что, если вы выйдете из мастера, он просто зависнет. Чтобы решить эту проблему, я хотел бы обернуть ssh скриптом, который проверяет, существует ли главный файл управления, и если нет, запускает основной процесс ssh в фоновом режиме. Затем начнется сеанс подчиненного SSH.

Для этого мой сценарий должен определить путь к контрольному файлу, который будет использовать ssh. Это повлечет за собой анализ параметров командной строки и файлов конфигурации ssh и реализацию логики для определения ControlPath. Есть ли способ просто спросить ssh, какой путь он будет использовать, чтобы я мог проверить это?

2 ответа

Решение

Просто нашел это. ssh -O check HOST

Из моих тестов принят ответ:

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 это будет оцениваться для локальной машины.

Другие вопросы по тегам