首页 帮助中心 非root用户怎么配置SSH密钥登录?普通用户权限设置教程!
非root用户怎么配置SSH密钥登录?普通用户权限设置教程!
时间 : 2026-09-08 14:02:22
编辑 : 华纳云
阅读量 : 8

  用root账号直接操作服务器,在生产环境里是个大忌——权限太大,一不小心删错文件、改错配置,后果可能很严重。正规的做法是创建一个普通用户,给它配上sudo权限,日常操作都用这个普通账号登录,需要管理员权限时再通过sudo临时提权。

  但普通用户配置SSH密钥登录,跟root用户不太一样——最大的坑在于权限。很多人在root下配得好好的,换到普通用户就死活连不上,折腾半天发现就是文件权限没设对。这篇文章把非root用户配置SSH密钥登录的完整流程拆开讲,每一步都写清楚,照着做就能通。

  准备工作:目标是什么?

  最终要实现的效果:在本地电脑上生成一对密钥(公钥和私钥),把公钥放到服务器上某个普通用户的家目录里,然后就能用私钥直接登录这个普通用户账号,不需要输密码。

  整个过程可以分为三步:创建普通用户 → 生成并部署密钥 → 配置权限并测试。

  第一步:在服务器上创建普通用户

  如果你手上还没有一个普通用户账号,先用root登录服务器,创建一个。

  创建一个用户,同时自动生成家目录:

useradd -m your_username

  -m参数会同时创建/home/your_username这个家目录,省得后面再手动建。

  设置登录密码(这一步必须做,即使后面用密钥登录,首次连接也需要密码验证身份):

passwd your_username

  系统会提示输入两次密码。注意:这个密码是第一次用SSH连接时验证身份用的,密钥配置好之后就不再需要了。

  给这个用户添加sudo权限(可选但强烈推荐):

usermod -aG wheel your_username   # CentOS/Rocky
usermod -aG sudo your_username    # Ubuntu/Debian

  有了sudo权限,普通用户就能在需要时临时提权执行管理员命令,不用动不动切root。

  切换到普通用户,后续操作都在这个用户身份下执行:

su - your_username
cd ~

  第二步:生成SSH密钥对

  检查.ssh目录是否存在。如果第一次用这个用户登录,家目录下可能没有.ssh文件夹,先建一个:

mkdir -p ~/.ssh

  生成密钥对:

ssh-keygen -t ed25519 -C "your_email@example.com"

  -t ed25519是目前最推荐的算法,比RSA更快更安全。如果系统太老不支持Ed25519,可以用ssh-keygen -t rsa -b 4096替代。

  一路按回车,会提示你输入passphrase(私钥保护密码)。强烈建议设一个——即使私钥文件被人偷了,没有passphrase也用不了。

  执行完后,~/.ssh/目录下会生成两个文件:

  id_ed25519:私钥,绝对不能给别人看,也不能传到服务器上

  id_ed25519.pub:公钥,要放到服务器上的authorized_keys文件里

  第三步:把公钥加到授权文件里

  创建authorized_keys文件:

touch ~/.ssh/authorized_keys

  把公钥追加进去:

cat ~/.ssh/id_ed25519.pub >> ~/.ssh/authorized_keys

  这条命令会把刚才生成的公钥内容写入到授权文件里,一行一个公钥,SSH就是靠这个文件来识别谁能登录的。

  第四步:设置正确的权限(最关键的一步)

  这是非root用户配置SSH密钥登录时最容易踩的坑。SSH服务对.ssh目录和authorized_keys文件的权限有严格要求——太开放了它反而拒绝使用,因为它担心文件被其他用户篡改。

  设置.ssh目录权限为700:

chmod 700 ~/.ssh

  只有文件所有者(你自己)可以读写执行,其他用户没有任何权限。

  设置authorized_keys文件权限为600:

chmod 600 ~/.ssh/authorized_keys

  只有所有者可以读写,其他用户连看都看不了。

  如果私钥也要用ssh -i方式指定,也把私钥权限设成600:

chmod 600 ~/.ssh/id_ed25519

  验证一下权限是否正确:

ls -la ~/.ssh/

  应该看到:

  drwx------(700)对应.ssh目录

  -rw-------(600)对应authorized_keysid_ed25519

  为什么权限这么重要? 如果.ssh目录权限是drwxrwxr-x(775)或者authorized_keys权限是-rw-rw-r--(664),SSH会直接忽略公钥认证,然后提示你输入密码。这个坑在root用户下不太明显,到了普通用户这里就特别容易中招。

  第五步:从客户端测试连接

  回到你本地电脑,执行:

ssh -i /path/to/private_key your_username@你的服务器IP

  如果是第一次连接,系统会提示确认服务器指纹,输入yes即可。

  登录成功后,用whoami确认当前身份是你创建的普通用户,而不是root。

  如果提示“Permission denied (publickey)”,检查几件事:

  1. ~/.ssh目录权限是不是drwx------(700)

  2. ~/.ssh/authorized_keys权限是不是-rw-------(600)

  3. 公钥是否真的写进了authorized_keys文件,有没有拼写错误或换行问题。

  第六步(可选):禁用root登录和密码登录

  密钥验证通过之后,可以考虑进一步加固SSH配置。

  编辑/etc/ssh/sshd_config(需要sudo权限):

sudo vi /etc/ssh/sshd_config

  找到下面几行,改成:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

  重启SSH服务让配置生效:

sudo systemctl restart sshd

  重要提醒:改这个之前,务必确保你已经能用普通用户的密钥登录成功。否则把自己锁在门外就麻烦了。

  总结:非root用户配置SSH密钥登录,流程跟root用户差不多,区别就在于权限要求更严格、更敏感。把权限这道关过了,普通用户的密钥登录就顺了。

相关内容
客服咨询
7*24小时技术支持
技术支持
渠道支持