호스트 ID 변경으로 인해 ssh가 원격 명령을 실행할 수 없는지 여부를 감지하는 방법은 무엇입니까?

호스트 ID 변경으로 인해 ssh가 원격 명령을 실행할 수 없는지 여부를 감지하는 방법은 무엇입니까?

저는 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

관련 정보