लॉगिन पर चलने के लिए कमांड को कैसे कॉन्फ़िगर करें, लेकिन केवल टेलनेट के माध्यम से


2

मैं हर बार जब मैं अपने उबंटू बॉक्स में लॉग इन करता हूं, तो एक कमांड चलाना चाहता हूं, लेकिन केवल अगर मैं टेलनेट के माध्यम से कनेक्ट कर रहा हूं, न कि अगर मैं कंसोल में लॉग इन कर रहा हूं।

जवाबों:


2

आपके .bashrc (संभालने के बाद) में कुछ इस तरह से काम करना चाहिए:

if ( tty | egrep -q '\/pts\/' )
then
   echo "is a pts - remote login"
else
   echo "is not a pts - local login"
fi

आप बस प्रतिध्वनि की जगह ले लेंगे जो कुछ भी यह था कि आप चलाना चाहते थे।


एक एक्स टर्मिनल या 'स्क्रीन' विंडो के लिए एक पिटी भी आवंटित की जाएगी, इसलिए यह बहुत विश्वसनीय नहीं है।
grawity

जब मैं कंसोल पर लॉगिन करता हूं, तो मैं कुछ टर्मिनल खिड़कियां खोल देता हूं ...
मोज़ावल्ड

हाँ, यह काफी अच्छा नहीं है। जो सभी X टर्मिनल विंडो को प्रिंट करता है 'एक pts - रिमोट लॉगिन' है।
मोस्वाल्ड

0

टेलनेट? मैं इसके उपयोग की सलाह नहीं देता! रिमोट एक्सेस के अधिकांश तरीकों के लिए निम्नलिखित दृष्टिकोणों में से एक को काम करना चाहिए। (एक्स क्लाइंट के माध्यम से, या वीएनसी या इसी तरह के एक्सक्लूसिव अपवादों के माध्यम से रिमोट एक्सेस।)

  • कुछ telnetdपर्यावरण चर REMOTEHOSTया समान सेट करें जिसे आप जांच सकते हैं
  • यदि आप चला रहे हैं तो आप विशेषता के माध्यम से पर्यावरण को xinetdबदल सकते हैंtelnetdenv
  • यदि आप वास्तव में ssh(ओपनएसएसएच) का मतलब है , तो आप चर में से किसी एक की जांच कर सकते हैं SSH_TTYऔर SSH_CONNECTION

लिनक्स कंसोल वर्चुअल टर्मिनल (आपके द्वारा X शुरू करने से पहले /dev/tty1) में /dev/pts/(कम से कम x86 पर ) pty (pseudo-ttys) के बजाय tty नाम होंगे । एक्स के भीतर, टर्मिनलों को पेंटी आवंटित किया जाएगा।

अगर यह एक चिंता का विषय है, तो पर्यावरण चर की जाँच अक्सर उपयोगकर्ताओं द्वारा की जा सकती है।

एक अधिक मजबूत सामान्य केस सॉल्यूशन $$ से प्रोसेस ट्री को चलना है, जब तक आप यह नहीं पाते कि आप क्या देख रहे हैं (या नहीं), इसका उपयोग bashस्क्रिप्ट में करें:

function checkparents() 
{
    local _proc=$1 _pid _ppid=$$ _tty="" _comm _rc=1

    while [ "$_ppid" != "1" ]; do
        read _pid _ppid _tty _comm < <(ps --no-headers -p $_ppid -o "pid ppid tty comm")
        #echo "$_pid $_ppid $_tty $_comm"
        [ "$_comm" = "$_proc" ] && { _rc=0; break; }
        [ "$_pid"  = "$_proc" ] && { _rc=0; break; }
    done
    return $_rc
}

जब sshउदाहरण के लिए एक लॉगिन के माध्यम से चलाया जाता है :

$ if checkparents sshd; then echo ssh; fi
ssh
$ if ! checkparents in.telnetd; then echo not telnet; fi
not telnet

echoइसे काम करने के लिए लाइन को अन-कमेंट करें ।


0

मैं व्यक्तिगत रूप से अन्य कारणों से "मैं कौन हूं" के आउटपुट को प्रदर्शित करता हूं (DISPLAY की स्थापना)। अंतिम फ़ील्ड लॉगिन का "स्रोत" प्रतीत होता है

    typeset -a LOGINARRAY
    # who am I format: USER TTY MON DAY TIME LOGINHOST, 
    # use array to get last entry
    LOGINARRAY=( $(/usr/bin/who -sum) )
    LASTINDEX=$(( ${#LOGINARRAY[*]} - 1))
    LOGINHOST=${LOGINARRAY[$LASTINDEX]}
    LOGINHOST=${LOGINHOST##*\(}
    LOGINHOST=${LOGINHOST%%)*}
    DISPLAY=$LOGINHOST:0
    export DISPLAY

    unset LOGINARRAY LASTINDEX

यह देखने के लिए पर्याप्त आसान होना चाहिए कि लोगिनहोस्ट के प्रारूप की जांच करें कि यह "दूरस्थ" लॉगिन है या नहीं। टेलनेट यहां अक्षम है (जैसा कि यह होना चाहिए) इसलिए मैं यह देखने के लिए स्पष्ट रूप से जांच नहीं कर सकता कि यह टेलनेट के लिए कैसे सेट है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.