У меня есть несколько коммутаторов HP, в которые я вхожу через ssh. Коммутаторы посылают команду терминала на отключение переноса строки («rmam» на языке terminfo), но затем не в состоянии повторно включить его, что приводит к повреждению моего терминала после того, как я завершаю сеанс ssh. Я могу починить терминал, запустив tput smam
.
Есть ли способ заставить ssh автоматически запускать эту команду после завершения моего сеанса ssh?
Это не убило бы меня запускать его как автокоманду оболочки или псевдоним, ssh
чтобы всегда запускать эту команду впоследствии, но я бы предпочел решить проблему через ssh, чтобы я мог ограничить запуск команды только после подключения к известному Плохие хозяева.
Мой SSH-клиент OpenSSH_6.2p2, но я могу изменить или обновить, если где-то есть новая функция.
ssh 1.2.3.4 && tput smam
Ответы:
У OpenSSH есть опция с именем,
LocalCommand
которая запускает команду на стороне клиента, когда вы устанавливаете ssh-соединение. К сожалению, он запускает команду до установления сеанса ssh, а не после. Но это дало мне идею, что я мог бы каким-то образом заставить предыдущий процесс ждать окончания сеанса ssh. Несмотря на то, что процесс ssh является родительским PID LocalCommand, оказывается, что все еще не так просто.Тем не менее, я нашел что-то, что работает для меня под MacOS X, и должно работать на (других) BSD, если не на Linux. Я написал небольшую программу на C, которая использует
kqueue()
интерфейс для ожидания собственного ppid, а затем запускает предоставленную команду после завершения этого процесса. (Список исходного кода ниже, для тех, кто заинтересован.)Теперь мне просто нужно сослаться на эту программу в моем
~/.ssh/config
файле:И это, кажется, работает просто отлично. Те из вас, кто работает в Linux ... Я думаю, вы можете попробовать то же самое, опросив
LocalCommand
ppid и надеясь, что этот pid не будет использован повторно. (См. Https://stackoverflow.com/questions/1157700/how-to-wait-for-exit-of-non-children-processes )wait4parent.c:
источник
Вы можете сделать для этого простую оболочку ssh и указать в ней команды, которые будут запускаться после ssh, например
источник
eval
этого. Это отбрасывает выгоду двойных кавычек$@
.