sshpassを使用すると、有効なコマンドを使用するときに不明な理由で戻りコード(終了ステータス)が異なります。

sshpassを使用すると、有効なコマンドを使用するときに不明な理由で戻りコード(終了ステータス)が異なります。

これにはいくつかのことが起こっていますが、最終的にCLishまたはSSHから返された終了コードが私のワークフローを混乱させていると思います。

sshpassを使用してリモートシステム(CLishシェル)に接続しようとしています。実行中のスクリプトは「exit 0」(ローカルコンピュータから直接呼び出すと機能します)で終了しますが、ローカルシェルに返される終了コードは「255」です。はい、混乱しているかもしれませんが、例を挙げると役に立ちます。私は問題を簡単な例に絞ったと思います。

CLishを実行しているサーバーに接続し、単一のコマンドを使用してローカルコンピュータからbashシェルにドラッグアンドドロップします。

me@local$ sshpass -p 'password' ssh -t [email protected] 'shell'
user@server:~$ exit 0
exit
Connection to 172.16.5.4 closed.

マイコンピュータに戻って終了コードを確認してください。

me@local$ echo $?
255

CLishを使用してリモートシステムにシェルを手動で入力しますsshpass

me@local$ sshpass -p 'password' ssh [email protected]
CLishPrompt> shell
me@server$ exit
exit
CLishPrompt> exit
Connection to 172.16.5.4 closed.

マイコンピュータの終了コードを確認してください。

me@local$ echo $?
0

サーバー上のファイルシステムでスクリプトを作成して実行するためにリダイレクトを使用しているため、最初の例と同じsshpass呼び出しで「shell」コマンドを実行する必要があります(すべて1回の呼び出しで)。 2番目の例のように、終了コード「0」を返したいと思います。この問題に対する解決策が見つかりませんでした。終了コード "0" が必要な理由は、スクリプトが Jenkins-CI "ビルド" から結果を返し、Jenkins-CI に終了コード 255 を許可するように指示する方法がわからないためです。これがbashの場合は、終了コードを直接確認してスクリプトの次の部分に進むことができます。

この場合、sshが "0"を返すようにするか、Jenkinsに "255"が大丈夫であることを知らせる必要があります。ここで何が起こっているのか知っているか、提案がありますか?

関連情報