utas yang lebih tua dengan banyak jawaban, tetapi tidak ada yang saya cari, jadi saya berkontribusi untuk saya:
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
metode ini kompatibel dengan ssh langsung, pengguna sudoed, dan sesi layar. ia akan menelusuri melalui pohon proses hingga menemukan pid dengan variabel SSH_CLIENT, lalu merekam IP-nya sebagai $ sshClientIP. jika terlalu jauh ke atas pohon, ia akan merekam IP sebagai 'localhost' dan meninggalkan loop.