web-dev-qa-db-ja.com

sshを介してリモートサーバーでコマンドを実行する

次のように、ローカルサーバーでsshコマンドを使用して、リモートLinuxサーバーでコマンドを実行しようとしています。

ssh myremoteserver 'タイプttisql'

ttisqlは、リモートマシンのパス上の実行可能ファイルです。

これを実行した結果は次のとおりです。

bash:行0:タイプ:ttisql:見つかりません

最初に接続して次の操作を行うと:

ssh myremoteserver

そして、次のコマンドを入力します。

[myuser @ myremoteserver〜] $:ttisqlと入力

私は予想通りttisql exeのパスを取得します。

奇妙なことに、ベータ環境で最初のコマンドを実行すると、期待どおりに動作し、exeのパスが返されます。ベータシナリオでは、マシンAはリモートマシンBに接続していますが、両方のマシンはオンサイトであり、sshコマンドはリモートマシンにすばやく接続します。

この問題は、マシンAがローカルでマシンBがオフサイトであり、sshコマンドが接続するのに1〜2秒かかると、実稼働環境で発生します。

私が見ることができる唯一の違いは、プロダクションsshが接続するのにかかる時間です。最初の接続後にコマンドを入力するとコマンドが機能するため、リモートシステムのパスは正しいです。

このシンプルなコマンドが、ある環境では機能し、他の環境では機能しない理由を誰でも理解してくれますか?問題は、sshを介して接続するのにかかる時間に関連しているでしょうか?

35
jlteksolutions

PATHは、シェルがインタラクティブな場合(=サーバーにログインしている場合)と、インタラクティブでない場合(sshを使用してコマンドを実行する場合)で設定が異なります。

シェルで使用されるrcファイルを調べます。たとえば、.bashrc.bash_profile.profile(システムによって異なります)。 PATHを適切な場所に設定すると、ttisqlで実行したときにsshが機能します。

別の解決策は、ttisqlの絶対パスを使用することです。そうすれば、PATH設定に依存しません。

22
janos

環境は、非対話型セッション(ssh command)インタラクティブセッションから(ssh、次にcommand)。 echo $PATH 両方の場合において。

ssh myremoteserver 'echo $PATH'

ssh myremoteserver
[myuser@myremoteserver~]$: echo $PATH

異なる場合は、すべての起動スクリプトで、$PS1 または $-

25
damienfrancois