SSH中にターゲットサーバーでユーザーの環境変数を使用する

SSH中にターゲットサーバーでユーザーの環境変数を使用する

スクリプトを作成しようとしています。サーバー1以下を使用して実行されます。ユーザー1いくつかのコマンドを実行サーバー2そしてユーザー2

だからサーバー1次のコマンドを使用して実行しようとするとユーザー1、環境変数が見えないユーザー2(で定義/home/user2/.profile)

ユーザー1>ssh user2@server2 "env"

だから私は実行できませんユーザー2server1 で ssh 固有のコマンドを使用します。

注:server1 / user1とserver2 / user2の間に正しいSSHが設定されている場合は、次のようにしてserver1のserver2で実行されているプロセスを表示できます。

ユーザー1>ssh user2@server2 "ps -ef|grep user2"

ベストアンサー1

長すぎます。

user1> ssh user2@server2 '$env'

長い答え

sshコマンドを実行する最初の例では、これはありません$。入力した場合はリテラル文字列として保持され、環境変数には展開されませんssh user2@server2 "env""env"

欲しいならユーザー2実行コマンドの使用ユーザー2環境変数を使用するには、実行時にこれらの変数に拡張される文字列を渡す必要があります。たとえば、

user1> ssh user2@server2 'echo $PATH'

エコーされますユーザー2PATHターミナルに行きます。

ただし、SSH経由でコマンドを実行する~/.profileいいえ事前実行(ディスカッションリファレンスここ)。したがって、で定義されている環境変数にアクセスするには、~/.profile次のコマンドを実行します。

user1> ssh user2@server2 'source ~/.profile; $env'

警告する":一重引用符()の代わりに二重引用符()を使用すると、'シェルは次のように実行されます。ユーザー1二重引用符内のすべての環境変数を次に展開します。ユーザー1環境変数今後コマンドはSSHを介して次に送信されます。ユーザー2

おすすめ記事