SSH LocalCommand khi thoát


9

Trong ~/.ssh/configbạn có thể sử dụng lệnh LocalCommandđể thực thi lệnh cục bộ bất cứ khi nào bạn kết nối với máy từ xa thông qua SSH. Nhưng làm cách nào để thực thi lệnh khi thoát kết nối SSH? Có vẻ như các tệp * .bashrc / .bash_profile * không có nguồn gốc khi kết nối kết thúc hoặc bị đóng.


Câu hỏi này liên quan chặt chẽ đến unix.stackexchange.com/questions/40830/ Kẻ
Bananguin

Câu trả lời:


11

Nó không được chỉ định trong câu hỏi nếu bạn muốn điều này được thực thi trên máy cục bộ hoặc từ xa. Nó cũng không được chỉ định vỏ nào có mặt trên cả hai máy, vì vậy tôi giả sử bashcho cả hai.

Nếu bạn muốn thực thi nó trên máy từ xa, hãy nhìn vào ~/.bash_logout, nó được thực thi khi một vỏ đăng nhập đăng xuất một cách duyên dáng. Từ man bash:

Khi shell đăng nhập thoát, bash đọc và thực thi các lệnh từ tệp ~/.bash_logout, nếu nó tồn tại.

Bạn có thể thực hiện kiểm tra ~/.bash_logoutđể kiểm tra xem shell được đăng xuất có phải là phiên SSH hay không, một cái gì đó như sau sẽ hoạt động:

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

Nếu bạn muốn thực thi nó trên máy cục bộ, hãy tạo một trình bao bọc hàm xung quanh ssh. Một cái gì đó như sau nên hoạt động:

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

Điều đó có thể quá đơn giản cho nhu cầu của bạn, nhưng bạn có ý tưởng.


Tôi cần lệnh để được thực thi trên máy cục bộ. Cám ơn vì sự gợi ý. Nó hoạt động trơn tru.
Roberto Aloi

1

Bạn đang đi đúng hướng. Nếu sshphiên là shell đăng nhập (thay vì lệnh từ xa), bashsẽ nguồn /etc/bash.logout~/.bash_logoutkhi bạn thoát khỏi shell.

Nếu bạn muốn thực thi một lệnh từ xa, thì bạn có thể buộc bashphải là một vỏ đăng nhập. Có LocalCommandthể tương tự như thế này:

bash -l -c /execute/some/command

Từ 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
Không phải nếu thực thi một lệnh từ xa (Nếu lệnh được chỉ định, nó được thực thi trên máy chủ từ xa thay vì vỏ đăng nhập.). Tuy nhiên, đọc câu hỏi OP gần hơn, có vẻ như anh ấy muốn điều gì đó xảy ra tại địa phương, vì vậy tôi nghĩ rằng câu trả lời của bạn là phù hợp hơn.
George M
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.