当我向 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)。