远程系统无用户主目录时,如何通过SSH公钥登录?
解决无主目录用户的SSH公钥登录问题
好问题!这种没有主目录的用户配置SSH公钥确实有点绕,我来给你梳理几个可行的方向:
1. 先检查远程SSHD的全局配置
首先,你可以先通过密码登录到FOO用户(假设现在还能密码登录),执行这条命令查看SSHD的公钥文件路径配置:
grep AuthorizedKeysFile /etc/ssh/sshd_config
如果输出里除了默认的.ssh/authorized_keys,还有类似/etc/ssh/authorized_keys/%u这样的绝对路径(%u会替换为用户名),那你可以尝试把公钥写入对应的文件,比如/etc/ssh/authorized_keys/FOO。不过要注意:
- 这个文件的权限必须是600,所有者必须是FOO
- 如果这个目录(比如
/etc/ssh/authorized_keys/)你没有写入权限,那只能找管理员帮忙操作
2. 请求管理员创建主目录
这是最直接的解决方案。因为SSH默认的公钥路径依赖用户主目录,你可以联系管理员为FOO创建主目录并配置正确的权限:
# 管理员需要执行的命令 mkdir /home/FOO chown FOO:FOO /home/FOO mkdir /home/FOO/.ssh chmod 700 /home/FOO/.ssh touch /home/FOO/.ssh/authorized_keys chmod 600 /home/FOO/.ssh/authorized_keys
之后你就可以把公钥上传到/home/FOO/.ssh/authorized_keys里,正常使用公钥登录了。
3. 让管理员为FOO指定自定义公钥路径
如果管理员不愿意创建主目录,可以请他们修改/etc/ssh/sshd_config,添加一个针对FOO用户的匹配规则,指定一个你有写入权限的绝对路径来存放公钥:
Match User FOO AuthorizedKeysFile /path/to/your/writable/dir/FOO_authorized_keys
比如可以选一个FOO有写权限的目录(比如某个应用目录或者管理员分配的专用目录),然后把公钥放到指定文件里,同样要确保文件权限是600,目录权限是700,所有者是FOO。
关键注意事项
不管用哪种方案,SSH对权限要求非常严格:
- 公钥文件(authorized_keys)必须是600权限,不能让其他用户读写
- 公钥文件所在的目录必须是700权限,同样不能让其他用户有写入权限
- 文件和目录的所有者必须是FOO用户,否则SSHD会因为安全原因拒绝读取公钥
内容的提问来源于stack exchange,提问作者ccc
相关产品推荐
相关产品推荐

