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);

クライアントSSHシェルで開いている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スクリプトは、myusernameパスワードでログインし、シェルプロンプトにmypasswordコマンドを送信することに関連するSSH会話を介して一般的なTelnetを実装します。ls -l$<space>

#!/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

おすすめ記事