Pat*_*tle 197 server ssh permissions
我正在尝试从我的本地机器(也运行 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).
Run Code Online (Sandbox Code Playgroud)
ear*_*Lon 128
设置您的客户端
生成您的密钥。
ssh-keygen
Run Code Online (Sandbox Code Playgroud)
配置 ssh 以使用密钥。
vim ~/.ssh/config
Run Code Online (Sandbox Code Playgroud)
将您的密钥复制到您的服务器。
ssh-copy-id -i /path/to/key.pub SERVERNAME`
Run Code Online (Sandbox Code Playgroud)
步骤 2 中的配置文件应具有类似于以下内容的内容:
Host SERVERNAME
Hostname ip-or-domain-of-server
User USERNAME
PubKeyAuthentication yes
IdentityFile ./path/to/key
Run Code Online (Sandbox Code Playgroud)
您可以添加IdentitiesOnly yes
以确保在身份验证期间ssh
使用指定的IdentityFile
而不是其他密钥文件。设置IdentitiesOnly
可防止发生失败的身份验证,ssh
否则将尝试使用多个密钥登录。设置此项也被认为更安全,因为您不会泄露有关您已安装的其他密钥的信息,并在不同访问级别之间保持您的密钥的分离。
故障排除
.ssh
目录有 700 个,其中的文件有 600 个权限。
ssh-keygen
将为您创建具有适当权限的文件和目录tail -f /var/log/auth.log
(在服务器上)并在您尝试登录时监控错误IdentitiesOnly yes
将身份验证限制为使用单个指定的密钥。小智 100
有时问题来自权限和所有权。举例来说,如果你想以root身份登录,/root
,.ssh
而且authorized_keys
必须属于根。否则,sshd 将无法读取它们,因此无法判断用户是否有权登录。
在您的主目录中:
chown -R your_user:your_user .ssh
Run Code Online (Sandbox Code Playgroud)
至于权利,700为.ssh
和600为authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
小智 25
我遇到的问题是它在客户端上使用了错误的密钥。我已将 id_rsa 和 id_rsa.pub 重命名为其他名称。您可以将它们重命名回默认值,或者在发出 ssh 命令时,像这样使用它
ssh -i ~/.ssh/private_key username@host
Run Code Online (Sandbox Code Playgroud)
gun*_*ert 18
你不需要authorized_keys
你的客户。
您必须告诉 ssh-client 实际使用您生成的密钥。有几种方法可以做到这一点。仅用于测试类型ssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode]
。每次要连接到服务器时,您都必须提供密码。
如果有效,您可以将密钥添加到ssh-agent
with ssh-add .ssh/id_rsa
(您只需为此提供一次密码,只要您不注销/重新启动,它就可以工作)
ima*_*man 17
还要检查PasswordAuthentication
in 的值/etc/ssh/sshd_config
以及是否将其no
更改为yes
. 之后不要忘记重新启动 ssh 服务。
小智 7
还要确保用户的主目录(在服务器上)实际上属于 ssh 进入的用户(在我的情况下设置为 root:root)。
本来应该:
sudo chown username:username /home/username;
Run Code Online (Sandbox Code Playgroud)
小智 7
另一个可能的原因可能AllowedUsers
是/etc/ssh/sshd_conf
. 注意:该列表是空格分隔的(不是逗号分隔的),因为我通过惨痛的教训才了解到。
AllowUsers user1 user2 user3
Run Code Online (Sandbox Code Playgroud)
如果您可以独立访问机器A 和机器B(例如从机器C),则以下方法可能有效。
\n\n如果 ssh-copy-id 不起作用,则可以禁用密码身份验证。以下是解决方法。
\n\n将机器 A 的公钥包含在机器 B 的授权密钥(即 ~/.ssh/authorized_keys)中将允许您从机器 A 进行 ssh。这也适用于 scp。
\n\n使用以下命令生成密钥对后:ssh-keygen
在机器A上,执行cat ~/.ssh/id_rsa.pub
示例输出:
\n\n\n\n\n\n
ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA
复制打印的密钥(\xe2\x8c\x98 Command+C或CRTL+ ),然后将其添加到machineBC上的 ~/.ssh/authorized_keys 文件中。
\n\n例如,在machineB上执行以下命令:
\n\n\n\n\n
echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys
我最近在使用 Web 服务器时遇到了这个问题。
我通常将所有服务器上的授权密钥列表保存在~/.ssh/authorized_keys2
. 根据我的经验,sshd
会寻找~/.ssh/authorized_keys
或~/.ssh/authorized_keys2
默认。
在我的网络服务器的情况下,/etc/ssh/sshd_config
有这条线
AuthorizedKeysFile %h/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)
代替
AuthorizedKeysFile %h/.ssh/authorized_keys2
Run Code Online (Sandbox Code Playgroud)
我应用了后者,重新启动了我的 ssh 守护进程,并解决了我使用公钥登录 ssh 的问题。
归档时间: |
|
查看次数: |
1151686 次 |
最近记录: |