【问题标题】:open telnet using shell and passing commands使用 shell 打开 telnet 并传递命令
【发布时间】:2016-11-07 09:59:06
【问题描述】:

我是 linux 和 shell 脚本的新手。我想连接到 localhost 并与之交互。

 #! /bin/bash
 (exec /opt/scripts/run_server.sh)

当我执行这个 bash 脚本时,它开始监听一个端口。

Listening on port xxxxx

现在我想发出这个命令“telnet localhost xxxxx” 我尝试过这样的事情:

#! /bin/bash
(exec /opt/opencog/scripts/run_server.sh)&&
telnet localhost xxxxx

它仍在监听端口。但我认为第二个命令没有运行。我希望另一个窗口显示它正在像这样连接。

vishnu@xps15:~$ telnet localhost xxxx
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
server> 

我将这些作为脚本执行的原因是,在服务器中我需要通过发出诸如“scm”“parse”等某些命令来自动执行某些过程......

vishnu@xps15:~$ telnet localhost xxxx
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
server>scm
Entering scheme shell; use ^D or a single . on a line by itself to exit.
guile> (parse "i eat apple")

我有很多文字要来。手动我不能为每个句子发出这个解析命令。所以我想自动化。所以我需要编写一个脚本来连接服务器并进行交互。

任何准则。最后如何与这个 guile shell 交互/发送命令?

【问题讨论】:

  • “但那行不通”是什么意思。实际上是什么意思?发生什么了? 要准确...
  • 有什么理由必须在子shell中运行第一个脚本吗?
  • 通常不需要在 shell 脚本中使用(exec)。您这样做是因为特殊情况,还是因为您习惯了 python 或其他语言的 cmd?但是,即使你删除了这个例子,也不会做太多事情。让事情从 cmd 行开始工作。也许您需要使用/path/to/server -opts x y z file & 在后台运行您的服务器?然后查看它是否在端口上响应 telnet 连接。祝你好运。
  • @shellter。是的,我可以手动连接到服务器。有用!!但在那之后我需要反复发出某些命令。我想自动化。如何与这个 guile shell 交互?
  • telnet 不会打开另一个窗口,它是一个控制台应用程序。看看“期待”。

标签: linux bash shell guile


【解决方案1】:

以相同或不同用户身份登录 linux 服务器并运行某些命令或 .sh 脚本(对于提交后挂钩或 cron 作业非常有用)的一种方法是使用名为 sshpass 的程序,例如 cron 作业命令或 svn post-commit 钩子看起来像这样:

/usr/bin/sshpass -p 'password' /usr/bin/ssh 
-o StrictHostKeyChecking=no  -q user@localhost 'any command'

只需将密码替换为您的密码,将用户替换为您的用户,然后输入您需要以该特定用户身份运行的命令...

要在 ubuntu 上安装 sshpass,只需键入

apt-get install sshpass

或者在 CentO 上

yum install sshpass

【讨论】:

    【解决方案2】:

    我用 netcat (nc) 命令解决了这个问题。

      $ echo "command1\ncommand2\n" | nc localhost xxxxx
    

    我可以使用 telnet localhost xxxx 手动连接到 localhost,然后我可以像这样将命令从 shell 传递到 localhost。

    【讨论】:

    • 这取决于服务器可能不起作用,因为 TELNET 协议不是基于 TCP 的简单纯文本(客户端和服务器在连接设置期间交换一些信息)。我不知道有任何 nc 标志可以自动支持此功能。因此telnetnc 工作得更好,但由于它不能像nc 那样很好地处理其标准输入,expect 是运行telnet 并正确处理输入/输出的好工具。