如何使telnet发送文本并保持连接?

时间:2019-07-06 17:33:46

标签: bash telnet

对于我的工作,我每天需要连接到许多不同的服务器:远程登录主机,输入用户名,输入密码-开始工作。 现在,我想通过自动输入用户名来简化生活-我设法做到了,但是telnet之后退出了,这显然不是我想要的。

我在具有BASH的系统上工作,因此无法在其中安装任何程序,因此请不要给出诸如“使用期望,可以轻松解决您的问题...”之类的答案

我的尝试使我想到了这一点:

function tn() { (echo "user"
                sleep 1) | telnet $1 23
        }

使用 tn 123.45.67.89 调用该函数将在123.45.67.89处连接到服务器,要求输入用户名,该用户名会自动输入-太好了! 但是随后要求输入密码,并且关闭了连接,而不是让我输入密码并开始我的工作。

我真的希望有人知道解决方案! 预先感谢!

2 个答案:

答案 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专为交互式使用而设计。使用netcatncatncsocat或该系列的任何其他工具。

示例:

( 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"

顺便说一句,我什么都没测试(只是写下来)