对于我的工作,我每天需要连接到许多不同的服务器:远程登录主机,输入用户名,输入密码-开始工作。 现在,我想通过自动输入用户名来简化生活-我设法做到了,但是telnet之后退出了,这显然不是我想要的。
我在具有BASH的系统上工作,因此无法在其中安装任何程序,因此请不要给出诸如“使用期望,可以轻松解决您的问题...”之类的答案 >
我的尝试使我想到了这一点:
function tn() { (echo "user"
sleep 1) | telnet $1 23
}
使用 tn 123.45.67.89 调用该函数将在123.45.67.89处连接到服务器,要求输入用户名,该用户名会自动输入-太好了! 但是随后要求输入密码,并且关闭了连接,而不是让我输入密码并开始我的工作。
我真的希望有人知道解决方案! 预先感谢!
答案 0 :(得分:0)
您可能想看一下expect
命令来编写与telnet交互的脚本:
#!/usr/bin/env bash
function tn() {
expect -f <<EOF
spawn telnet $1
expect "login"
send "${2}\r"
interact
EOF
}
答案 1 :(得分:0)
telnet
专为交互式使用而设计。使用netcat
,ncat
,nc
,socat
或该系列的任何其他工具。
示例:
( echo "user"; sleep 1) | ncat $1 23
但是,如果要模拟交互行为,请使用socat
并将stdin + stdout重定向到脚本:
示例:
socat TCP:$1:23 EXEC:my-shell.sh
在这种情况下,将建立地址$ 1端口23的TCP连接,并将stdin + stdout重定向到脚本的stdout + stdin。有关详细信息和更多选项,请参见man socat
。
my-shell.sh例如:
#!/bin/sh
read line
do_domething "$line"
printf "reply\n"
read line
do_domething "$line"
printf "reply\n"
顺便说一句,我什么都没测试(只是写下来)