前言
若需要连接一台服务器,我们常使用 ssh 客户端,如 xshell 等软件连接服务器,或是使用 vscode 的 Remote - SSH 插件直接连接服务器进行代码开发。频繁地使用密码登录服务器难免有些麻烦,因此我们常常通过配置密钥实现免密登录服务器。本文记录了为服务器的root用户与普通用户设置免密登录的过程以及踩的坑。
本文主要记录过程遇到的问题以及解决方法,并非教程。因此过程记录不会太详细,关于免密登录的基本过程可以查阅其他资料
一、问题背景
- 在租用了一台腾讯云的服务器之后,创建了一个名为
gopher
的普通用户 - 在腾讯云控制台绑定密钥后root用户可以实现免密登录。
- 创建密钥或使用现有密钥
- 由于腾讯云的设定,在绑定密钥后就
无法使用密码登录
了
这是由于在完成密钥绑定之后会将/etc/ssh/sshd_config
文件PasswordAuthentication字段设置为noPasswordAuthentication no
- 创建密钥或使用现有密钥
综上所述,此时可以免密登录root账户但是无法使用密码登录gopher
用户,导致gopher
处于无法登录的状态。因此希望给gopher
用户也配置上免密登录。
修正:不知道为啥重装了一次系统之后再进行同样的操作,root 用户实现了免密登录之后, gopher 可以使用密码登录。那么实现 gopher 用户的免密登录就不需要用 root 用户去操作了,直接用 gopher 用户登录导入公钥即可。
二、操作步骤
1. 将root用户公钥复制到gopher用户目录下
登录root用户
执行下面的命令(示例):
# 创建文件夹
cd /home/gopher
mkdir .ssh
# 把公钥复制到gopher用户目录的.ssh目录下
cp /root/.ssh/authorized_keys /home/gopher/.ssh/authorized_keys
然后尝试直接登录gopher用户
ssh gopher@aaa.bbb.ccc.ddd
# 提示权限问题
Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
这里问题出现了
,为什么给用户配置了密钥对还是无法登录呢?
2. 给gopher用户读authorized_keys的权限
后面简单思考了一下,这是因为用户目录下的公钥文件是属于root用户的,gopher用户没有权限读,因此只需要给gopher用户读的权限就好了,因此执行下面的代码
cd /home/gopher/.ssh
chmod 644 authorized_keys
这样就可以免密登录gopher
用户了。
总结
出现的问题主要是因为腾讯云的策略使得我们再绑定了密钥之后就无法使用密码登录了,因此必须给普通用户也配置免密登录,通过免密登录的基本原理,很容易就想到把公钥复制到用户目录下,但是遇到了文件权限的问题导致免密登录配置失败,给了权限之后就可以正常登录了。