私は自分にsshアクセスを与えようとしているDigital Oceanドロップを持っています。以前に何が行われたかはわかりません。 Digital Ocean UIを介して公開キーを追加しようとしました。それはうまくいきませんでした。permission denied (publickey)
を取得し続けました。
Digital Oceanコンソールからサーバーにアクセスし、/root/.ssh/authorized_keys
に公開キーを手動で追加しました。その後、ssh [email protected]
を使用してsshを試みました。それはうまくいきませんでした(許可は拒否されました)。
そこで、新しいユーザーを追加して、/home/me/.ssh
ディレクトリ自体にアクセス許可700
を持つ.ssh
ディレクトリを作成し、600
ファイルにauthorized_keys
を作成しました。次に、ssh [email protected]
を試しました。それもうまくいきませんでした。
Sshデーモンを再起動しても何も変わりません。
私は何が欠けていますか?
編集:
詳細なssh出力を次に示します。
https://Gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9
編集2:
LogLevel DEBUG3
出力:
最終的に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で接続できるはずです。
~/.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
この例では、digitaloceanbox
とgithub
とgithub.com
をセットアップして、次のコマンドを実行できるようにします。
ssh github
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つのファイルが作成されます。
.ssh/digitalocean-rsa
.ssh/digitalocean-rsa.pub
ssh
キーを提供するときは、.pub
バージョンであることを確認してください!! ~/.ssh/config
に追加するときは、システムに追加した公開キーと一致する正しい秘密キーを追加してください。
ほとんどのインストールでは、公開キー認証が有効になっています。しかし、すべてを自由に行うことを始めると、いくつかの問題が発生する可能性があります。 OPの問題が発生した場所で、OPが/root/.ssh/
ディレクトリを削除して最初からやり直すことをお勧めします。
ssh
を使用してリモートシステムのルートユーザーにアクセスすることはお勧めしません。別のユーザーにssh
してから、パスワード(Sudo su -
)を使用してrootにエスカレーションすることをお勧めします。
ssh-copy-id
を使用してホストにキーを追加します別のユーザーを作成し、そのユーザーとしてssh
を使用するか、rootユーザーとして使用するかに関わらず、サーバーにssh
キーを配置する推奨方法は次のとおりです。
ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
これにより、sshd
が、必要な権限で必要なディレクトリとファイルを作成できます。これは、権限を台無しにしたり、詳細を覚える必要がないということを意味します。ツールを使用してキーをアップロードするだけです。
つまり、自分でキー入力し、キーを使用して接続できることを確認したら、sshd
でパスワード認証を無効にし、サービスを再起動することをお勧めします。
/etc/ssh/sshd_config
PasswordAuthentication no
Sudo systemctl restart sshd
パスワード認証を無効にした場合、新しいユーザーにキーを設定するにはどうすればよいですか? 1つの方法は、/etc/skel
ディレクトリにテンプレートファイルを追加することです。 1人のユーザーにキーを設定したら、次の手順を実行します。
Sudo cp -r .ssh/ /etc/skel/
ls /etc/skel/.ssh
/etc/skel/.ssh/
にあるすべてのファイルを編集して、新しく作成されたすべてのユーザーのキーを自動的に入力する場合を除き、空になるようにします。Sudo useradd -m newuser
を使用して新しいユーザーを作成すると、そのユーザーは.ssh/authorized_keys
を持ちます。これは編集可能で、適切な権限を持ちます。
sshd
ログファイルを見て、接続が失敗するか拒否される理由を確認できます。
Sudo tail -f /var/log/auth.log
このコマンドを実行しているときに、別のターミナルを使用してログインを試みます。多くの場合、提供されるメッセージは問題を特定したり、オンラインで解決策を見つけるのに役立つほど十分です。
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 [email protected] -i .ssh/id_rsa
これにより、デバッグが容易になり、コマンドラインでは常にローカルコンピューターで機能するはずです。
リンクしたログによると、クライアント側でprivate keyファイルが見つからないという問題があると思います。
最初に、ローカルマシン上に~/.ssh/id_rsa
ファイルが存在することを確認します。これが正しいファイルです(さらにある場合)。
.ssh
フォルダーのアクセス許可(drwx------
を実行しない場合はSudo chmod 700 ~/.ssh
である必要があります)とその内容(-rw-------
を実行する場合はSudo chmod 600 ~/.ssh/*
である必要があります)を確認します。リモートマシンにも同じ権限を適用します。
さらに、目的の秘密キーを使用して強制的に試行し、-i
パラメーターを使用してssh
に直接与えることができます。
次のようなものを実行できます。
ssh -i /path/to/your/private-key [email protected]
または
ssh -i ~/.ssh/id_rsa [email protected]
Sshのマンページ(端末でman ssh
を実行)で詳細情報を取得できます。
また、root
ユーザーとしてログインする場合は、ログイン前にルートアカウントを有効にして、Sudo passwd root
またはサーバー管理ツールでパスワードを作成する必要があります(Ubutntuにはルートアカウントがありますデフォルトでは無効になっています)。詳細情報は buntu Wiki で入手できます。
それが役に立てば幸い。
Sshデーモンの構成を再確認し(/etc/ssh/sshd_config
にある必要があります)、以下を確認します。
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
また、構成ファイルをチェックして、AllowUsersまたはAllowGroupsが設定されているかどうかを確認します。これらはそれぞれユーザーとグループのホワイトリストとして機能するためです。
また、rootユーザーにキーを追加しようとしていることに気付きました。デフォルトではルートログインは無効になっているはずですが、PermitRootLoginフィールドを使用してこれを変更することもできます。
Digital OceanでDebianイメージを使用すると、この問題が浮上しました。何らかの理由で簡単なセットアッププロセス中に、おそらくルートパスワードを設定したときに、/root
の所有者がユーザー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
よく似た問題がありました。これは私のために働いた-この行を/ etc/ssh/sshd_configに追加
AuthorizedKeysFile %h/.ssh/authorized_keys
その後、通常の方法でsshを再起動します。