OpenSSH RSA 공개 키를 이용한 서버 접속 에러 이슈 정리

Burst·2022년 11월 21일
0

[이슈내용]

서버A에서 생성한 RSA 공개 키를 이용하여 서버B, 서버C, 서버D에 SSH 접속을하였으나, 접속 대상 서버의 OpenSSH 버전이 업그레이드 되면서 RSA 공개 키를 통한 접근이 불가능한 상황 발생.

[원인]

<RSA 키 생성 서버(서버A): OpenSSH 버전 : 6.6.1>

RSA 공개 키 접근이 가능했던 서버의 OpenSSH 버전(서버B): 동일 버전(6.6.1)

  • RSA 공개 키 기반 접속이 가능했던 서버들은 RSA 공개 키에 대한 설정을 별도로 하지 않음.

RSA 공개 키 접근이 불가능 했던 서버의 OpenSSH 버전(서버C, D): 7.4, 8.6

  • RSA 공개 키 기반 접속이 불가능했던 서버들은 OpenSSH버전이 7.4, 8.6으로 RSA 공개 키를 지원하지 않음.
  • Error 내용
    • userauth_pubkey: key type ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
  • 정확하게는 ssh-rsa를 지원하지 않음 → ssh-rsa은 SHA1으로 서명이 되어 있음.
  • OpenSSH 상위 버전에서(OpenSSH 7.4이상)는 기본적으로 RSA 공개 키 생성 시 SHA2(SHA215)로 서명하여 생성하기 때문에 RSA키 사용 가능.
  • OpenSSH 상위 버전에서 RSA 공개 키를 지원하지 않는것이 아니라 ssh-rsa, 즉 SHA1으로 서명한 키를 지원하지 않는것임.

[OpenSSH 공개 키 설정 확인]

  • OpenSSH 하위버전(6.6.1)에서는 공개 키에 대한 별도의 설정이 없음.
  • OpenSSH 버전이 올라가면서 공개 키 알고리즘에 대한 설정 옵션이 추가.
  • sshd -T 명령어를 통해 현재 SSH 설정 내용을 확인 할 수 있음.
    • PubkeyAcceptedKeyTypes or PubkeyAcceptedAlgorithms 부분에서 지원하고 있는 공개 키 알고리즘 확인.
    • pubkeyacceptedkeytypes → 해당 부분에 ssh-rsa 설정이 되어 있지 않으면, RSA 공개 키(SHA1을 통해 서명된)를 이용한 접근이 불가능

[OpenSSH ssh-rsa 공개 키 설정]

  • sshd -T | grep ssh-rsa 명령어를 통해 PubkeyAcceptedKeyTypes에 ssh-rsa가 확인되지 않으면, /etc/ssh/sshd_config에서 PubkeyAcceptedKeyTypes=+ssh-rsa추가
    • SSH 서비스 재기동 필수.
  • OpenSSH 8.5 버전부터는 pubkeyacceptedkeytypes → PubkeyAcceptedAlgorithms으로 명칭이 변경되어 /etc/ssh/sshd_config 설정파일에서 PubkeyAcceptedAlgorithms=+ssh-rsa로 설정

[SSH 관련 명령어]

ssh-keygen -lf id_rsa.pub #만들어진 키의 서명 및 키 길이 확인.

2048 04:4e:ae:b5:be:ed:f1:0d:75:20:ca:3c:61:b9:df:e5(SHA1으로 서명된 2048길이의 RSA 키)
2048 SHA256:rYcCJ0sEsVvYaa69+ztedOfa421hoDeK/OAO4hoNeNM(SHA256으로 서명된 2048길이의 RSA 키)

sshd -T # 현재 ssh 설정 확인. sshd -T | grep pubkeyacceptedkeytypes로 공개 키 설정만 확인 가능

ssh -v user@hostname , ssh-vv user@hostname, ssh-vvv user@hostname #디버깅 모드, v,vv,vvv로 상세 레벨 설정 

[결론]

하위 버전의 OpenSSH를 사용 중인 서버에서 상위 버전의 OpenSSH를 사용하는 서버에 기존에 사용하던 RSA 공개 키를 통해 접근하게 될 경우 해당 이슈가 발생하게 되며 공개 키 설정에 ssh-rsa를 추가하여 기존 키 사용을 계속 할 수 있음.

하지만 보안 요건 상 RSA키를 계속 사용하는 것 보다 ecdsa 또는 ed25519 키를 사용하는 것을 권장.

[OpenSSH 8.8 버전 공식 문서 내용]

https://www.openssh.com/txt/release-8.8

OpenSSH 8.8 was released on 2021-09-26. It is available from the
mirrors listed athttps://www.openssh.com/.
OpenSSH is a 100% complete SSH protocol 2.0 implementation and
includes sftp client and server support.

                    .
                    .
                    .
                    . 

This release disables RSA signatures using the SHA-1 hash algorithm
by default. This change has been made as the SHA-1 hash algorithm is
cryptographically broken, and it is possible to create chosen-prefix
hash collisions for <USD$50K [1]

For most users, this change should be invisible and there is
no need to replace ssh-rsa keys. OpenSSH has supportedRFC8332
RSA/SHA-256/512 signatures since release 7.2 and existing ssh-rsa keys
will automatically use the stronger algorithm where possible.

Incompatibility is more likely when connecting to older SSH
implementations that have not been upgraded or have not closely tracked
improvements in the SSH protocol. For these cases, it may be necessary
to selectively re-enable RSA/SHA1 to allow connection and/or user
authentication via the HostkeyAlgorithms and PubkeyAcceptedAlgorithms
options. For example, the following stanza in ~/.ssh/config will enable
RSA/SHA1 for host and user authentication for a single destination host:

    Host old-host
        HostkeyAlgorithms +ssh-rsa
	PubkeyAcceptedAlgorithms +ssh-rsa

We recommend enabling RSA/SHA1 only as a stopgap measure until legacy
implementations can be upgraded or reconfigured with another key type
(such as ECDSA or Ed25519).
profile
Cloud Developer

0개의 댓글