私はこれをできるだけ詳細にまとめようと思います。私は昨夜、Corey Schafer Python Djangoの指示に従って、Linode上のUbuntu (23.04)サーバーに最初のDjangoサイトをデプロイしました。チュートリアルすべてがうまくいき、チュートリアルの動画の23~25分ほどでSSHを設定しましたが、問題はありませんでした。ある時点ですべてが機能していることを確認しました。サーバーを終了し、問題なくSSH経由で再度ログインできることを確認しました。続けて、さらに1~2時間かけて他の多くのものを設定し、就寝前にサイトが起動していることを確認し、サーバーを終了しました。今日、サーバーに接続しようとしたところ、メッセージが表示されました。Permission denied (publickey).
これらすべての後でファイアウォールを追加したことがわかったので、SSH 接続か何かから自分自身をロックアウトしたのだろうと思いました。しかし、グーグルで検索した後、この修飾子をssh -vT user@IP
見つけ、確かに SSH 経由で接続しようとしているようで接続は確立されているが、完全には理解できない理由で失敗していることがすぐにわかりました。
次に、Linodes Weblish 経由で root ユーザーとしてログインしようとしたところ、正常にログインでき、いくつかの点を確認できました。
/home/user/.ssh
• まず、キーが含まれるファイルを含むフォルダーがその場所にあることを確認しました。
• 次に、ビデオのウォークスルーに戻って ~/.ssh/ フォルダーとその内容を確認し、次の 2 つのコマンドを再度実行して権限を確認しましたsudo chmod 700 ~/.ssh/
。sudo chmod 600 ~/.ssh/*
結果は、ホーム ディレクトリの ssh フォルダーの場合、次のようになります。
lewpiper@django-server:~$ la -la
total 40
drwxrwxrwx 6 lewpiper lewpiper 4096 Jun 14 06:37 .
drwxr-xr-x 3 root root 4096 Jun 14 05:22 ..
-rw------- 1 lewpiper lewpiper 100 Jun 14 05:34 .bash_history
-rw-r--r-- 1 lewpiper lewpiper 220 Jun 14 05:22 .bash_logout
-rw-r--r-- 1 lewpiper lewpiper 3771 Jun 14 05:22 .bashrc
drwx------ 4 lewpiper lewpiper 4096 Jun 14 06:09 .cache
drwxrwxr-x 3 lewpiper lewpiper 4096 Jun 14 06:37 .local
drwxr-xr-x 8 lewpiper www-data 4096 Jun 14 06:36 Portfolio
-rw-r--r-- 1 lewpiper lewpiper 807 Jun 14 05:22 .profile
drwx------ 2 lewpiper lewpiper 4096 Jun 15 06:03 .ssh
-rw-r--r-- 1 lewpiper lewpiper 0 Jun 14 05:33 .sudo_as_admin_successful
以下は、ホームディレクトリの ssh フォルダ内のファイルの権限です。
lewpiper@django-server:~/.ssh$ ls -la
total 12
drwx------ 2 lewpiper lewpiper 4096 Jun 15 06:03 .
drwxrwxrwx 6 lewpiper lewpiper 4096 Jun 14 06:37 ..
-rw------- 1 lewpiper lewpiper 749 Jun 14 05:32 authorized_keys
• 3 番目に、サーバーにファイアウォールを設定しました。現在許可されている接続タイプは次のとおりです。
lewpiper@django-server:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
• 最後に、ファイルにアクセスして/etc/ssh/sshd_config
、SSH の問題の原因を突き止めるまで、PasswordAuthentication を再度有効にしました。これで、Linode が提供する Web 版を使用せずにログインできるようになりました。ただし、これを実行した後、sudo systemctl restart sshd
このファイルを編集するときにチュートリアルで実行するように指示されているように、次のコマンドを使用してサーバーの ssh サービスを再起動しようとしました。代わりにエラーが発生しました。Failed to restart sshd.service: Unit sshd.service not found.
昨晩もサーバーのセットアップ中にこのメッセージを受け取ったことを思い出しました。Google で簡単に検索したところ、サービスの名前が変更されたことが判明したので、試してみたところsudo systemctl restart ssh
、昨晩はうまくいったようですが、これは間違っていたのではないかと思います。
以下は、現在使用している sshd_config ファイルですが、問題となっている生成された rsa キーを使用せずにログインできるように、パスワード認証を yes に変更したことに注意してください。
LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
質問:
質問は 2 つあります。1 つは、この問題の原因をより適切にトラブルシューティングするために私が実行できること、または試すことができることを見逃したでしょうか。2 つ目は、他に推奨されるトラブルシューティングがない場合は、サーバー上の authorized_keys ファイルを削除して、サーバーに安全にコピーしてみるだけでよいのでしょうか。注: これが問題であると確信していないため、それが機能するかどうかも確信していません。私の直感では、見落としているものがあるか、Failed to restart sshd.service: Unit sshd.service not found.
先ほど述べたメッセージにさらに何かがある可能性があります。また、サーバーを再起動するだけでよいという考えはありますか。奇妙に聞こえますが、ファイアウォールなどがリロードされ、すべてが正常になる場合があります。