원격 서버의 ECDSA 키를 확인할 때 SSH 클라이언트가 "known_hosts" 파일 대신 "/dev/null"을 확인하는 것으로 나타납니다.

원격 서버의 ECDSA 키를 확인할 때 SSH 클라이언트가 "known_hosts" 파일 대신 "/dev/null"을 확인하는 것으로 나타납니다.

known_hostsSSH를 사용할 때 왜 내 파일이 올바르게 검사되지 않는지 궁금합니다 . 간단히 말해서, 내 생각엔 내 SSH 클라이언트가 파일이 /dev/null아닌 다른 것을 확인하고 있는 것 같습니다. known_hosts제가 어떻게 추측했는지 자세한 내용은 아래에 기록되어 있습니다.

mars내 예에서는 이름이 지정된 노드에서 이름이 지정된 클라이언트 노드로 로그인합니다 saturn. saturn공개 키와 개인 키를 설정한 후 들어갈 수 있지만 다음 경고가 표시됩니다.

root@mars# ssh saturn
Warning: Permanently added 'saturn,10.30.3.3' (ECDSA) to the list of known hosts.

로그아웃하고 동일한 노드에 로그인하면 saturn동일한 경고 메시지가 나타납니다. 로그아웃했다가 다시 로그인해도 계속 이런 메시지가 뜹니다. 나는 경고를 억제하고 싶지 않습니다. 왜 이런 경고가 계속 나타나는지 궁금합니다. 다음을 수행하여 노드 known_hosts의 파일에 ECDSA 키가 mars있는지 확인했지만 오류가 발생했습니다.saturn

# ssh-keygen -F saturn
do_known_hosts: hostkeys_foreach failed: No such file or directory

known_hostsSSH 클라이언트를 사용할 때 파일이 제대로 검사되지 않는지 궁금해서 verbose 플래그로 로그인하여 무엇이 잘못되었는지 확인했습니다. 다음은 잘린 출력입니다.

root@mars# ssh -vvv saturn
.
.(truncated)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:nkvxyuLtlDdO8pAycafcfqSPE7OUWgN6Z++Aia/Cygg
debug3: hostkeys_foreach: reading file "/dev/null"
debug3: hostkeys_foreach: reading file "/dev/null"
Warning: Permanently added 'saturn,10.33.3.3' (ECDSA) to the list of known hosts.
.
.(truncated)

따라서 내 SSH 클라이언트 mars/dev/null./root/.ssh/known_hosts

나는 "좋은" 동작이 무엇인지 확인하고 싶었기 때문에 해당 메시지를 제공하지 않을 것이라는 것을 이미 알고 있는 다른 서버 쌍(여기 earth및 로 명명됨)에서 SSH를 사용했습니다 . 자세한 내용을 켰는데 로그 메시지의 일부만 표시됩니다. 로그인에서 제공 까지 :neptuneWarning: Permanently addedearthneptune

root@earth# ssh -vvv neptune
.
. (truncated)
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:qo7vcBwG53p/9MlaTIQJbMZ8Wgf6QxiCJLR1jUiblQ8
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /root/.ssh/known_hosts:9
debug3: load_hostkeys: loaded 1 keys from saturn
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /root/.ssh/known_hosts:3
debug3: load_hostkeys: loaded 1 keys from 10.33.9.10
debug1: Host 'neptune' is known and matches the ECDSA host key.
debug1: Found key in /root/.ssh/known_hosts:9
.
.(truncated)

위에서 보면 earth올바른 수표를 볼 수 있습니다 /root/.ssh/known_hosts. known_hosts이 "좋은" 시나리오에서 키를 찾았다는 또 다른 확인은 다음과 같습니다.

root@earth# ssh-keygen -F neptune
# Host neptune found: line 7 

Warning어쨌든 이 메시지가 계속 나타나는 이유와 SSH 클라이언트가 실제로 확인 중인데 /dev/null그렇지 않은지 아는 사람이 있습니까 known_hosts?내 추측이 맞다면 이 메시지가 다시 나타나지 않도록 클라이언트를 수정하려면 어떻게 해야 합니까?

모든 노드에서 Ubuntu 18.04와 다음 SSH 클라이언트 버전을 사용하고 있습니다.

root@mars:~# ssh -V
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n  7 Dec 2017

도움을 주셔서 미리 감사드립니다.

답변1

내가 생각할 수 있는 유일한 설명은SSH 클라이언트 구성이 컴퓨터 또는 이 계정은 파일의 알려진 공개 키를 기억하지 않도록 수정되었습니다 known_hosts. 설정을 확인 GlobalKnownHostsFile하고 UserKnownHostsFile무력화합니다./etc/ssh/ssh_config/etc/ssh/ssh_config.d/*~/.ssh/config

이는 컴퓨터의 다른 관리자(또는 장래에 컴퓨터나 백업을 손상시키는 사람)가 연결을 모니터링하지 않는 한 귀하가 연결된 위치를 볼 수 없도록 개인 정보 보호를 강화하기 위해 수행될 수 있습니다. 파일 의 경우 known_hosts이는 개인 정보 보호와 보안 사이의 좋은 절충안이 아닙니다. 매번 피어의 공개 키를 수동으로 확인해야 하는 것은 오류가 발생하기 쉽고 불편합니다. 이 HashKnownHosts옵션을 켜면 상당한 개인 정보 보호와 상당한 기능이 제공됩니다. 이 옵션을 켜면 파일의 항목을 직접 나열할 수 없으며 known_hosts, 항목이 무엇인지 추측하고 추측을 확인하는 것뿐입니다. (그리고 각각의 확인은 비용이 많이 들기 때문에 많은 수의 잠재적인 서버 이름을 무차별 대입할 수는 없습니다.)

관련 정보