NÃO fecha o telnet ao fornecer nome de usuário e senha usando echo

4

Quando estou fornecendo nome de usuário e senha para fazer o telnet para login, ele é automaticamente fechado após o seguinte comando:

echo password | telnet mymachine -l mysuername

As saídas do console:

Connected to mymachine.
Connection closed by foreign host.

Em seguida, a conexão é fechada. Existe uma maneira de manter a conexão enquanto ainda fornece nome de usuário e senha para o login de uma só vez?

Atualização: Eu escrevi um alias de acordo com a resposta aceita que faz o login sem digitar o nome de usuário e senha toda vez:

alias logon='rm loginscript; echo \#\!\/usr\/bin\/expect >> loginscript ; echo spawn telnet remotemachine -l username >> loginscript ; echo expect Password: >> loginscript ; echo send password"\r" >> loginscript ; echo expect -- \{\$ \} >> loginscript ; echo interact >> loginscript; chmod 777 loginscript; ./loginscript'
    
por phonycollectibles 08.10.2016 / 10:15

2 respostas

6

Se você quiser continuar com uma sessão interativa, a maneira usual é usar expect para fazer o login:

#!/usr/bin/expect
spawn telnet mymachine -l myusername
expect Password:
send password\r
expect -- {$ }
interact
    
por 08.10.2016 / 10:25
4

Supondo que você ainda deseja interagir com a sessão telnet depois de enviar a senha, é necessário alimentá-la com a entrada do terminal local:

(echo password; cat) | telnet -l user host

Dependendo de como sua implementação telnet tenta interagir com o terminal local, você pode achar necessário:

saved=$(stty -g); stty raw -echo
(echo password; cat) | telnet -l user host
stty "$saved"

Ou até mesmo:

saved=$(stty -g); stty raw -echo
(echo password; cat) | telnet -l user host 2>&1 | cat
stty "$saved"

(em alguns sistemas, você pode precisar de cat -u no lugar de cat )

Outra opção é usar expect que usa um pseudo-terminal em vez de pipes para interagir com o aplicativo (observe que telnetd também gera um erro no outro extremo, então um extra não é estritamente necessário neste caso).

    
por 08.10.2016 / 10:32