저는 보안 도메인을 처음 접했고 다음과 같은 오류가 발생하는지 이해하고 싶었습니다.
com.jcraft.jsch.JSchException: 알 수 없는HostKey: 127.0.0.1. RSA 키 지문은 com.jcraft.jsch.Session.checkHost(Session.java: 797) com.jcraft.jsch.Session.connect(Session.java:342) com.jcraft.jsch.Session.connect(Session.java:183) FileTransfer.main(FileTransfer.java:37)에서 프로세스가 종료되었습니다. 종료 코드 0.
'unknownHostKey: 127.0.0.1'의 의미는 무엇입니까? RSA 키
지문은 a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc`입니다.
known_hosts
이 오류를 해결하려면 file 이라는 파일을 설정해야 합니다 .
나는 다음과 같이 설정하려고 했습니다.
127.0.0.1
그러나 이것은 작동하지 않습니다. 파일 의 의미를 오해하고 있습니까 known_hosts
?
답변1
이 답변에 대한 크레딧은 다음과 같습니다.질~로부터StackExchange 보안 사이트, 그/그녀로서우편설명 known_hosts
및 authorized_keys
파일은 SSH/SFTP의 이 구성 요소를 이해하는 좋은 출발점입니다.
아래를 참조하세요:
이 known_hosts
파일을 통해 클라이언트는 서버를 인증하고 서버가 가장자에 연결되어 있지 않은지 확인할 수 있습니다. 이 authorized_keys
파일을 통해 서버는 사용자를 인증할 수 있습니다.
서버 인증
SSH 연결이 설정될 때 가장 먼저 일어나는 일 중 하나는 서버가 공개 키를 클라이언트에 보내고 이를 증명하는 것입니다(덕분에공개키 암호화) 클라이언트에게 관련 개인 키를 알고 있음을 알려줍니다. 이는 서버를 인증합니다. 프로토콜의 이 부분이 성공하면 클라이언트는 서버가 자신이 주장하는 사람임을 알게 됩니다.
클라이언트는 서버가 알려진 서버인지, 올바른 서버인 것처럼 위장하려는 일부 불량 서버가 아닌지 확인할 수 있습니다. SSH는 서버의 적법성을 확인하는 간단한 메커니즘만 제공합니다. SSH는 이미 연결한 서버를 ~/.ssh/known_hosts
클라이언트 시스템의 파일에 기억합니다(시스템 전체 파일도 있음 /etc/ssh/known_hosts
). 서버에 처음 연결할 때 서버가 제공한 공개 키가 실제로 연결하려는 서버의 공개 키인지 다른 방법으로 확인해야 합니다. 연결하려는 서버의 공개 키가 있는 경우 ~/.ssh/known_hosts
클라이언트에 수동으로 추가할 수 있습니다.
그런데 known_hosts
DSA(RSA 및 ECDSA)뿐만 아니라 SSH 구현에서 지원하는 모든 유형의 공개 키를 포함할 수 있습니다.
기밀 데이터를 서버에 보내기 전에 서버 인증을 완료해야 합니다. 특히, 사용자 인증에 비밀번호가 포함된 경우 비밀번호를 인증되지 않은 서버로 전송해서는 안 됩니다.
사용자 인증
서버는 해당 사용자가 해당 계정에 액세스할 수 있는 권한이 있음을 증명할 수 있는 경우에만 원격 사용자의 로그인을 허용합니다. 서버 구성과 사용자의 선택에 따라 사용자는 여러 형태의 자격 증명 중 하나를 제시할 수 있습니다(아래 목록은 전체 목록이 아님).
- 사용자는 로그인하려는 계정의 비밀번호를 제시할 수 있습니다. 그런 다음 서버는 비밀번호가 올바른지 확인합니다.
- 사용자는 공개 키를 제시하고 해당 공개 키와 관련된 개인 키를 소유하고 있음을 증명할 수 있습니다. 이는 서버를 인증하는 데 사용되는 방법과 정확히 동일하지만 이제 사용자는 자신의 신원을 증명하려고 하고 서버는 이를 확인합니다. 사용자가 개인 키를 알고 있고 공개 키가 계정의 인증 목록(
~/.ssh/authorized_keys
서버에 있음)에 있음을 입증하면 로그인 시도가 허용됩니다. - 또 다른 유형의 방법은 사용자 인증 작업의 일부를 클라이언트 시스템에 위임하는 것입니다. 이는 많은 시스템이 동일한 계정을 공유하는 기업과 같은 통제된 환경에서 발생합니다. 서버는 반대 방향으로 사용되는 것과 동일한 메커니즘으로 클라이언트 시스템을 인증한 다음 클라이언트를 사용하여 사용자를 인증합니다.