Você deve conseguir canalizar o comando exit
para STDIN em telnet
.
Experimente:
echo exit | telnet {site} {port}
e veja se isso funciona. (parece funcionar no meu servidor web, mas YMMV).
Eu tenho várias caixas de linux com um conjunto muito limitado de comandos e espaço em disco. Mas tem o comando telnet
.
Eu me conecto remotamente a cada um desses probes (programaticamente) e emito um comando linux de linha através do SSH.
Eu preciso executar um único comando para conectar a uma máquina específica, usando telnet, e, em seguida, desconectar imediatamente .
Eu posso fazer tudo isso, mas a parte de desconexão imediatamente . O Telnet abre algum tipo de console ou terminal e não consigo descobrir um comando de uma linha para executar o comando telnet e depois desconectar imediatamente.
Se eu fizer isso, posso facilmente analisar a saída textual de mensagens de erro por não conseguir se conectar à máquina na porta especificada e é exatamente isso que estou procurando.
Então, como posso executar um comando de uma linha para conectar a uma máquina usando telnet e desconectar depois?
O método mais simples e fácil é dado abaixo.
sleep <n> | telnet <server> <port>
n - O tempo de espera em segundos antes da saída automática. Pode ser fracionário como 0,5. Observe que alguma saída necessária pode não ser retornada no tempo de espera especificado. Então, podemos precisar aumentar de acordo.
server - O IP ou nome do host do servidor de destino.
port - número da porta de serviço de destino.
Você também pode redirecionar a saída para um arquivo como este,
sleep 1 | telnet <server> <port> > output.log
Acho melhor ferramenta para enviar comandos diretamente e apenas obter saída seria netcat. É apenas uma ferramenta simples, mas poderosa, para colocar comandos através de portas. Você pode ver o exemplo de uso nessa pergunta de superusuário: link - o asker dá um exemplo de trabalho no qual a conexão é fechada após alguns segundos.
E se você quiser apenas testar a conectividade, use isto: link
No meu caso, isso funciona. (CentOS7):
while read host port; do
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
echo "$host $port is open"
else
echo "$host $port is closed"
exit 1 # To force fail result in ShellScript
fi
done
:) Atenciosamente
Esta é outra versão do resposta acima que o faz agir um pouco mais como a sintaxe de telnet" normal ". Se você gosta da minha resposta, por favor, dê um upvote não para isso, mas para o original.
#!/bin/bash
if [ "$2" == "" ]; then
echo "Syntax: $0 <host> <port>"
exit;
fi
host=$1
port=$2
r=$(bash -c 'exec 3<> /dev/tcp/'$host'/'$port';echo $?' 2>/dev/null)
if [ "$r" = "0" ]; then
echo "$host $port is open"
else
echo "$host $port is closed"
exit 1 # To force fail result in ShellScript
fi
Aqui está a solução que encontrei na Internet:
( echo open 127.0.0.1 23
sleep 5
echo your_login
sleep 5
echo your_password
sleep 5
echo hostname
sleep 5
echo exit ) | telnet
Funciona para mim no SunOS & HP-UX