बहुत सारे जवाबों के साथ एक पुराना धागा, लेकिन कोई भी ऐसा नहीं है जिसकी मुझे तलाश थी, इसलिए मैं अपना योगदान दे रहा हूं:
sshpid=$$
sshloop=0
while [ "$sshloop" = "0" ]; do
if [ "$(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT)" ];
then
read sshClientIP sshClientSport sshClientDport <<< $(strings /proc/${sshpid}/environ | grep ^SSH_CLIENT | cut -d= -f2)
sshloop=1
else
sshpid=$(cat /proc/${sshpid}/status | grep PPid | awk '{print $2}')
[ "$sshpid" = "0" ] && sshClientIP="localhost" && sshloop=1
fi
done
यह विधि प्रत्यक्ष ssh, sudoed उपयोगकर्ताओं और स्क्रीन सत्र के साथ संगत है। जब तक यह SSH_CLIENT चर के साथ एक पीआईडी नहीं मिल जाता है, तब तक यह प्रक्रिया के पेड़ के माध्यम से आगे बढ़ेगा, फिर इसके आईपी को $ sshClientIP के रूप में रिकॉर्ड करें। यदि यह पेड़ से बहुत दूर हो जाता है, तो यह आईपी को 'लोकलहोस्ट' के रूप में दर्ज करेगा और लूप को छोड़ देगा।