2017-08-14 20 views
0

リモートマシンにsshしてコマンドを実行していますが、リモートマシンの$ PATHは、元のマシンの$ PATHに設定されていますが、sshedマシンの$ PATHには設定されていません。私は、リモートマシンにsshとエコーの$ PATHを実行している場合しかし、それはSSHリモートマシンと実行コマンド

[email protected]> ssh [email protected] echo $PATH 

これはhost1ではなく、この場合のルートで、ユーザーのPATHを印刷し、新しいマシンにログインしているユーザーに正しく設定されていますremotemachine上記

[email protected]> ssh [email protected] 
[email protected]'s password: **** 
echo $PATH 

の管理者は、基本的には、リモートマシン上の新しいユーザーに環境を変えていない

正常に動作します。何とか私はリモートマシンにログインしていても、host1からrootの環境を保護します。

$ set -x 
$ ssh localhost echo $PATH 
+ ssh localhost echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

行を:私は/ -al LSをすれば、それは

答えて

3

は、我々が実際に実行するものデバッグするset -xを使用してみましょう私は、リモートマシンにログインしています意味リモートマシンからディレクトリを示してい+コマンドは、我々がことを教えてくれると実際実行は次のとおりです。

ssh localhost echo /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

当然のことながら、これは関係なく、リモートPATHが何であるかの、また、我々は取り戻す値です。

我々は、単一の我々は、サーバーにecho $PATH代わりのecho /usr/local/bin:...を送信することを確実にするためのコマンドを引用することができます:今

$ ssh localhost 'echo $PATH' 
+ ssh localhost 'echo $PATH' 

set -xsshではなく、拡張コマンドの拡張されていないコマンドで実行されていることを示しており、我々代わりにリモートPATHを取得します。

+0

これは、別の$ PATHを表示しますが、リモートマシンにsshでリモートマシンコンソールでecho $ PATHを実行した場合と同じではありません。 – PMat

+1

リモートホストの設定に問題がある可能性があります。 'ssh -tt you @ yourhost bash -ilc" 'echo \ $ PATH' "'を使って対話型ログインシェルをttyで偽装しようとすることができます。 –

+0

はい、うまくいきました。 – PMat

0

使用-t

ssh [email protected] -t 'echo $PATH' 

manページから:

-t  Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a 
     remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t 
     options force tty allocation, even if ssh has no local tty. 

説明は少し不可解ですが、それはあなたが引用符に入れて何でも実行されます。単一引用符は、実行する前に$PATHが展開されないように重要です。

+0

いいえ動作しません – PMat

+0

@PMat、「動作しません」とはどういう意味ですか?このコマンドを実行するとどうなりますか?アウトプットは参考になります。 – ryanpcmcquen

関連する問題