1 つのセッションから SSH をコピーし、コマンドを実行します。

1 つのセッションから SSH をコピーし、コマンドを実行します。

重複の可能性:
設定された SSH チャネルの使用

これは私の同期スクリプトです。

ssh [email protected] /etc/init.d/some_service stop
scp [email protected]:/var/some_service/events ./events
scp ./new_data [email protected]:/var/some_service/new_data
ssh [email protected] /etc/init.d/some_service start

ご覧のとおり、サービスを停止してscpを使用していくつかのコピーを実行してから、サービスを再起動してください。

問題は、4つの「類似した」SSH接続を連続的に「消費」することです。

1つの物理SSH接続を使用してすべての操作を実行する方法はありますか?

答え1

SSH 接続共有の使用を検討できます。

Host *.some-domain
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p

ターゲットに一度だけ接続し、SSHプロセスをバックグラウンドに置くだけです。その後、別のコマンドを実行し、最後に最初のプロセスを終了します。

あるいは、SSH接続で複数のタスクをカプセル化してみることもできます。

たとえば、次のようなディレクトリがあるとします。

 mycommands
 |
 +- run
 +- new_data

その後、このデータをtarにパッケージ化してスクリプトに送信できます。

tar cf - -C mycommands . | ssh localhost 'D=`mktemp -d`; tar xf - -C $D; $D/run'

これでrun、スクリプトはすべての入力データにアクセスできるようになります(ここにはnew_data例のデータのみがあります)。あなたの例に固執するために、 runスクリプトは次のとおりです。

#!/bin/sh
BASE=`dirname $0`

/etc/init.d/some_service stop
cat /var/some_service/events

mv $BASE/new_data /var/some_service/new_data
/etc/init.d/some_service start

rm -rf $BASE

これでファイルを保存できますevents

tar cf - -C mycommands . | ssh localhost 'D=`mktemp -d`; tar xf - -C $D; $D/run' >./events

より一般的には、runスクリプトがtarを生成し、sshtarをパイプしてローカルで解凍することができます。

答え2

このロジックをターゲットサーバーで実行されているスクリプトに移動し、単一のSSHコマンドを使用して実行できます。おそらくこれは理想的ではありません。そうでなければそうしたでしょう:)

SSHマスター接続を使用すると、新しいSSH接続を開くコストを削減できます。これは、最初のSSHコマンドが通常どおりに新しい接続を開くことを意味します。同じサーバーへの後続の接続では、この既存の接続を再利用して3つの追加接続を作成するオーバーヘッドを節約します。

設定の良いガイドは次のとおりです。http://www.linuxjournal.com/content/speed-multiple-ssh-connections-same-server

答え3

これは、ローカルサーバーがリモートサーバーを信頼し、パスワードなしでコマンドを実行すると仮定します。それ以外の場合は、ヘッドレス接続を実行して入力を提供できないため、機能しません。

ssh remoteserver "/etc/init.d/some_service stop; scp /var/some_service/events localhost:${PWD}/events; scp localserver:${PWD}/new_data /var/some_service/new_data; /etc/init.d/some_service start"

上記のすべてのコードは、端末内の1つの連続した行になければなりません。あるいは、スクリプト内で実行している場合、これらはすべて改行で区切られず、1つのコマンドでなければなりません。

リモートサーバーからローカルサーバーへの信頼できるキーペアがある場合、これが機能しない理由はありません。

関連情報