SSHに接続した後に接続後にコマンドを実行するスクリプト

SSHに接続した後に接続後にコマンドを実行するスクリプト

リモートサーバーに接続して接続したら、そのサーバーから別のサーバーに接続してディレクトリを変更するスクリプトを作成する必要があります。もちろん、これはうまくいきません(最初のサーバーに接続してからスクリプトが停止し、接続が切断された後に再起動されます)。

#!/bin/bash
echo begin:
ssh  serv_1
ssh  serv_2
cd dir1

exit 0

私は何をすべきですか?私の質問に似た投稿を読みましたが、答えを理解できませんでした。

答え1

短い答えは、

ssh srv_1 'ssh srv_2 "command"'

ここで command は実行したいコマンドです。

一重引用符なしで動作しますが、理解を助けるために使用することをお勧めします。

ssh srv_1 ssh srv_2 "command"

引用符を使用すると、いくつかの作業構造が提供されますが、見てわかるように、基本的に必要ではありません。

これも効果があり、

ssh srv_1 ssh srv_2 command

あなたが提供した情報は、これがうまくいくかどうか、またはコマンドが何をするのかを知ることはできませんが、上記の構文は私が取るアプローチです。

変数またはコマンド置換を使用する必要がある場合は、より複雑になり、高速化され、引用とエスケープに注意する必要があります。

これが実際の例です。

ネプチューンは私のホストです。トリニティは別のサーバーです。マトリックスはエンドサーバーです。

tony@neptune:~$ ssh trinity 'ssh matrix "hostname"'
matrix

したがって、このコマンドはサーバー行列で実行されたため、ホスト名行列を返します。

注:この方法でディレクトリを変更することはまったく効果がなく、ディレクトリの変更はそのディレクトリを実行しているシェルにのみ関連します。

私の言葉はこれです。

tony@Neptune:~$ ssh trinity 'ssh matrix "cd /tmp"'
tony@Neptune:~$ ssh trinity 'ssh matrix "pwd"'
/home/tony

2番目のコマンドは、前のcdコマンドが永続的な効果を持たないことを示しています。

関連情報