ローカルマシンからシェルスクリプトを実行してリモートマシンでコマンドを実行し、ローカルマシンで続行する


10

問題はこれです:私はリモートマシンからファイルをコピーしたいです。

リモートマシンに接続し、保存されたファイルの場所を取得するシェルスクリプトを作成する方法を探しています。リモートサーバーから切断された場所を取得し、取得した場所を使用してローカルマシン内からscpを使用します。ファイルをコピーします。

具体的には、スクリプトからリモートマシンに接続し、そのマシンでタスクを実行する方法を知りたいです。切断し、ローカルで実行を継続します。

回答:


15

解決策1:

remote_output="$(ssh user@host "remote command")"
scp "user@$host:$remote_output" /local/path

これは、リモートマシンに接続し、いくつかのコマンドを実行し、出力をローカルマシンの変数にコピーすることで機能します。たとえば、ファイルパスをリモートでエコーし、ローカルでキャプチャするとします。

解決策2:

ssh user@host "determine_path; cat filename" >local_filename

これは、リモートから直接ファイルを見つけて出力し、ローカルにファイルにリダイレクトすることで機能します。これはscpをスキップします。これには、「cat」の前のステップに出力がないことが必要です(これは&> / dev / nullで解決できます)。


1
+1は、個別のssh + scpではなく、1つの接続で問題全体を解決する方法を示します。
Peter Cordes 2017

すべての回答は役に立ちますが、これは私の問題を最も具体的に解決します
gnsr

20

次の形式でスクリプトを記述できます。

command1
command2
...
ssh user@machine command3
...
command4
command5

command3パスワードを要求せずに実行されるようにするには、SSHキーをセットアップする必要があります。


2
これは同期によって行われることに注意してください。ssh user@remote command3実行中はcommand4開始できません
aaaaaはモニカ

3
@aaaaaa(あなたがしなかった場合)ssh user@machine command3 &
アイザック

3
@Isaacはい、私のポイントはどちらも望ましい行動である可能性があるということですが、それは意識的な決定である必要があります
はモニカを復活させる

2

コピーしたいファイルをどのように特定するかについてすでにある程度の考えがあり、この特定を行うリモートマシン上で実行するスクリプトまたはコマンドセットを記述できるか、すでに記述していると思います。 。

さらに、これらのコマンドは、コピーに使用されているSSHユーザーのホームディレクトリからの相対パスである、ファイルへのフルパスまたはファイルへの相対パスを標準出力に出力すると仮定します。私の例では、スクリプトの名前は "getfilepath.sh"ですが、シェルスクリプトである必要はありませんが、他の実行可能ファイルや一連のコマンドである可能性もあります。

# Script to be executed on local machine.

# put any leading local commands here.

FILE=$(ssh user@emote getfilepath.sh);
scp user@remotehost:"$FILE" .

# put any trailing local commands here.

上記のコードでは、「$()」表記は、コマンドの標準出力をシェル変数としてキャプチャする方法です。これはかなり標準的ですが、それを理解できないシェルを使用している場合は、代わりにコマンドを「バックティック」で囲むことができます。これは、ほとんどのUSキーボードの1キーの左側にあるアクセント記号です。


0

おそらく、すべての作業を行うリモートマシンでスケジュールされたタスクをトリガーすることが可能です。

これにより、コピーするファイルの場所を検索している間、リモートマシンに接続できなくなります。

私はこれをやっています:

コマンドラインは、私の場合はバッチスクリプトを実行するスケジュールされたタスクをトリガーします。

schtasks /run /s remoteserver /u %user% /p %password% /tn "scheduledtaskname"

宜しくお願いします

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.