В последнее время я часто использую функцию ControlMaster клиента SSH, которая позволяет мне использовать одно SSH-TCP-соединение для нескольких оболочек и переадресаций портов в одну и ту же удаленную систему. Самое неприятное в этом то, что первый открытый процесс оболочки автоматически становится ControlMaster. Это означает, что, если этот процесс завершается, все другие оболочки и переадресация портов, использующие главное управляющее соединение, становятся недоступными.
Мне бы очень хотелось, чтобы первая команда ssh для удаленной системы порождала дополнительный фоновый процесс, который удерживает соединение, пока все еще есть соединения, использующие соединение ControlMaster, поэтому я мог бы просто закрыть фактические оболочки без риска сбоя другого соединения. В идеале фоновый процесс ControlMaster мог бы быть даже настроен так, чтобы ждать, пока новые оболочки или переадресация портов не будут использовать ControlMaster, прежде чем окончательно завершить работу.
Есть ли способ заставить клиента SSH делать такие вещи? Я знаю, что мог бы создать такое соединение вручную, прежде чем использовать ssh для создания первой оболочки, но я явно хочу, чтобы это происходило автоматически, потому что в противном случае я наверняка забуду делать это время от времени.
Позволить сценарию-оболочке сделать это также было бы нелегко, потому что я часто использую настроенные сокращения для имен удаленных серверов в .ssh / config, а сокет ControlMaster создается с использованием USERNAME @ NETWORK_NAME: NETWORK_PORT в качестве имени. Поэтому оболочка должна понимать файл .config / ssh идеально, чтобы работать как задумано.