Автоматический запуск кода перед закрытием соединения SSH

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

Чего не хватало в вашем первоначальном эхе, так это переключателя -e:

   -e     enable interpretation of backslash escapes
   -E     disable interpretation of backslash escapes (default)

И новая строка + команда quit для выхода из telnet после отключения. Таким образом:

echo -e '\035\nquit' | telnet 10.0.0.1 23 && echo "success" || echo "failed"

Очевидно, то же самое будет работать, если вы используете оператор if в блочном стиле и вычисляете $? как вы делали вначале:

echo -e '\035\nquit' | telnet 10.0.0.1 23
if [ $? -eq 1 ]
then
  echo "Console is down."
fi

Пока мы на этом, что касается nc, это зависит от того, какой вариант nc у вас есть (gnu ncat против nmap -ncat ). Gnu будет иметь переключатель -z :

.
  -z                         Zero-I/O mode, report connection status only
nc -z 10.0.0.1 23
# (evaluate $? here)

в то время как другой не будет, и вам придется передать пустую строку на ваш NC, чтобы не застрять:

echo | nc 10.0.0.1 23
# (evaluate $? here)
7
27.06.2021, 08:20
1 ответ

Вы можете установить trapв .bashrc, который запускается при выходе из оболочки :

Что-то вроде

trap 'test -n "$SSH_AGENT_PID" && eval "$(/usr/bin/ssh-agent -k)"' 0

При необходимости добавьте подпрограмму в.bash_logout

15
28.07.2021, 11:22

Теги

Похожие вопросы