私はこれに数時間苦労してきましたので、どんな助けも大歓迎です...
私は2台のサーバーを使用しており、どちらもOSXからの公開鍵でssh
を実行できます。そこにはまったく問題がないので、sshd_config
。
2つのサーバーを同期するようにrsync
のcronジョブを構成しようとしています。公開キーを使用してサーバーB(バックアップ)からサーバーAにssh
する必要があります。
私の人生では、なぜそれが私の公開鍵を見つけられないのか理解できません-それらは~/.ssh/
(つまり、/root/.ssh
)およびすべてのファイル権限がAおよびBで正しい。
これは出力です:
debug2: we did not send a packet, disable method
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /root/.ssh/identity
debug3: no such identity: /root/.ssh/identity
debug1: Trying private key: /root/.ssh/id_rsa
debug3: no such identity: /root/.ssh/id_rsa
debug1: Trying private key: /root/.ssh/id_dsa
debug3: no such identity: /root/.ssh/id_dsa
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
また、存在しない秘密鍵を探していることに注意してください...
drwx------. 2 root root 4096 May 25 10:15 .
dr-xr-x---. 4 root root 4096 May 24 18:52 ..
-rw-------. 1 root root 403 May 25 01:37 authorized_keys
-rw-------. 1 root root 0 May 25 01:41 config
-rw-------. 1 root root 1675 May 25 02:35 id_rsa_tm1
-rw-------. 1 root root 405 May 25 02:35 id_rsa_tm1.pub
-rw-------. 1 root root 395 May 25 02:36 known_hosts
Sshのmanページをご覧ください。
-i identity_file
Selects a file from which the identity (private key) for public
key authentication is read. The default is ~/.ssh/identity for
protocol version 1, and ~/.ssh/id_dsa, ~/.ssh/id_ecdsa,
~/.ssh/id_ed25519 and ~/.ssh/id_rsa for protocol version 2.
Identity files may also be specified on a per-Host basis in the
configuration file. It is possible to have multiple -i options
(and multiple identities specified in configuration files).
またはssh_configのmanページ:
IdentityFile
Specifies a file from which the user's DSA, ECDSA, ED25519 or
RSA authentication identity is read. The default is
~/.ssh/identity for protocol version 1, and ~/.ssh/id_dsa,
~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 and ~/.ssh/id_rsa for proto‐
col version 2. Additionally, any identities represented by the
authentication agent will be used for authentication unless
IdentitiesOnly is set.
ご覧のとおり、キーを指定しない場合に試行される特別なファイル名がいくつかあります。これらは、ログ出力に表示されるファイルでもあります。
異なる名前のファイルでキーを使用するには、3つのオプションがあります。
-i
オプションを使用して、ファイルを明示的に指定します。IdentityFile
オプションを使用して、クライアント構成でファイルを構成します。ssh-add
を使用してキーをエージェントに追加します。インタラクティブセッションの場合、エージェントが最も柔軟です。 cronジョブの場合、-i
オプションがおそらく最も簡単なオプションです。
宛先ホストの不正なauthorized_keysファイルは、sshが「パケットを送信しませんでした」メッセージを出力し、pubkey authを使用する代わりにパスワードを要求するもう1つの理由です:-
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey,password
debug2: we did not send a packet, disable method
この特定の場合の問題は、宛先ホストの.ssh/authorized_keys
に貼り付けられていた公開鍵データに最初の文字が欠落していることでした:-
sh-rsa AAAA...
解決策は、不足している「s」を追加することでした。
ssh-rsa AAAA...
など:-
debug1: Next authentication method: publickey
debug1: Offering RSA public key: ~/.ssh/id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Server accepts key: pkalg ssh-rsa blen 279
...
debug1: Authentication succeeded (publickey).
この質問のエラーメッセージの正確な文字列は、一致しない秘密鍵と公開鍵のペアローカル側の場合にも発生する可能性があります。いいえ、それは意味がありませんが、私は何が起こっているのかを理解しようとして、長い間髪を引き裂きました。
.ssh/mykey.pub
を.ssh/authorized_keys
にコピーしました。.ssh/mykey
がありますが、一致しない.ssh/mykey.pub
ファイルもあり、以前のバージョンの置き換えられた鍵である可能性があります。BからAへのSSH(ssh -i mykey A
)は問題のメッセージで失敗します。特に、sshクライアントから-vv
をオンにすると、次のようになります。
秘密鍵を試す:.ssh/mykey
パケットを送信しませんでした、メソッドを無効にします
実際のキーが試されなかったため、これは嘘です。明らかに、一致する名前のローカル公開キーファイルを使用して、それが機能する可能性があるかどうかを判断し、不一致の場合は実際には何もしませんでした。どちらの側のデバッグ情報も、問題をほのめかすものではありません。
Debian/Ubuntuでデバッグする簡単な方法は次のとおりです:パスワードで接続してログをテール
tail -f /var/log/auth.log
他の端末から接続しようとすると、エラーが表示されます...
私の場合、/ rootディレクトリは770であり、デフォルトの700ではありませんでした。エラーは「認証が拒否されました:ディレクトリ/ rootの所有権またはモードが不正です」でした。
これを修正すれば完了です。
Sshが検索するデフォルトのファイル名はid_rsa
およびid_rsa.pub
です。
他のファイル名を使用する場合は、 ssh_config
で指定する必要があります(IdentityFile
設定を使用)または、ssh コマンドライン パラメータ-i
を使用します。
RedHatでも同じ問題がありました。ログを確認したところ、ホームディレクトリに誤ったユーザー権限があったことがわかりました。
sshd[2507]: Authentication refused: bad ownership or modes for directory /home/user
ホームディレクトリの権限を修正することでこれを解決しました。
試す
/sbin/restorecon -r /root/.ssh
販売コンテキストで起こりうる問題
[今日はこのあいまいなエラーに悩まされたので、「パケットを送信しませんでした、メソッドを無効にしてください」というdebug2メッセージの原因可能のリストに追加します。 ]
(リモートシステム上で)ログインしているアカウントに、(リモートシステム上で)公開鍵ファイルへの読み取りアクセス権がない可能性があります。たとえば、私たちの環境では、/etc/ssh/sshd_config
で指定されたカスタムのAuthorizedKeysFile
ロケーションがあります。
AuthorizedKeysFile /usr/local/etc/ssh_authorized_keys/%u_pub
そして/usr/local/etc/
の権限が次のように変更されました:
drwx------. 3 root root 29 Feb 20 2018 /usr/local/etc/
権限を(再)設定することで解決:
drwxr-xr-x. 3 root root 29 Feb 20 2018 /usr/local/etc/
実行した後
ssh-copy-id user@remote-Host
通常は動作するはずです。しかし、それが失敗した場合は、これを試してください。今後ログインするユーザーとしてリモートホストにログインし、実行します。
ssh-keygen
それは私を助けました。
つまり、ローカルマシンからアクセスするVMが2つある(id_rsa.pubとid_rsa2.pubの2つのキー)ことです。私のssh接続では、すべてのssh [email protected]接続に対してデフォルトでid_rsa.pubが使用されていることに気付きました。次のように、構成ファイルを追加し、すべてのホストに使用するIDを指定することで問題を解決しました。
vi ~/.ssh/config
Add both hostnames and their identity file as follows:
Host server1.nixcraft.com
IdentityFile ~/Users/.ssh/id_rsa1
Host server2.nixcraft.com
IdentityFile /backup/home/aymen/.ssh/id_rsa2