Saturday, August 18, 2018

Mac/Linux에서 ssh 접속 시 no matching key 문제


  • 증상

애플 macOS High Sierra 버전으로 업그레이드 후, 아래와 같은 에러가 나며 네트워크 스위치나 방화벽을 접속할 수 없다.

Unable to negotiate with 192.168.1.1 port 22: no matching host key type found. Their offer: ssh-dss

Unable to negotiate with 192.168.1.2 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1



  • 해결책 1

시스템 전체에 적용되는 해결책이다.

Vi와 같은 텍스트 에디터를 이용해 /etc/ssh 디렉토리에 있는 ssh_config 파일을 연다.

sudo vi /etc/ssh/ssh_config

아래와 같이 라인을 찾아 맨 앞에 있는 # (Hash/Pound)을 제거한다.

# MACs hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160
# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc


그리고 맨 아래에 아래와 같은 라인을 추가한다.

HostkeyAlgorithms ssh-dss,ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1


전체적으로 아래와 같이 될 것이다.

# Port 22
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
MACs hmac-md5,hmac-sha1,umac-64@openssh.com

# EscapeChar ~
# Tunnel no
# TunnelDevice any:any
# PermitLocalCommand no
# VisualHostKey no
# ProxyCommand ssh -q -W %h:%p gateway.example.com
# RekeyLimit 1G 1h

Host *
SendEnv LANG LC_*
HostkeyAlgorithms ssh-dss,ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1


저장하고 나가면 바로 적용이 된다. 리부팅이 필요없다.


  • 해결책 2

특정 사용자나 호스트, 서브넷 별로 설정할 수 있는 해결책이다.

Vi와 같은 텍스트 에디터를 이용해 .ssh 디렉토리에 있는 config 파일을 연다.

Vi ~/.ssh/config
~/.ssh/config 혹은 $HOME/.ssh/config

ServerAliveInterval 300
ServerAliveCountMax 3
Host 192.168.1.100
RemoteForward 52698 127.0.0.1:52698


# 192.168.1.0 네트워크의 모든 호스트에 아래 알고리즘 허용
Host 192.168.1.*
HostKeyAlgorithms=+ssh-dss


# 아래 2개의 호스트만 암호화 허용
Host 192.168.2.1, 192.168.2.2
Ciphers aes256-ctr,aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc


# 아래 1개의 서브넷과 1개 호스트만 암호화, 알고리즘 허용
Host 192.168.3.0.*, 192.168.4.100
HostKeyAlgorithms=+ssh-dss
Ciphers 3des-cbc
KexAlgorithms +diffie-hellman-group1-sha1


* 참고: SSH Config File - Commonly used configuration options

No comments:

Post a Comment