通过 ssh 将文本文件传输到 telnet

通过 ssh 将文本文件传输到 telnet

我想将带有命令的文本文件通过管道传输到我在 ssh 客户端上打开的 telnet 会话,这可能吗?一个例子:我有一个文本文件cmds,其中包含如下命令

FirstFunction(A,B,C,0x9001,123456,7);
SecondFunction(A,B,C1,2,4);
ThirdFunction(A,B,C,D,E,F);

我可以复制 7 将每个命令粘贴到我在客户端 ssh shell 中打开的 telnet 会话中。我可以自动执行此操作以将每一行直接流式传输到 telnet 会话中吗?

编辑1
在我的 ssh 主机上,我打开 telnet 会话(命令必须转到的位置),如下所示telnet MyHost

编辑2
我试过:

$ ssh root@cc1 telnet MyHost < cmds                                                                                       
Welcome to MyHost                                                                                                              
Trying 10.254.0.2...                                                                                                                            
Connected to MyHost.                                                                                                                            
Escape character is '^]'.                                                                                                                       
Connection closed by foreign host.
ron@jpax-build07:~/tmp$ 

它似乎根本没有将 cmds 文件通过管道传输到 telnet 会话中。
我也尝试过的是:

$ ssh root@cc1 cmds - | telnet MyHost
Welcome to MyHost
cat: cmds: No such file or directory
telnet: could not resolve MyHost/telnet: Name or service not known

编辑3
我安装expect并尝试了以下操作:

#!/usr/bin/expect
spawn ssh root@ccTest telnet -l MyHost
#expect Password:
#send "mypassword\r"
expect {-> }
send "some_cmd(20)\r"
expect {$ }
send "exit\r"
expect eof

但这就是我得到的:

$ ./jpax_txcmd.sh 
spawn ssh root@ccTest telnet -l MyHost
bad flag "-> ": must be -glob, -regexp, -exact, -notransfer, -nocase, -i, -indices, -iread, -timestamp, -timeout, -nobrace, or --
    while executing
"expect {-> }"
    (file "./jpax_txcmd.sh" line 5)
$

答案1

telnet 的问题是,一旦它读取到文件结尾,它将关闭连接,并且您将看不到任何输出。一个简单的技巧是让输入保持打开状态一段额外的时间,例如:

(cat cmds; sleep 15) | ssh root@cc1 telnet MyHost 

显然,这不是一个可靠的解决方案,因此您应该使用能够检测遥控器何时完成的东西,例如expect。以下示例 Expect 脚本实现了典型的 telnet over ssh 对话,其中涉及使用myusername密码登录mypassword并将命令发送ls -l$<space>shell 提示符:

#!/usr/bin/expect
spawn ssh root@cc1 telnet -l myusername myhost
expect Password:
send "mypassword\r"
expect {$ }
send "ls -l\r"
expect {$ }
send "exit\r"
expect eof

相关内容