【问题标题】:Automating Telnet without spawn/expect/send commands在没有 spawn/expect/send 命令的情况下自动化 Telnet
【发布时间】:2012-04-01 21:18:11
【问题描述】:

我之前确实问过这个问题,但由于问题含糊不清,该帖子已关闭。所以这里是尝试#2:

我希望有一个简单的脚本,通过 telnet 连接到远程机器,然后执行命令 ZAHO,然后将输出存储在我本地机器上的文件 cat.txt 中。这是我尝试过的代码:

(echo "PPATIL"; sleep 1 ; echo "IDEA@2010" ; sleep 1;) |telnet 10.110.3.132 23<< EOF

ZAHO; > cat.txt

EOF

当我运行脚本时会发生以下事情:

正在尝试 10.110.3.132... 连接到 10.110.3.132。 转义字符是'^]'

在此之后,我回到我的 shell 提示符,没有任何事情发生。

现在,即使我提供了错误的密码,我仍然会收到同样的错误。

P.S.:spawn/expect/send 不存在,登录的唯一选项是通过 telnet。

我也试过了

(echo "PPATIL"; sleep 1 ; echo "IDEA@2010" ; sleep 1;echo "ZAHO;";) |telnet 10.110.3.132 23

然而,在这种情况下,远程机器连接,它向我显示用户名提示,输入用户名,然后显示密码提示,然后输入密码,休眠一秒钟,然后附加“ZAHO;”到密码,然后断开连接。

如果我删除echo ZAHO;,那么在输入用户名和密码后它也会断开连接。

【问题讨论】:

  • 好吧,我设法登录了。我所做的更改是在我的密码后面加上一个 \r 。但唯一剩下的就是编写命令“ZAHO;”。这仍然没有发生
  • 您可能还想尝试在 ZAHO 命令之后添加 \r。
  • 是的@Marc :D .. 非常感谢... 我想通了.. 而且我不得不延迟 10 秒 .. 显然很长的命令

标签: unix login automation sleep telnet


【解决方案1】:

一般:

cmd | cmd2 << EOF
EOF

定义不明确。 (我不确定 shell 语法是否将其澄清为未定义或实现已定义或什么,但它肯定不会做你想要的。) cmd2 只能有一个输入源,但你正试图给它从管道和heredoc输入。你需要选择一个。或许你可以试试:

{ cmd1; cat << EOF; } | cmd2
input 
EOF

但这很模糊,您最好编写一个脚本来生成所需的输入。

【讨论】:

    【解决方案2】:

    如果您不限于 shell 脚本。 Python 有一个 telnet interface 在其标准库中。实际上,图书馆文档页面上给出的示例非常接近您想要的。

    Python 可能不像 shell 那样无处不在,但它被广泛部署和使用。

    【讨论】:

    • 是的 .. 遗憾的是我只有 unix :( .. 无论如何感谢您抽出宝贵时间回答 :D
    猜你喜欢
    • 2013-07-10
    • 2017-08-26
    • 2012-08-22
    • 2013-01-03
    • 2017-06-03
    • 1970-01-01
    • 2023-04-01
    • 2012-09-12
    • 1970-01-01
    相关资源
    最近更新 更多