SSH LocalCommand на виході


9

У ~/.ssh/configви можете використовувати LocalCommandдирективу , щоб виконати локальну команду кожен раз при підключенні до віддаленого комп'ютера через SSH. Але як я виконати команду , коли я вийти з з'єднання SSH? Здається, що файли * .bashrc / .bash_profile * не отримуються, коли з'єднання закінчується або закрите.


Це питання тісно пов’язане з unix.stackexchange.com/questions/40830/…
Bananguin

Відповіді:


11

У запитанні не вказано, чи потрібно це виконати на локальній або віддаленій машині. Також не вказано, яка оболонка присутня на обох машинах, тому я припускаю, що bashдля обох.

Якщо ви хочете виконати його на віддаленій машині, подивіться ~/.bash_logout, що виконується, коли оболонка входу граціозно виходить. Від man bash:

Коли оболонка входу виходить, bash зчитує та виконує команди з файлу ~/.bash_logout, якщо він існує.

Ви можете зробити тест, ~/.bash_logoutщоб перевірити, чи не виходить з оболонки сеанс SSH, щось подібне має працювати:

if [[ $SSH_CLIENT || $SSH_CONNECTION || $SSH_TTY ]]; then
    # commands go here
fi

Якщо ви хочете виконати його на локальній машині, створіть навколо нього функціональну обгортку ssh. Щось таке, що має працювати:

ssh() {
    if command ssh "$@"; then
        # commands go here
    fi
}

Це може бути занадто простим для ваших потреб, але ви отримуєте ідею.


Мені потрібна була команда для виконання на локальній машині. Дякую за пропозицію. Це працює безперебійно.
Роберто Алої

1

Ви на правильному шляху. Якщо sshсеанс - це оболонка для входу (замість віддаленої команди), bashбуде джерелом /etc/bash.logoutта ~/.bash_logoutпісля виходу з оболонки.

Якщо ви хочете виконати віддалену команду, ви можете змусити bashбути оболонкою для входу. LocalCommandМоже бути схожий на це:

bash -l -c /execute/some/command

З man 1 bash

-c string   If  the  -c  option  is  present, then commands are read from 
string.  If there are arguments after the string, they are assigned to 
the positional parameters,  starting with $0.
-l   Make bash act as if it had been invoked as a login shell 

When  a login shell exits, bash reads and executes commands from the 
files ~/.bash_logout and /etc/bash.bash_logout, if the files exists.

1
Не, якщо виконується віддалена команда (Якщо вказана команда, вона виконується на віддаленому хості замість оболонки входу.) Однак, ознайомившись із питанням про ОП, схоже, він хоче, щоб щось сталося на місцевому рівні, тому я вважаю, що ви відповісти більш доречно.
Джордж М
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.