telnet? Eu não recomendo o seu uso! Uma das seguintes abordagens deve funcionar para a maioria dos métodos de acesso remoto. (Acesso remoto através de um cliente X, ou via VNC ou similar sendo exceções desculpáveis.)
- alguns
telnetd
definem a variável de ambiente REMOTEHOST
ou similar que você pode verificar
- se você estiver executando
xinetd
, poderá alterar o ambiente telnetd
por meio do atributo env
- se você realmente quer dizer
ssh
(OpenSSH), então você pode verificar as variáveis SSH_TTY
e SSH_CONNECTION
.
Os terminais virtuais do console Linux (antes de você iniciar o X) terão tty nomes como /dev/tty1
em vez de pty (pseudo-ttys) em /dev/pts/
(pelo menos em x86). Dentro de X, os terminais serão alocados ptys.
A verificação de variáveis de ambiente muitas vezes pode ser subvertida pelos usuários, se isso for uma preocupação.
Uma solução de caso geral mais robusta é percorrer a árvore de processos de $$ até encontrar o que você está procurando (ou não), use isso em um script 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
}
Quando executar por meio de um ssh
login, por exemplo:
$ if checkparents sshd; then echo ssh; fi
ssh
$ if ! checkparents in.telnetd; then echo not telnet; fi
not telnet
Descomente a linha echo
para vê-la funcionando.