SSHセッションからローカルシステムへのstdoutキャプチャ

SSHセッションからローカルシステムへのstdoutキャプチャ

「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

おすすめ記事