Python Paramiko exec_command で Unix コマンドが「コマンドが見つかりません」で失敗する
Python の Paramiko exec_command を使用して Unix コマンドを実行すると、次のような問題が発生する可能性があります。 「 が見つかりません。」などのエラー。この問題は、ls などの他のコマンドが正常に実行される一方で、sesu コマンドを使用する場合に特に発生します。
根本的な原因
原因は、SSHClient.exec_command のデフォルトの動作にあります。これは「ログイン」シェルを実行せず、セッションに疑似端末を割り当てません。その結果、異なる起動スクリプトが実行され、特定の環境変数が設定されない可能性があります。
考えられる解決策
これを解決するには、いくつかのアプローチが可能です。
-
完全なコマンド パスを使用する: コマンドが環境に依存しないように、sesu 実行可能ファイルへの完全なパスを使用します。
-
起動スクリプトを調整します: 起動スクリプトを変更して、対話型セッションと非対話型セッションの両方に一貫して PATH を設定します。
-
ログイン シェルを明示的に呼び出す: 次のような互換性のあるシェルで --login を使用してスクリプトを実行します。
bash --login -c "sesu test"
ログイン後にコピー
-
コマンド環境の変更: 特定の環境設定を含めるようにコマンド自体を変更します:
PATH="$PATH;/path/to/sesu" && sesu test
ログイン後にコピー
- 擬似端末の強制使用: (非推奨) get_pty を True に設定して擬似端末割り当てを有効にします:
stdin,stdout,stderr = ssh.exec_command('sesu test', get_pty=True)
ログイン後にコピー
その他の考慮事項
- LD_LIBRARY_PATH を検証し、共有オブジェクトが正確に特定されていることを確認します。
-
詳細については、次のリソースを参照してください:
- [Paramiko を使用する場合の環境変数の違い](https ://stackoverflow.com/questions/13781377/environment-variable-differences-when-using-paramiko)
- [JSch で特定の Unix コマンドが「... Not Found」で失敗する](https:// stackoverflow.com/questions/44950115/certain-unix-commands-fail-with-not-found-when-executed-through-java-using-jsch)
以上がPython Paramiko exec_command で「コマンドが見つかりません」エラーを修正する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。