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