Jawaban:
Sesuatu seperti ini di .bashrc Anda (dengan asumsi bash) akan bekerja dengan cukup baik:
if ( tty | egrep -q '\/pts\/' )
then
echo "is a pts - remote login"
else
echo "is not a pts - local login"
fi
Anda hanya akan mengganti gema dengan apa pun yang ingin Anda jalankan.
telnet? Saya tidak merekomendasikan penggunaannya! Salah satu pendekatan berikut harus bekerja untuk sebagian besar metode akses jarak jauh. (Akses jarak jauh melalui klien X, atau melalui VNC atau sejenisnya menjadi pengecualian yang dapat dimaafkan.)
telnetdmengatur variabel lingkungan REMOTEHOSTatau serupa yang dapat Anda periksaxinetdAnda dapat mengubah telnetdlingkungan melalui envatributssh(OpenSSH), maka Anda dapat memeriksa salah satu variabel SSH_TTYdan SSH_CONNECTION.Terminal virtual konsol Linux (sebelum Anda mulai X) akan memiliki nama tty seperti /dev/tty1daripada pty (pseudo-ttys) di /dev/pts/(setidaknya pada x86). Dalam X, terminal akan dialokasikan ptys.
Memeriksa variabel lingkungan sering dapat digerogoti oleh pengguna, jika itu menjadi perhatian.
Solusi kasus umum yang lebih kuat adalah dengan berjalan di pohon proses dari $$, sampai Anda menemukan apa yang Anda cari (atau tidak), gunakan ini dalam bashskrip:
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
}
Saat dijalankan melalui sshlogin misalnya:
$ if checkparents sshd; then echo ssh; fi
ssh
$ if ! checkparents in.telnetd; then echo not telnet; fi
not telnet
Batalkan komentar pada echobaris untuk melihatnya berfungsi.
Saya pribadi menahan output dari "who am i" untuk alasan lain (pengaturan DISPLAY). Bidang terakhir tampaknya adalah "sumber" dari login
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
seharusnya cukup mudah untuk memeriksa format LOGINHOST untuk melihat apakah itu login "jarak jauh". telnet dinonaktifkan di sini (sebagaimana mestinya) jadi saya tidak dapat secara eksplisit memeriksa untuk melihat bagaimana pengaturannya untuk telnet