ルーターへのsshアクセスを取得しようとしています。現在、私はtelnetアクセスしか持っておらず、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を使用してルーターにダウンロードし(ダウンロードしたファイルが所有者/グループとしてrootになる)、アクセス許可を0600に変更しました(クライアントと同じですが、ユーザーが使用しています) )。
アクセスしようとすると、「Permission denied(publickey)」エラーが発生します。
$ 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 repo )が言うことを私が誤解していない限り:
サーバー公開鍵認証:
OpenSSHと同じ方法で〜/ .ssh/authorized_keysを使用できます。そのファイルにキーエントリを配置するだけです。それらは次の形式である必要があります。
sSH-RSA AAAAB3NzaC1yc2EAAAABIwAAAIEAwVa6M6cGVmUcLl2cFzkxEoJd06Ub4bVDsYrWvXhvUV + ZAM9uGuewZBDoAqNKJxoIn0Hyd0Nk/yU99UVv6NWV/5YSHtnf35LKds56j7cuzoQpFIdjNwdxAN0PCET/MG8qyskG/2IE2DPNIaJ3Wy + Ws4IZEgdJgPlTYUBWWtCWOGc =誰か@ホスト名
〜/ .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
私はこれを試してみて、それが機能するかどうかを確認します。しかし、とにかく、サーバー公開鍵認証は機能するはずです。
短い答え:OpenWrtを実行している可能性があり、公開鍵を/etc/dropbear/authorized_keys
ではなく/root/.ssh/authorized_keys
に配置する必要があります。
長い答え:
あなたがポイントするGitHubリポジトリは、dropbearの作者が管理しているものです。それは~/.ssh/authorized_keys
が機能すると言っており、GitHubによれば少なくとも14年間は機能しているとのことです。 svr-authpubkey.c のコードを見ると、「pw_dir」に/.ssh/authorized_keys
が追加されています。
しかし、私はあなたと同じ問題を抱えていて、OpenWrt 18.06.1で提供されるバイナリが実際にを開いていることを発見しました/etc/dropbear/authorized_keys
。そのファイルを使用することは私にとってはうまくいきます。
この動作は OpenWrtドキュメント に記載されています。
どうして?
上記のコードはそのファイル名を自分で生成できず(.ssh
が欠落している)、どこにも.ssh
シンボリックリンクがないため、バイナリでstrings
を実行しました。これは、GitHubコードから期待できる/etc/dropbear/authorized_keys
の直前に、%s/.ssh/authorized_keys
が明示的に言及されていることを示しています。 OpenWrtバイナリは同じソースからコンパイルされていないと私は結論づけています...そして実際、OpenWrtは上流のコードに this patch をパッチします。ターゲットユーザーがrootの場合(かつその場合のみ)は、使用されるファイルを/etc/dropbear/authorized_keys
に変更します。
opkg
について言及しているので、OpenWrtも使用していると思いますが、これが問題です。質問にOpenWrtタグを追加しました。
authorized_keys
はファイルではなく、ディレクトリです。
Authorized_keysファイルの例:
# Comments allowed at start of line
ssh-rsa AAAAB3Nza...LiPk== [email protected]
from="*.sales.example.net,!pc.sales.example.net" ssh-rsa
AAAAB2...19Q== [email protected]
http://man.he.net/man5/authorized_keys
また、.ssh/
およびその中のすべてのファイルは、ユーザーのみが所有および読み取り可能でなければなりません。この場合はroot
です。
男dropbearkeys:
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
Dropbearkeyツールを使用してsshキーを作成する必要があります。 RSA_KEYFILE =/etc/dropbear/dropbear_rsa_Host_key DSS_KEYFILE =/etc/dropbear/dropbear_dss_Host_key
dropbearkey -t dss -f $ DSS_KEYFILE
dropbearkey -t rsa -f $ RSA_KEYFILE
次に、dropbearデーモンを再起動します。次に、接続を試みます、それは動作するはずです。