我在尝试设置时遇到错误,因此我可以使用笔记本电脑连接到 HTPC,我已按照这来自 ubuntu 帮助的指南
这是我在远程主机上的 ~/.ssh/ 权限
-rw------- 1 htpc htpc 398 Feb 29 15:16 authorized_keys
-rw------- 1 htpc htpc 1675 Feb 29 15:15 id_rsa
-rw-r--r-- 1 htpc htpc 391 Feb 29 15:15 id_rsa.pub
这是远程主机上的 /etc/ssh/sshd_config 文件
# Authentication:
LoginGraceTime 120
PermitRootLogin without-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
当我尝试通过 SSH 从本地机器进入时,即使我的公共 ssh 密钥位于远程主机上的 authorized_keys 内,它仍然会要求我输入密码。
从本地机器连接到 htpc 时的调试日志
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /home/mikeyr/.ssh/id_rsa
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/mikeyr/.ssh/id_dsa
debug1: Trying private key: /home/mikeyr/.ssh/id_ecdsa
debug1: Trying private key: /home/mikeyr/.ssh/id_ed25519
debug1: Next authentication method: password
我也尝试过在我的路由器上进行操作,并且没有任何问题。
答案1
请注意,您的/etc/ssh/sshd_config
包含以下行
StrictModes yes
指定 sshd 是否应在接受登录之前检查文件模式以及用户文件和主目录的所有权。这通常是可取的,因为新手有时会意外地将其目录或文件置于可写入状态。默认值为“是”。
换句话说,~
远程主机上的主目录应该由您拥有和组拥有(在这种情况下,这可能意味着所有者htpc
和组htpc
),并且只能由您(也可能是您的组)写入:这意味着最后一列(“世界”)没有写入权限
$ ls -la ~/
drwxr-xr-x 41 htpc htpc .
请注意,最后一部分说的是r-x
(不是世界可写的),而不是rwx
。
如果最后一个三元组有一个rwx
,则需要删除写权限:
chmod a-w ~
~/.ssh
对于文件夹和也类似~/.ssh/authorized_keys
。我建议chmod 700 ~/.ssh
仅授予您自己对文件夹和chmod 600 ~/.ssh/authorized_keys
文件的访问权限。
(另见https://unix.stackexchange.com/a/16981/5477了解更多服务器端调试工具)
答案2
最好验证目标服务器/etc/ssh/sshd_config
以检查将源公钥复制到何处(即authorized_keys
目标服务器中的位置)
就我而言/etc/ssh/keys/%u/authorized_keys2
/etc/ssh/sshd_config
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile /etc/ssh/keys/%u/authorized_keys2
#AuthorizedPrincipalsFile none
authorized_keys
因此,将您的复制到相应位置后,尝试 ssh 无密码连接。
答案3
也许在生成 ssh-key 时您已为密钥添加了密码。
生成新的 ssh 密钥ssh-keygen
Enter passphrase (empty for no passphrase):
<- 按回车键,默认(无密码)。
然后ssh-copy-id user@host