기억하기

[macOS] Ventura 업데이트후 ssh 연결 불가(no matching host key type found. Their offer: ssh-rsa,ssh-dss)

Ventura 업데이트후 ssh 연결 불가

 

회사에서 업무를 하다보니 언제부터인가 소프트웨어 업데이트 문구가 보여 무시하다. 시간이 날 때 기회가 되어 업데이트를 하고 나니 그 순간 부터 ssh가 연결이 안되는 문제가 발생하였다...

 

ssh 연결을 하려고 하니 다음과 같은 문구를 맞닥트릴수 있었는데 해당 문구는 다음과 같다

debug1: load_hostkeys: fopen /Users/nhn/.ssh/known_hosts: No such file or directory
debug1: load_hostkeys: fopen /Users/nhn/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: diffie-hellman-group-exchange-sha256
debug1: kex: host key algorithm: (no match)
Unable to negotiate with 10.161.128.186 port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss

마지막 문구를 접근하지 못하는 이유를 알 수가 있다. 검색을 해보니 macOS에서 소프트웨어 업그레이드를 하면 종종 발생하는 문제였던거 같다.

no matching host key type found. Their offer: ssh-rsa,ssh-dss

우선 나의 경우 접속을 먼저 해야핬길래 ssh 접근에 옵션을 추가해주었다.

ssh -o HostKeyAlgorithms=+ssh-dss 계정

우선 이렇게 옵션을 추가하여 로그인은 하였지만 설정을 변경하여 해결을 해주려고 한다.

 

해결책  /etc/ssh/ssh_config

해당 방법은 시스템 전체에 적용되는 해결방법이라고 한다.

config 파일을 열어 수정을 해주어야한다. 

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

다음과 같은 문구를 찾아서 다음과 같이 '#' 문자를 제거해준다.

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

그러면 전체적으로 다음과 같은 파일이 만들어질 것이다.

더보기
#       $OpenBSD: ssh_config,v 1.35 2020/07/17 03:43:42 dtucker Exp $

# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.

# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.

# This Include directive is not part of the default ssh_config shipped with
# OpenSSH. Options set in the included configuration files generally override
# those that follow.  The defaults only apply to options that have not been
# explicitly set.  Options that appear multiple times keep the first value set,
# unless they are a multivalue option such as IdentityFile.
Include /etc/ssh/ssh_config.d/*

# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.

# Host *
#   ForwardAgent no
#   ForwardX11 no
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   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
#   UserKnownHostsFile ~/.ssh/known_hosts.d/%k
Host *
    SendEnv LANG LC_*
    HostkeyAlgorithms ssh-dss,ssh-rsa
    KexAlgorithms +diffie-hellman-group1-sha1

 

그리고 다른 해결책?

일단은 기본적으로는 위와 같은 해결책이 기본이 될거 같아서 정리는 이정도로만 하려고한다.

그리고 아래 다른 해결방법들도 있는거 같아 조금 소개정도만 하려고 한다.

 

세번째... ~/.ssh/known_host 파일의 제거

~/.ssh 디렉토리를 들어가보면 known_host 파일이 존재하는데 해당 파일을 제거해주면 자연스럽게 로그인이 된다고 한다.(해보지는 않았습니다. 위와같이 해결을 하였기에..)

두번째  ~/.ssh/config

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

~/.ssh/config 혹은 $HOME/.ssh/config 파일을 우선 열어준다. 

 

해당 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

이렇게 하면 각 호스트별 특정 알고리즘을 적용해서 설정을 해줄 수있다고 한다.

사실 이 또한 적용해보지는 않았다;;;ㅎㅎ....

 

추후 적용할 기회가 생길수도 있기 때문에 기록용으로 남겨본다.

 

'기억하기' 카테고리의 다른 글

연말정산::세액계산하기  (0) 2022.01.29
연말정산::소득공제 vs 세액공제  (0) 2022.01.27
[macOS]특수문자 사용하기  (0) 2021.11.11
[macOS]JAVA 설치하기  (0) 2021.07.20
[Tistory]수식 추가하기  (0) 2021.07.20