「show running-config」などのコマンドを実行して出力をローカルコンピュータのファイルに保存するには、SSH経由でデバイスに接続するスクリプトを作成する必要があります。コマンドラインで同様の操作を実行し、ファイルをローカルシステムに保存しました。例えば、
ssh [email protected] ls > ls_from_remotes_sys
ls_from_remotes_sysファイルは私のローカルシステムにあります。しかし、このスクリプトを書く必要がありますが、これを行う方法を知る唯一の方法はExpectを使用することです。だから私はこれを整理しました:
#!/usr/bin/expect -f
spawn ssh [email protected] ls > ls_from_remotes_sys
expect "[email protected]'s password:"
send "password\r"
interact
Expectスクリプトは機能しますが、ファイルはリモートシステムに保存されますが、これは私が望むものではありません。
質問1 - ファイルがコマンドラインからローカルシステムに保存されている理由とExpectを使用してリモートシステムに保存されるのはなぜですか?
Q2 - 私のローカルシステムにファイルを送信する方法はありますか? (ssh 戻りはオプションではありません)
私はスクリプトがファイルにリダイレクトするのではなく、コマンドの結果を画面に出力させることができると思いました。だから、
質問3 - これにより、リモートシステムの画面にあるstdoutをどのようにキャプチャしてローカルシステムのファイルに送信できますか?
答え1
使用したコマンドは次のとおりexpect
です。
spawn ssh [email protected] ls > ls_from_remotes_sys
これは効果的に呼び出されます。
exec("ssh","[email protected]","ls",">","ls_from_remotes_sys")
これは、3つのパラメータ(ls
および>
ファイル名)がリモートシステムに送信されることを意味します。つまり、リダイレクトがリモートシステムで発生します。
ㅏ一緒に集めるおそらくそれを呼び出すことによってsh -c "ssh test@...."
。
expect
別のオプションは、スクリプトの外部でリダイレクトを完了することです。
たとえば、「get_ls」とすると
#!/usr/bin/expect -f
spawn ssh [email protected] ls
expect "[email protected]'s password:"
send "password\r"
interact
その後、これを行うことができますget_ls > ls_from_remotes_sys
。