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
編集3expect
以下をインストールしようとしました。
#!/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