次のように、ローカルサーバーで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を介して接続するのにかかる時間に関連しているでしょうか?
PATH
は、シェルがインタラクティブな場合(=サーバーにログインしている場合)と、インタラクティブでない場合(ssh
を使用してコマンドを実行する場合)で設定が異なります。
シェルで使用されるrcファイルを調べます。たとえば、.bashrc
、.bash_profile
、.profile
(システムによって異なります)。 PATH
を適切な場所に設定すると、ttisql
で実行したときにssh
が機能します。
別の解決策は、ttisql
の絶対パスを使用することです。そうすれば、PATH
設定に依存しません。
環境は、非対話型セッション(ssh command
)インタラクティブセッションから(ssh
、次にcommand
)。 echo $PATH
両方の場合において。
ssh myremoteserver 'echo $PATH'
対
ssh myremoteserver
[myuser@myremoteserver~]$: echo $PATH
異なる場合は、すべての起動スクリプトで、$PS1
または $-