我正在尝试从我的本地机器(也运行 Ubuntu 12.04 LTS)连接到 Linode(运行 Ubuntu 12.04 LTS)
我在本地计算机上创建了私钥和公钥,并将公钥复制到我的 Linode 的 authorized_keys 文件中。但是,每当我尝试 ssh 到我的 Linode 时,都会收到错误消息Permission denied (publickey)
。
这与我的 Linode 上的 ssh 设置方式无关,因为我可以使用密钥认证从我的 Windows 机器通过 ssh 连接到它。
在.ssh
我的本地 Ubuntu 计算机上的目录中,我有我的id_rsa
和id_rsa.pub
文件。我需要在本地计算机上创建一个 authorized_keys 文件吗?
编辑:这是我运行时得到的结果ssh -vvv -i id_rsa [youruser]@[yourLinode]
:
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: id_rsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
答案1
公钥认证
设置您的客户端
生成您的密钥。
ssh-keygen
配置 ssh 以使用密钥。
vim ~/.ssh/config
你的配置文件应该有类似下面的内容:
Host SERVERNAME Hostname ip-or-domain-of-server User USERNAME PubKeyAuthentication yes IdentityFile ./path/to/key
您可以添加
IdentitiesOnly yes
以确保在身份验证期间ssh
使用指定的IdentityFile
密钥文件而不使用其他密钥文件。设置IdentitiesOnly
可防止身份验证失败,否则ssh
将尝试使用多个密钥登录。设置此项也被认为更安全,因为您不会泄露有关您安装的其他密钥的信息,并且保持不同访问级别之间的密钥分离。将您的密钥复制到您的服务器。
ssh-copy-id -i /path/to/key.pub SERVERNAME`
例如,
ssh-copy-id -i ~/.ssh/id_res.pub -p 22 [email protected]
故障排除
- 使用“-vvv”选项
- 确保服务器拥有您的公钥 (.pub)。
- 确保您的 IdentiyFile 指向您的私钥。
- 确保您的
.ssh
目录具有 700 个权限并且其中的文件具有 600 个权限。ssh-keygen
将为您创建具有适当权限的文件和目录
tail -f /var/log/auth.log
(在服务器上)并在您尝试登录时监控错误- 如果您有许多密钥文件,请尝试
IdentitiesOnly yes
限制身份验证以使用单个指定的密钥。
答案2
有时问题来自权限和所有权。例如,如果您想以 root 身份登录,/root
则.ssh
和authorized_keys
必须属于 root。否则,sshd 将无法读取它们,因此无法判断用户是否有权登录。
在你的主目录中:
chown -R your_user:your_user .ssh
至于权利,700 为.ssh
,600 为authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
答案3
我遇到的问题是它在客户端使用了错误的密钥。我已将 id_rsa 和 id_rsa.pub 重命名为其他名称。您可以将它们重命名为默认名称,或者在发出 ssh 命令时,像这样使用它
ssh -i ~/.ssh/private_key username@host
答案4
还要检查 的值,如果是,则将PasswordAuthentication
其更改为。之后不要忘记重新启动 ssh 服务。/etc/ssh/sshd_config
no
yes