본문 바로가기

리눅스

ssh 접속 오류 해결 방법(no hostkey alg)

반응형

ssh 접속 오류(no hostkey alg) 해결 방법

"no hostkey alg" 에러는 원격 서버에 SSH 연결을 시도할 때 발생하는 경우가 일반적입니다. 이 오류 메시지는 원격 서버가 SSH 클라이언트에서 제공하는 호스트 키 알고리즘을 지원하지 않음을 나타냅니다. 대부분의 경우 이 문제는 클라이언트 측에서 해결할 수 있습니다.

테스트 환경

  node1 통신 방향 node2 비고
역할 Client -> Server  
운영체제 CentOS 6.3 Ubuntu 22.04 LTS  
sshd(ssh server) 버전 OpenSSH_5.3p1 OpenSSH_8.9p1  

SSH 접속 테스트 및 sshd 설정 편집

node1

  • ssh 버전 정보 확인
$ ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010
ssh user1@node2
$ ssh user1@node2
no hostkey alg

 

node2

  • ssh 버전 정보 확인
$ ssh -V
OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022
  • auth.log 로그 확인
tail -f /var/log/auth.log
$ tail -f /var/log/auth.log
sshd[251858]: Unable to negotiate with node1 port 44302: no matching host key type found. Their offer: ssh-rsa,ssh-dss [preauth]

"no matching host key type found" 오류는 SSH 클라이언트가 호스트 키 유형을 찾을 수 없을 때 발생합니다.

서버 측 호스트 키 알고리즘 업데이트

  • SSH 서버에서 호스트 키 알고리즘을 업데이트하여 클라이언트의 요청을 수용할 수 있습니다.

1. sshd_config 편집

vim /etc/ssh/sshd_config
# SSH 호스트 키 알고리즘 설정
HostKeyAlgorithms +ssh-rsa

# 공개키 인증 설정
PubkeyAuthentication yes
PubkeyAcceptedKeyTypes ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

ssh-rsa 호스트 키 알고리즘을 허용하고 ssh-rsa 알고리즘을 사용하는 공개키로 인증할 수 있습니다.

 

2. sshd 재기동

systemctl restart sshd

 

node1

  • ssh 접속 테스트
ssh user1@node2
$ ssh user1@node2
user1@node2's password:

 

ssh 클라이언트에서 -c 옵션을 사용하여 지원되는 암호화 알고리즘을 선택할 수 있습니다.

대신에 chacha20-poly1305@openssh.com 암호화 알고리즘을 사용하도록 지정해보세요.

ssh -c chacha20-poly1305@openssh.com -o Protocol=2 user1@node2

위의 예시에서는 -c 옵션을 사용하여 chacha20-poly1305@openssh.com 암호화 알고리즘을 선택하고, -o Protocol=2 옵션으로 프로토콜 버전을 2로 지정합니다.

728x90

SSH 클라이언트에서 사용 가능한 암호화 알고리즘 및 키 교환 알고리즘의 목록을 확인하는 방법은 다음과 같습니다.

 

1. SSH 클라이언트에서 -Q 옵션을 사용하여 암호화 알고리즘 목록을 확인합니다. 다음 명령을 실행합니다.

ssh -Q cipher
$ ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
chacha20-poly1305@openssh.com

위 명령은 사용 가능한 암호화 알고리즘 목록을 출력합니다.

 

2. SSH 클라이언트에서 -Q 옵션을 사용하여 키 교환 알고리즘 목록을 확인합니다. 다음 명령을 실행합니다.

ssh -Q kex
$ ssh -Q kex
diffie-hellman-group1-sha1
diffie-hellman-group14-sha1
diffie-hellman-group14-sha256
diffie-hellman-group16-sha512
diffie-hellman-group18-sha512
diffie-hellman-group-exchange-sha1
diffie-hellman-group-exchange-sha256
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
curve25519-sha256
curve25519-sha256@libssh.org
sntrup761x25519-sha512@openssh.com

위 명령은 사용 가능한 키 교환 알고리즘 목록을 출력합니다.

 

3. SSH 클라이언트에서 -Q 옵션을 사용하여 호스트 키 알고리즘 목록을 확인합니다. 다음 명령을 실행합니다.

ssh -Q key

위 명령은 사용 가능한 호스트 키 알고리즘 목록을 출력합니다.

 

위 명령을 실행하면 해당 알고리즘의 목록이 표시됩니다. 이 목록은 SSH 클라이언트가 현재 사용 가능한 알고리즘을 나열한 것입니다.

호스트 키 알고리즘 재설정

  • 클라이언트에서 -oHostKeyAlgorithms=+ssh-rsa 옵션을 사용하여 명령을 실행합니다.

node1에서 node2로 접속이 불가능하며 node2에서 node1로 접속하여 파일을 가져왔습니다.

 

  • ssh 접속 테스트
ssh -oHostKeyAlgorithms=ssh-rsa user1@node1
  • scp 명령으로 test.txt 파일 가져오기
scp -oHostKeyAlgorithms=ssh-rsa user1@node1:/tmp/test.txt .
  • rsync 명령으로 test.txt 파일 가져오기
rsync -avz -e "ssh -oHostKeyAlgorithms=ssh-rsa" user1@node1:/tmp/test.txt .

 

728x90
반응형