जवाबों:
आपके .bashrc (संभालने के बाद) में कुछ इस तरह से काम करना चाहिए:
if ( tty | egrep -q '\/pts\/' )
then
echo "is a pts - remote login"
else
echo "is not a pts - local login"
fi
आप बस प्रतिध्वनि की जगह ले लेंगे जो कुछ भी यह था कि आप चलाना चाहते थे।
टेलनेट? मैं इसके उपयोग की सलाह नहीं देता! रिमोट एक्सेस के अधिकांश तरीकों के लिए निम्नलिखित दृष्टिकोणों में से एक को काम करना चाहिए। (एक्स क्लाइंट के माध्यम से, या वीएनसी या इसी तरह के एक्सक्लूसिव अपवादों के माध्यम से रिमोट एक्सेस।)
telnetd
पर्यावरण चर REMOTEHOST
या समान सेट करें जिसे आप जांच सकते हैंxinetd
बदल सकते हैंtelnetd
env
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
इसे काम करने के लिए लाइन को अन-कमेंट करें ।
मैं व्यक्तिगत रूप से अन्य कारणों से "मैं कौन हूं" के आउटपुट को प्रदर्शित करता हूं (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
यह देखने के लिए पर्याप्त आसान होना चाहिए कि लोगिनहोस्ट के प्रारूप की जांच करें कि यह "दूरस्थ" लॉगिन है या नहीं। टेलनेट यहां अक्षम है (जैसा कि यह होना चाहिए) इसलिए मैं यह देखने के लिए स्पष्ट रूप से जांच नहीं कर सकता कि यह टेलनेट के लिए कैसे सेट है