私はAWSでAmazon Linuxを使用しています。 SSHを使用して、次のようにリモートコマンドを実行してみてください。
% ssh somehost echo Hello World
@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@
<ECHO IS NOT EXECUTED HERE>
% echo $? # last exit code
0
これが私が予想したものです(警告を修正する必要はありません。失敗は意図的に発生するものです)。ただし、リモートコマンドが実行されているかどうかを知る必要があります。問題は、ssh終了コードが0で、私のリモートコマンドが動的であり、原則として同じテキストを出力できることです(他のリモートコマンドを独自に実行しようとした場合、または一部のログファイルを読み取る場合)。
それでは、この場合、SSH接続が失敗したことを確認する方法は何ですか?
答え1
どのシェルを使用していますか? zshを使ってテストしましたが、bashは同じ出力を実行しますか?
➜ ~ ssh localhost echo Hello world
Hello world
➜ ~ echo $?
0
➜ ~ ssh localhost error
bash: error: command not found
➜ ~ echo $?
127
➜ ~
➜ ~ ssh localhost fake
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
SHA256:vYFp+5TGBtJd9XgvTJdKbK2pQSFwARcnOHtAYWyCfCE.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/user/.ssh/known_hosts:1
remove with:
ssh-keygen -f "/home/user/.ssh/known_hosts" -R localhost
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
bash: fake: command not found
➜ ~ echo $?
127