known_hosts
SSH를 사용할 때 왜 내 파일이 올바르게 검사되지 않는지 궁금합니다 . 간단히 말해서, 내 생각엔 내 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_hosts
SSH 클라이언트를 사용할 때 파일이 제대로 검사되지 않는지 궁금해서 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를 사용했습니다 . 자세한 내용을 켰는데 로그 메시지의 일부만 표시됩니다. 로그인에서 제공 까지 :neptune
Warning: Permanently added
earth
neptune
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
, 항목이 무엇인지 추측하고 추측을 확인하는 것뿐입니다. (그리고 각각의 확인은 비용이 많이 들기 때문에 많은 수의 잠재적인 서버 이름을 무차별 대입할 수는 없습니다.)