使用 echo 提供用户名和密码时不关闭 telnet

使用 echo 提供用户名和密码时不关闭 telnet

当我向 telnet 提供用户名和密码进行登录时,在执行以下命令后它会自动关闭:

echo password | telnet mymachine -l mysuername

控制台输出:

Connected to mymachine.
Connection closed by foreign host.

然后连接就关闭了。有没有一种方法可以在保持连接的同时仍然一次性提供用户名和密码进行登录?

更新:我根据接受的答案写了一个别名,无需每次都输入用户名和密码即可登录:

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'

答案1

如果您想继续交互式会话,通常的方法是使用expect以下命令进行登录:

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

答案2

假设您在发送密码后仍想与该会话进行交互telnet,则需要从本地终端向其提供输入:

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

根据您的telnet实现尝试与本地终端交互的方式,您可能会发现需要执行以下操作:

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

甚至:

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

(在某些系统上,您可能需要cat -u代替cat

另一种选择是使用expect它使用伪终端而不是管道与应用程序交互(请注意,它telnetd还会在另一端生成一个 pty,因此在这种情况下并不严格需要额外的 pty)。

相关内容