Perintah Lokal SSH saat keluar

9

Di dalam ~/.ssh/configAnda dapat menggunakan LocalCommandarahan untuk mengeksekusi perintah lokal setiap kali Anda terhubung ke mesin jarak jauh melalui SSH. Tapi bagaimana cara menjalankan perintah ketika saya keluar dari koneksi SSH? Tampaknya file * .bashrc / .bash_profile * tidak bersumber saat koneksi berakhir atau ditutup.

Roberto Aloi
sumber
Pertanyaan ini berkaitan erat dengan unix.stackexchange.com/questions/40830/…
Bananguin

Jawaban:

11

Itu tidak ditentukan dalam pertanyaan jika Anda ingin ini dijalankan pada mesin lokal atau jarak jauh. Ini juga tidak menentukan shell mana yang ada pada kedua mesin, jadi saya berasumsi bashuntuk keduanya.

Jika Anda ingin menjalankannya pada mesin jarak jauh, lihat ~/.bash_logout, yang dijalankan ketika shell login keluar dengan anggun. Dari man bash:

Ketika shell login keluar, bash membaca dan mengeksekusi perintah dari file ~/.bash_logout, jika ada.

Anda dapat melakukan tes ~/.bash_logoutuntuk memeriksa apakah shell yang keluar adalah sesi SSH, sesuatu seperti yang berikut ini akan berfungsi:

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

Jika Anda ingin menjalankannya di mesin lokal, buat pembungkus fungsi ssh. Sesuatu seperti yang berikut ini seharusnya berfungsi:

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

Itu mungkin terlalu sederhana untuk kebutuhan Anda, tetapi Anda mendapatkan idenya.

Chris Down
sumber
Saya membutuhkan perintah untuk dieksekusi pada mesin lokal. Terima kasih untuk sarannya. Ini bekerja dengan lancar.
Roberto Aloi
1

Anda berada di jalur yang benar. Jika sshsesi adalah shell login (bukan perintah jarak jauh), bashakan sumber /etc/bash.logoutdan ~/.bash_logoutketika Anda keluar dari shell.

Jika Anda ingin menjalankan perintah jarak jauh, maka Anda bisa memaksanya bashmenjadi shell login. The LocalCommandbisa seperti ini:

bash -l -c /execute/some/command

Dari 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.
George M.
sumber
1
Tidak jika menjalankan perintah jarak jauh (Jika perintah ditentukan, perintah ini dijalankan pada host jarak jauh alih-alih shell login.). Namun, setelah membaca pertanyaan OP lebih dekat, sepertinya dia menginginkan sesuatu terjadi secara lokal, jadi saya pikir Anda menjawab lebih tepat.
George M