authorized_keysに公開キーを追加してもsshできません


14

私は自分にsshアクセスを与えようとしているDigital Oceanドロップレットを持っています。以前に何が行われたかはわかりません。Digital Ocean UIを介して公開キーを追加しようとしました。それはうまくいきませんでしたpermission denied (publickey)

デジタルオーシャンコンソールからサーバーにアクセスし、手動で公開キーをに追加しました/root/.ssh/authorized_keys。次に、を使用してsshを試みましたssh root@x.x.x.x。それはうまくいきませんでした(許可は拒否されました)。

私は、新しいユーザーを追加しようとしたので、作成した/home/me/.ssh権限でディレクトリを700上の.sshディレクトリ自体、そして600上のauthorized_keysファイル。それから私は試したssh me@x.x.x.x。それもうまくいきませんでした。

sshデーモンを再起動しても何も変わりません。

私は何が欠けていますか?

編集:

詳細なssh出力を次に示します。

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

編集2:

LogLevel DEBUG3 出力:

ここに画像の説明を入力してください


接続からの詳細ログ、sshd_configの内容、およびsshに関連する可能性のあるエラーをサーバーログに投稿します。
-Jakuje

@Jakuje出力を追加しました...前にあなたのコメントに気付きませんでした。
ジェフ

キーは拒否されます。サーバーログで考えられる問題を確認します(おそらくLogLevel DEBUG3sshd_config)。これらは許可の問題であると思われますが、これにはいくつかの理由が考えられます。
-Jakuje

それは言う[date omitted] www sssh[15029]: Connection closed by x.x.x.x port 55519 [preauth]
ジェフ

authorized_keysファイルの権限は何ですか?ls -ld ~ ~/.ssh ~/.ssh/authorized_keys?サーバーから詳細なログ用のファイルは、上記の変更、SSHサービスを再起動し、再度接続してログを投稿(にもする必要がありますauth.log
Jakuje

回答:


19

クライアント構成

セットアップ ~/.ssh/config

のホストエントリの設定sshは非常に簡単で、多くの手間を省くことができます。以下に例を示します。

Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes


Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no

この例では、我々のセットアップdigitaloceanboxgithubし、github.com我々は次のコマンドを実行することができますように。

  1. ssh github
  2. ssh digitaloceanbox

構成ファイルで指定されているユーザーとは異なるユーザーとしてログインする場合はuser@、最初に次のように入力します。

  • ssh user@digitaloceanbox

sshキーを生成する

ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):  /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine

プロンプトが表示されたら、生成する秘密キーの完全なパスを指定したことに注意してくださいssh-keygen。また-C、リモートマシン上のキーを簡単に識別できるようにするコメント()も定義しました。

これにより、2つのファイルが作成されます。

  1. .ssh/digitalocean-rsa
    • プライベートキー。 これを決して共有しないでください
  2. .ssh/digitalocean-rsa.pub
    • 公開鍵。これは、認証のためにサーバーに保存するものです。

sshキーを提供するとき、それが.pubバージョンであることを確認してください!! に追加するときは~/.ssh/config、システムに追加した公開鍵と一致する正しい秘密鍵を必ず追加してください。


サーバー構成

ほとんどのインストールでは、公開キー認証が有効になっています。しかし、すべてを自由に行うことを始めると、いくつかの問題が発生する可能性があります。OPが問題になっている場所で、OPが/root/.ssh/ディレクトリを削除して最初からやり直すことをお勧めします。

sshリモートシステム上のルートユーザーへのアクセスに使用することはお勧めしません。ssh別のユーザーにログインし、パスワード(sudo su -)を使用してrootにエスカレーションすることをお勧めします。

を使用してホストにキーを追加する ssh-copy-id

別のユーザーを作成しsshてそのユーザーとして使用するか、rootユーザーとして使用するかに関わらずssh、サーバーにキーを配置する推奨方法は次のとおりです。

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

これによりsshd、必要な権限で必要なディレクトリとファイルを作成できます。これは、アクセス権を台無しにしたり、詳細を覚える必要がないことを意味します。ツールを使用してキーをアップロードするだけです。

パスワード認証を無効にする

つまり、自分でキーを入力し、キーを使用して接続できることを確認したら、パスワード認証を無効にしsshdてサービスを再起動することをお勧めします。

  1. 編集 /etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

新規ユーザーはどうですか?

パスワード認証を無効にした場合、新しいユーザーにキーを設定するにはどうすればよいですか?1つの方法は、テンプレートファイルを/etc/skelディレクトリに追加することです。1人のユーザーにキーを設定したら、次の手順を実行します。

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. /etc/skel/.ssh/新しく作成されたすべてのユーザーのキーを自動的に入力する場合を除き、ファイルが空になるようにファイルを編集します。

で新しいユーザーを作成するとsudo useradd -m newuser、そのユーザーはを持ち.ssh/authorized_keys、これを編集して適切な権限を付与できます。

デバッグ

あなたは見ることができますsshd接続が失敗したり、拒否します理由は、ログファイルを:

  1. sudo tail -f /var/log/auth.log

このコマンドの実行中に、別の端末を使用してログインを試行してください。多くの場合、提供されるメッセージは問題を特定したり、オンラインで解決策を見つけたりするのに十分です。


1
デバッグのステップはうまくいきました。ルートディレクトリのアクセス許可が間違っていた(700である必要がある)
naisanza

12

sshは、sshキーを使用した所有権、ファイル、およびディレクトリのアクセス権について非常に慎重です。

〜/ .ssh /は所有者が所有し、700の権限を持っている必要があります。〜/ .ssh / authorized_keysは所有者が所有し、600の権限を持っている必要があります。

したがって、ルートの場合:

sudo chown root:root -R /root/.ssh/
sudo chmod 700 /root/.ssh/
sudo chmod 600 /root/.ssh/authorized_keys

ユーザーmeの場合:

sudo chown me:me -R /home/me/
sudo chmod 700 /home/me/.ssh/
sudo chmod 600 /home/me/.ssh/authorized_keys

そして、もう一度試してください。

もちろん、/ etc / ssh / sshd_configで、rootがログインできるかどうか、またはsshキーだけでログインできるかどうかも確認する必要があります。

あなたが持っている場合 :

PasswordAuthentication no

次に設定できます:

PermitRootLogin yes

そしてsshdを再起動します:

/etc/init.d/sshd restart

そしてさらに試みる。

sshでは、これにsshセッションを使用している場合でも、sshdデーモンを再起動できることに注意してください。Opensshはそれを処理するように設計されています。

アップロードしたログファイルスニペットを見ると、MacOSXを使用しているようです。そこで新しいsshキーを作成できますか?

さらに、過去に、ユーザーのローカルコンピューターに複数のプライベートsshキーがあると、sshを使用してリモートでログインできないことがあることを発見しました。これを解決するために、ファイル〜/ .ssh / configにローカルコンピューターのエントリを作成することは非常に役立ちました。例えば ​​:

Host my-vps
  HostName my-vps-ip-address-here
  IdentityFile ~/.ssh/id_rsa-my-private-key-location
  User my-username-here

その後、ローカルコンピューターのコマンドラインで試してください。

ssh -v my-vps

sshキーを使用し、他のログインでsshキーを使用しない場合、sshキーを使用したエントリに加えて、〜/ ssh / configファイルでsshキーを使用しないでsshログインを定義することもできます。

Host pi
  Hostname 192.168.1.111
  Port 22
  User pi
  PasswordAuthentication yes
  PreferredAuthentications password

これは私には問題ありません。コマンドラインで使用するキーを定義することもできます:

ssh -v root@10.111.111.254 -i .ssh/id_rsa

これにより、デバッグが容易になる可能性があり、コマンドラインでは常にローカルコンピューターで機能するはずです。


このソリューションに加えて、SSHを機能させるために、ホームフォルダーのアクセス許可も変更する必要がありましたsudo chmod 700 /home/me/
。– Rg90

あなたは命の恩人です、@ albert-j!IdentityFileラインは、1時間のマンネリを私に外に出ました。
-zev

4

sshデーモンの構成を再確認し(にあるはずです/etc/ssh/sshd_config)、以下を確認します。

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

また、構成ファイルをチェックして、AllowUsersまたはAllowGroupsが設定されているかどうかを確認します。これらはそれぞれユーザーとグループのホワイトリストとして機能します。

また、rootユーザーにキーを追加しようとしていることに気付きました。デフォルトではルートログインは無効になっているはずですが、PermitRootLoginフィールドを使用してこれを変更することもできます。


これらのどれも機能していません:/私はまだ得ますPermission denied (publickey)
ジェフ

3

リンクしたログによると、クライアント側で秘密鍵ファイルが見つからないという問題があると思います。

  • 最初~/.ssh/id_rsaに、ローカルマシンにファイルが存在することを確認し、正しいファイルであることを確認します_(さらにある場合)。

  • チェック.sshフォルダのアクセス権を(する必要がありますdrwx------実行されない場合、sudo chmod 700 ~/.sshとその内容(あるべき-rw-------実行されない場合、sudo chmod 600 ~/.ssh/*。リモートマシンにも同じ権限を適用します。

さらに、目的の秘密キーを使用して強制的に試行sshし、-iパラメータで直接提供することもできます。

  • 次のようなものを実行できます。

    ssh -i /path/to/your/private-key root@X.X.X.X

    または

    ssh -i ~/.ssh/id_rsa myRemoteUser@X.X.X.X

sshのマンページman ssh端末で実行)で詳細情報を取得できます

また、rootユーザーとしてログインする場合は、ログイン前にルートアカウントを有効にしてsudo passwd root、サーバー管理ツールでパスワードを作成する必要があります(Ubutntuではデフォルトでルートアカウントが無効になっている)Ubuntu Wikiで詳細情報を入手できます。

それが役に立てば幸い。


3

私は最終的に再インストールopenssh-serverすることで問題を修正しました。与えられた解決策はすべて素晴らしいですが、私にはうまくいきませんでした。何が原因で問題が発生したのかはわかりませんが、前の開発者が設定を台無しにして、かなり悪くなったのではないかと思います。

私のような特定の問題を抱えている人はいないと思います。ただし、Digital Oceanのドロップレットがある場合、SSHアクセスを取得できず、指定されたソリューションが機能しないため、Digital Oceanコンソールでこれらのコマンドを実行してSSHサーバーを再インストールします。これは破壊的なプロセスであり/etc/ssh/.sshディレクトリではなく古い構成ファイルが消去されることに注意してください。

apt-get purge openssh-server
apt-get autoremove
apt-get autoclean
apt-get install openssh-server

SSHクライアント/キーが正常に動作していると仮定すると、サーバーにSSH接続できるはずです。


1

Digital OceanでDebianイメージを使用すると、この問題が浮上しました。どういうわけか、簡単なセットアッププロセス中に、おそらくルートパスワードを設定したときに、の所有者/rootがuserに変更されましたdebian。私は以下を見ました/var/log/auth.log

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

実行するだけでchown root:root -R /root問題は解決しました。

HTH


0

よく似た問題がありました。これは私のために働いた-この行を/ etc / ssh / sshd_configに追加する

AuthorizedKeysFile %h/.ssh/authorized_keys 

その後、通常の方法でsshを再起動します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.