बाहर निकलने पर एसएसएच लोकलकोमांड


9

में ~/.ssh/configआप उपयोग कर सकते हैं LocalCommandएक स्थानीय कमांड निष्पादित करने के लिए जब भी आप SSH के माध्यम से एक दूरस्थ मशीन से कनेक्ट निर्देश। लेकिन जब मैं SSH कनेक्शन से बाहर निकलता हूं तो मैं एक कमांड को कैसे निष्पादित करता हूं ? ऐसा लगता है कि कनेक्शन समाप्त होने या बंद होने पर * .bashrc / .bash_profile * फाइलें खट्टी नहीं होतीं।


यह प्रश्न लगभग unix.stackexchange.com/questions/40830/…
बनंगुइन

जवाबों:


11

यदि आप स्थानीय या दूरस्थ मशीन पर इसे निष्पादित करना चाहते हैं तो यह प्रश्न में निर्दिष्ट नहीं है। यह भी निर्दिष्ट नहीं है कि कौन सा शेल मशीन पर मौजूद है, इसलिए मैं bashदोनों के लिए मान रहा हूं ।

यदि आप इसे रिमोट मशीन पर निष्पादित करना चाहते हैं, तो देखें ~/.bash_logout, जिसे तब निष्पादित किया जाता है जब एक लॉगिन शेल इनायत से लॉग आउट होता है। से man bash:

जब कोई लॉगिन शेल बाहर निकलता है, तो bash पढ़ता है और फ़ाइल से कमांड निष्पादित करता है ~/.bash_logout, अगर यह मौजूद है।

आप यह जांचने के लिए एक परीक्षण कर सकते हैं कि क्या ~/.bash_logoutशेल लॉग आउट किया जा रहा है, एसएसएच सत्र है, निम्नलिखित में से कुछ काम करना चाहिए:

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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.