dropbear SSH 서버에 연결할 수 없습니다

dropbear SSH 서버에 연결할 수 없습니다

SSH를 통해 라우터에 액세스하려고 합니다. 현재는 텔넷 액세스만 가능하며 dropbear를 설치하여 실행하고 있습니다(라우터에 연결된 USB 드라이브의 opkg 사용).

처음부터 내가 한 일은 개인 키를 생성하고 이를 해독한 것(dropbear는 아직 이를 지원하지 않기 때문에)과 공개 키뿐이었습니다.

cd .ssh
openssl genrsa -des3 -out id_rsa
openssl rsa -in id_rsa -out id_rsa
ssh-keygen -y -f id_rsa > authorized_keys

authorized_keys공개 키()를 에 업로드 했습니다 /root/.ssh. 파일을 Apache 서버(내 로컬 컴퓨터)에 넣고 wget을 사용하여 라우터에 다운로드한 다음(다운로드한 파일의 소유자/그룹이 루트임) 권한을 0600(클라이언트에서도 동일하지만)으로 변경했습니다. 내 사용자와 함께).

액세스하려고 하면 "권한 거부(공개 키)" 오류가 발생합니다.

$ ssh -v -i ~/.ssh/id_rsa [email protected]
OpenSSH_7.4p1, OpenSSL 1.0.2j  26 Sep 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Connecting to 192.168.1.1 [192.168.1.1] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/chazy/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/chazy/.ssh/id_rsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version dropbear
debug1: no match: dropbear
debug1: Authenticating to 192.168.1.1:22 as 'root'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug1: Server host key: ssh-rsa SHA256:1EFA75uwLp+4hBW0t3aaY05QjLzYd4jjDWoULAzF/8o
debug1: Host '192.168.1.1' is known and matches the RSA host key.
debug1: Found key in /home/chazy/.ssh/known_hosts:1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /home/chazy/.ssh/id_rsa
debug1: Authentications that can continue: publickey
debug1: No more authentication methods to try.
Permission denied (publickey).

내가 문서를 잘못 읽지 않은 한(GitHub 저장소)설명하다:

서버 공개 키 확인:

OpenSSH처럼 ~/.ssh/authorized_keys를 사용할 수 있습니다. 해당 파일에 키 항목을 넣으면 됩니다. 형식은 다음과 같아야 합니다.

ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAIEAwVa6M6cGVmUcLl2cFzkxEoJd06Ub4bVDsYrWvXhvUV+ZAM9uGuewZBDoAqNKJxoIn0Hyd0Nk/yU99UVv6NWV/5YSHtnf35LKds56j7cuzoQpFI d jNwdxAN0PCET/MG8qyskG/2IE2DPNIaJ3Wy+Ws4IZEgdJgPlTYUBWWtCWOGc=someone@hostname

~/.ssh 및 키 파일은 사용자만 쓸 수 있는지 확인해야 합니다. 편집기가 키를 여러 줄로 분할하는 것에 주목하세요.

Dropbear는authorized_keys 항목에 대한 일부 옵션을 지원합니다. 맨페이지를 참조하세요.

하라는 대로 했는데 어디가 문제인지 모르겠습니다.

문서에는 다른 방법이 언급되어 있습니다.

클라이언트 공개 키 인증:

Dropbear는 클라이언트로서 공개 키 인증을 수행할 수 있지만 OpenSSH 스타일 키를 Dropbear 형식으로 변환하거나 dropbearkey를 사용하여 생성해야 합니다.

OpenSSH 스타일 개인 키 ~/.ssh/id_rsa가 있는 경우 다음을 수행해야 합니다.

dropbearconvert openssh dropbear ~/.ssh/id_rsa ~/.ssh/id_rsa.db dbclient -i ~/.ssh/id_rsa.db

Dropbear는 암호화된 호스트 키를 지원하지 않지만 ssh-agent에 연결할 수 있습니다.

즉, 개인 키를 dropbear 개인 키로 변환하면 dropbear 클라이언트를 사용하여 dropbear 서버에 연결할 수 있습니다.

dropbearconvert openssh dropbear id_rsa id_rsa.db

나는 그것을 시도하고 그것이 작동하는지 확인하려고합니다. 하지만 어쨌든 서버 공개 키 인증은 작동해야 합니다.

답변1

짧은 대답: 아마도 OpenWrt를 실행 /etc/dropbear/authorized_keys중이고 /root/.ssh/authorized_keys.

긴 답변:

귀하가 가리키는 GitHub 저장소는 dropbear 작성자가 유지 관리하고 있으며 ~/.ssh/authorized_keysGitHub에 따르면 최소 14년 동안 유지해 왔습니다. 코드 보기svr-authpubkey.c/.ssh/authorized_keys"pw_dir"에 추가됩니다 .

그러나 나는 당신과 같은 문제에 직면했고 OpenWrt 18.06.1에서 제공되는 바이너리가 다음과 같다는 것을 발견했습니다.실제로열리는 /etc/dropbear/authorized_keys. 이 파일을 사용하면 나에게 도움이 되었습니다.

이 동작은 다음에 문서화되어 있습니다.OpenWrt 문서.

어떻게 그런 일이 일어날 수 있습니까?

위의 코드가 해당 파일 이름을 자체적으로 생성할 수 없고(누락됨 ) .ssh어디에도 .ssh심볼릭 링크 가 없다는 점을 고려하여 strings바이너리를 실행했습니다. 이는 예상할 수 있는 GitHub 코드에서 /etc/dropbear/authorized_keys이전에 이것이 명시적으로 언급되었음을 나타냅니다. %s/.ssh/authorized_keys내 결론은 OpenWrt 바이너리가 동일한 소스에서 컴파일되지 않았다는 것입니다. 실제로 OpenWrt는 다음을 사용하여 업스트림 코드를 패치했습니다.이번 패치. /etc/dropbear/authorized_keys대상 사용자가 루트인 경우에만 사용되는 파일을 변경합니다.

당신이 언급했기 때문에 opkg당신도 OpenWrt를 사용하고 있다고 가정하고 그것이 당신의 문제입니다. 귀하의 질문에 OpenWrt 태그를 추가했습니다.

답변2

dropbear를 통해 내 서버에 연결하는 것이 갑자기 작동하지 않는 이유를 찾는 동안 이 문제에 직면했습니다(몇 달 동안 작동했지만 몇 주에 한 번만 작동했습니다).

마침내 찾은 해결책/설명은 debug1: send_pubkey_test: no mutual signature algorithm클라이언트 SSH 연결 시도에 긴 메시지를 추가하는 것이었고 그 결과비트 버킷 문제 해결 문서.

그 기사가 언급됐어요다양한 보안 취약점으로 인해 RSA 알고리즘은 운영 체제 및 SSH 클라이언트에서 빠르게 더 이상 사용되지 않습니다 [...]이유를 설명하고 가능한 해결 방법을 나열합니다.

  • 클라이언트 cfg 파일에 추가 PubkeyAcceptedKeyTypes +ssh-rsa(이 파일은 다음 용도로만 사용)임시 해결 방법안전하지 않을 수도 있기 때문이죠! )

  • ECDSA 또는 ED25519 알고리즘/키를 사용하세요. 이제 시스템에 dropbear 버전이 있으므로 다음을 수행할 수 있습니다.오직ED25519로 ECDSA를 사용하면 나에게알 수 없는 알고리즘드롭베어가 있는 버그.

저처럼 이 문제로 어려움을 겪고 있는 분들에게 이것이 도움이 되기를 바랍니다. 이것이 원래 문제에 대한 해결책이 아닐 수도 있습니다. 용서하다.

답변3

남자는 곰 열쇠를 내려 놓습니다.

NOTES
       The program dropbearconvert(1) can be used to convert between  Dropbear
       and OpenSSH key formats.

       Dropbear does not support encrypted keys.

EXAMPLE
       generate a host-key:
        # dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

       extract a public key suitable for authorized_keys from private key:
        # dropbearkey -y -f id_rsa | grep "^ssh-rsa " >> authorized_keys

답변4

PKI를 사용하여 Dropbear에 연결하는 데 도움이 될 수 있는 몇 가지 팁은 OpenSSH 클라이언트에서 연결하는 Alpine Linux 3.12 패키지 기반 컨테이너를 테스트했습니다.

  1. 사용자에게는 쉘이 필요합니다.
  2. 사용자에게는 로그인 비밀번호가 필요하지 않습니다.
  3. 사용자~ 기필코 아니다그룹/전체 쓰기가 가능합니까(즉 , 적어도 홈 디렉토리 chmod 755에 사용해야 합니다 ).700
  4. 사용자 ~/.ssh~/.ssh/authorized_keys ~ 해야 하다소유자만 액세스할 수 있습니다(예: 700디렉터리 및 600파일).
  5. 거기~ 해야 하다/tmp쓰기 가능한 디렉토리 입니다
  6. 이러한 authorized_keys항목의 형식은 OpenSSH에서 사용되는 형식과 동일합니다.

저는 alpine 패키지에서 신중하게 선택한 파일을 사용하여 컨테이너를 만들고 있습니다. 위의 모든 요구 사항이 충족되는 한 SSH를 통해 액세스할 수 있는 약 2MB의 이미지가 있습니다.

관련 정보