Вызывать локальную команду при каждом успешном соединении при использовании ssh-мультиплексирования?

897
Shabble

Я хотел бы автоматически запускать команду каждый раз, когда я успешно подключаюсь к удаленному хосту через ssh.

Я могу сделать это для первого подключения к каждому хосту, используя PermitLocalCommand yesи LocalCommand ~/bin/ssh-notify-meзапись по моему ~/.ssh/config, похоже на этот ответ, но я также использую довольно агрессивную конфигурацию SSH мультиплексирования (примерно следующий):

Host * PermitLocalCommand yes ServerAliveCountMax 2 ServerAliveInterval 5 ControlPath ~/.ssh/mux/%r@%h:%p ControlMaster auto ControlPersist 1h 

При такой настройке LocalCommand выполняется только для первого соединения до того, как существует управляющий / мультиплексированный сокет. После этого я подключаюсь, но команда не запускается.

Есть ли способ (без отключения мультиплексирования), чтобы убедиться, что LocalCommand или какой-либо эквивалент происходит для каждого нового открытого интерактивного сеанса?

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

4
Когда вы говорите «каждый новый сеанс», означает ли это просто интерактивные сеансы (где вы получаете приглашение командной строки на удаленном сервере)? Или это включает неинтерактивные сеансы? Как насчет сессий scp? сеансы sftp? Эта команда выводит вывод на терминал? Kenster 9 лет назад 0
@ Кенстер: Извините, да. Я имел в виду каждую интерактивную сессию (так обычно `ssh foo`, и` ssh foo -t`, но не scp / что-либо еще, что не выделяет pty. Отредактированный вопрос, чтобы уточнить. Shabble 9 лет назад 0
`автоматически запускать команду каждый раз, когда я успешно соединяюсь` - и это именно то, что происходит. `man 5 ssh_config` говорит о` ControlMaster`: `Включает совместное использование нескольких сеансов через одно сетевое соединение`. Так что есть только одна связь. Главный процесс `ssh` создает его (соединяет), любой последовательный` ssh` использует его. Я понимаю, чего вы хотите достичь; моя точка зрения в том, что вы используете слово «соединение», где «сессия» - это то, что вы имеете в виду. Kamil Maciorowski 5 лет назад 0

0 ответов на вопрос