저는 임베디드 시스템(32비트 ARMel 시스템)에 쉘 서버를 가지고 있습니다. 로그인할 때 다음을 사용합니다.
$ ssh root@ip
Unable to negotiate with ip port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
다음 옵션을 사용하여 예상되는 비밀번호 유형 중 하나를 제공하려고 했습니다 -c
.
$ ssh -c ssh-dss root@ip
Unknown cipher type 'ssh-dss'
또는:
$ ssh -c ssh-rsa root@ip
Unknown cipher type 'ssh-rsa'
그래서 다음에 무엇을 해야할지 모르겠습니다. 명령을 보낼 수 있는 UART 직렬 콘솔이 있지만 SSH를 사용하고 싶습니다. 서비스가 실행되고 있다는 것은 알지만 로그인하는 방법을 모르겠습니다.
답변1
펌웨어를 더 이상 최신 SSH 표준으로 업그레이드할 수 없는 구형 Cisco 임베디드 시스템에서 이러한 현상이 자주 발생합니다.
호스트 키 알고리즘 외에도 오래된 키 교환 알고리즘 및/또는 암호 사양을 사용해야 할 수도 있습니다.
큰 타격의 예:
ssh -oKexAlgorithms=+diffie-hellman-group1-sha1\
-oHostKeyAlgorithms=+ssh-rsa\
-oCiphers=+aes256-cbc\
<user>@asa5505
좋은 소식은 내가 사용하는 OpenSSH가 일반적으로 어떤 알고리즘이나 암호가 제공되는지 알려준다는 것입니다. 그렇지 않으면 많은 시행착오를 거쳐야 할 수도 있습니다.
이렇게 하면 사용 가능한 프로토콜이 OpenSSH에 나열될 수 있습니다.
ssh -Q [ciphers|hostkeyalgorithms|kexalgorithms|...]
고쳐 쓰다: 이 작업을 수행하기 위해 ssh_config를 사용하는 데 많은 관심이 있는 것 같으므로(Bob, Z 등 덕분에) 이 접근 방식의 예를 제공하겠습니다.
############################################
# ~/.ssh/config
Host 'asa5505*'
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa
Ciphers +aes128-cbc
이러한 프로토콜은 보안상의 이유로 더 이상 사용되지 않으므로 "호스트" 또는 "일치" 자격을 사용하여 해당 프로토콜이 필요한 레거시 대상에만 사용되도록 기본 사용법을 제한해야 합니다.
마찬가지로 이러한 예외를/etc/ssh/ssh_config또는 아래/etc/ssh/ssh_config.d/현재와 미래의 모든 사용자가 기본적으로 이를 사용하도록 의도하지 않는 한.
자세한 내용은 다음을 참조하세요.
man ssh_config
답변2
답변3
또한 자신의 컴퓨터에서 실행 중인 항목에 따라 다릅니다. Arch 또는 Fedora36+(OpenSSL3.0 기반)를 실행 중인 경우 이전 알고리즘은 더 이상 사용되지 않거나 비활성화되었습니다. 이전 서버에 연결하려면 3.0용 SSH 구성에 이 구성을 포함해야 했습니다.
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
답변4
깔끔한 트릭은 현재 작동하고 OpenSSH에서 알고리즘이 제거된 경우 이전 버전과의 호환성에 도움이 될 수 있는 이전 Linux 배포 이미지의 컨테이너를 사용하는 것입니다.
더 많은 오버헤드가 있고(컨테이너를 수십 MB의 비용으로 보관할 수 있음에도 불구하고) 허용될 수도 있고 허용되지 않을 수도 있는 보안 위험(유지관리되지 않는 OpenSSH 버전일 수도 있음)이 있을 수 있습니다.
이것은 제한 사항이 있는 한 줄의 내용입니다.
docker run --rm -it debian:jessie sh -c 'apt-get update && apt install -y --force-yes openssh-client && ssh the_host