Isso não será mais do que 2 segundos:
[]# echo quit | timeout --signal=9 2 telnet [SERVER] [PORT]
Estou tentando executar o comando telnet e obter o script de shell. Mas quando a porta não abre ou o ip não existe. O comando leva muito tempo para dar a resposta. Será possível limitar o tempo máximo de tentativa no telnet?
telnet host port
Isso não será mais do que 2 segundos:
[]# echo quit | timeout --signal=9 2 telnet [SERVER] [PORT]
Se estiver executando scripts, você pode executar o telnet em segundo plano e, se ainda estiver em execução após um atraso, poderá eliminá-lo. Exemplo:
{ printf "HEAD /\n\n"; sleep 1; } | telnet hostname port & sleep 2 && kill %1 2>/dev/null && echo "timeout"
Isso aguarda 2 segundos antes de matar o telnet em segundo plano.
Você precisa rodar o telnet? Acho que o tempo limite (1) irá ajudá-lo.
Alternativa # 1: Use timeout, que faz parte do GNU coreutils. Isso não confirmará se você conseguiu estabelecer uma conexão ou não.
TIMEOUT=10 timeout $TIMEOUT telnet <host> <port>
Alternativa # 2: Use Bash / Perl / Python para resolver o mesmo problema, com mais ou menos granularidade.
Alguns exemplos:
Bash: TIMEOUT=10; telnet <host> <port> 2>&1 >/dev/null & WPID=$!; sleep $TIMEOUT && kill $! & KPID=$!; wait $WPID
Perl : perl -e "alarm 10; exec @ARGV" "telnet my.server.com 23"
Python: python -c 'import telnetlib;HOST="my.server.com"; PORT=23; TIMEOUT=10; PATTERN="Login: "; t = telnetlib.Telnet (HOST, PORT); t_read = t.read_until(PATTERN, TIMEOUT); print(repr(t_read))'
Espero que isso seja de alguma ajuda!
Tags ksh telnet linux shell-script