他のマシンにログオンして何かを行うbashスクリプトを作成するにはどうすればよいですか?

マシンAから起動され、別のマシンにログインするbashスクリプトを作成することは可能ですか?

  1. マシンBby ssh(マシンAとBの両方がLinuxマシンになります)
  2. いくつかのファイルをマシンBにコピーします
  3. これらのマシンで指定されたpythonスクリプトを実行します。
  4. 結果をマシンAに転送します
  5. マシンBからログオフします。

これは技術的に実行可能ですか?

回答

もちろん実行可能です:

scp file user@host: ssh user@host path_to_script scp user@host:file_to_copy ./ 

それだけです…

ただし、問題が1つあります。パスワードの入力を3回求められます。これを回避するには、sshキーを生成し、これらのキーでユーザーを承認します。

sshを生成するにはキーはssh-keygen -t rsaを実行し、質問に答え、公開キーをリモートホスト(マシンB)の~/.ssh/authorized_keysファイルにコピーします。秘密キーは<に保存する必要があります。ローカルマシン上のdivid = "334398fac8">

(A)。

コメント

  • 公開鍵にオプションがない場合は、cat file | ssh user@host 'cat > /destination/of/file; /path/to/script &>/dev/null; cat results' > /destination/of/results
  • のようにパスワードプロンプトを最小限に抑えるために大雑把なことを行うことができます。パスワードを使用したい場合は、ControlMaster=yesControlPath=/path/to/socketfile<を定義することで、OpenSSH 'の接続プールをいつでも使用できます。 / div>をクリックし、-fで1つのssh接続を開始してバックグラウンドsshを実行します。後続のすべてのSSH接続に同じソケットファイルを使用するように指示します。

回答

すべてを実行できます単一のssh接続/セッション:

ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst 

これ:

  1. コピーlocal_srcからremote_dst
  2. commandを実行します
  3. remote_srclocal_dstにコピーします。

ただし、commandstdoutに書き込み、結果はlocal_dstにもなります。 commandstdinからの入力を読み取ると、EOFを受信します。

回答

これは単一のsshセッション内で実行できますが、ファイルのコピーと実行中のコマンドを組み合わせるのは少し注意が必要です。

このタスクに取り組む最も簡単な方法は、3つの操作に対して別々のSSHセッションを実行することです。

rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/ 

これには、machineBへの認証を3回行う必要があります。複数回の認証を回避するための推奨される方法は、OpenSSHの最新バージョンで接続共有機能を使用することです。Bへのマスター接続を一度だけ開始し、SSHがそのマスター接続に自動的にピギーバックするようにします。 ControlMaster autoControlPathの行を~/.ssh/config に追加します。次に、バックグラウンドでマスター接続を開始し、タスクを実行します。

ssh -fN machineB # start a master connection in the background # Subsequent connections will be slaves to the existing master connection rsync -a inputs/ machineB:inputs/ ssh machineB "some command -i inputs -o outputs" rsync -a machineB:outputs/ outputs/ 

scpoを使用するのではなくr rsyncを使用してファイルをコピーすると、リモートファイルシステムを SSHFS の下にマウントする方が簡単な場合があります。ちなみに、これでマスター接続の設定が処理されます(「上記のように~/.ssh/configを設定したと仮定します)。

mkdir /net/machineB sshfs machineB: /net/machineB cp -Rp inputs /net/machineB/ ssh machibeB "some command -i inputs -o outputs" cp -Rp /net/machineB/outputs . 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です