スクリプトを作成しようとしています。サーバー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。