Назад | Перейти на главную страницу

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

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

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

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

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

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