【问题标题】:How to get telnet to send text and keep connected?如何让 telnet 发送文本并保持连接?
【发布时间】:2019-11-16 20:51:12
【问题描述】:

为了我的工作,我每天需要连接到很多不同的服务器:telnet ti 主机,输入用户名,输入密码 - 开始工作。 现在我想通过自动输入用户名来让生活更轻松 - 我设法做到了,但之后 telnet 退出了,这显然不是我想要的。

我在一个带有 BASH 的系统上工作,我无法在那里安装任何程序,所以请不要给出诸如“使用 expect,它可以轻松解决您的问题...”之类的答案。

我的尝试导致我这样做:

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

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

我真的希望有人知道这个问题的解决方案! 提前致谢!

【问题讨论】:

  • 使用以interact 命令结尾的Expect 脚本。
  • 尊重您不推荐其他工具的要求,您能否帮助我们了解您为什么使用 telnet 而不是 SSH?
  • 有些服务器需要 SSH,有些则被屏蔽。使用什么不是我的决定。

标签: bash telnet


【解决方案1】:

您可能想查看expect 命令来编写与 telnet 交互的脚本:

#!/usr/bin/env bash

function tn() {

  expect -f <<EOF
spawn telnet $1
expect "login"
send "${2}\r"
interact 
EOF
}

【讨论】:

  • 感谢您的评论,但由于我不是管理员,我不能使用 expect 之类的任何东西 - 只能使用 bash 提供的命令。
【解决方案2】:

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"

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

【讨论】:

    猜你喜欢
    • 2011-08-30
    • 2022-05-24
    • 2011-04-19
    • 2015-03-31
    • 2020-09-01
    • 2015-03-21
    • 2012-08-29
    • 2021-04-04
    • 2014-11-13
    相关资源
    最近更新 更多