CentOS7环境下如何上传SSH公钥至SFTP服务器实现免密登录
嗨,既然两台都是CentOS7,而且SFTP本身是基于SSH协议的,那实现免密认证的思路和SSH免密完全一致,我给你两种实用方法,挑你顺手的来:
方法1:用
ssh-copy-id一键搞定(最推荐) CentOS7默认自带这个工具,能帮你自动完成公钥复制和权限配置,省很多事:
- 因为你已经在机器B上生成了密钥对,直接在机器B的终端执行命令:
要是你的SFTP服务器用的不是默认的22端口,记得加ssh-copy-id -i ~/.ssh/id_rsa.pub sftp_user@机器A的IP地址或主机名-p参数指定端口:ssh-copy-id -i ~/.ssh/id_rsa.pub -p 自定义端口号 sftp_user@机器A的IP地址或主机名 - 执行后会提示你输入机器A上
sftp_user的密码,输入一次就搞定了——工具会自动把公钥追加到机器A的~/.ssh/authorized_keys文件里,还会自动设置正确的文件权限(这步很重要,手动配置容易踩坑)
方法2:手动复制公钥(当
ssh-copy-id不可用时) 如果机器B上没装ssh-copy-id,或者网络环境限制没法用,可以手动操作:
- 在机器B上查看并复制公钥内容:
把输出的一长串内容完整复制下来(别漏了开头的cat ~/.ssh/id_rsa.pubssh-rsa和结尾的注释) - 用密码登录到机器A,先确保
.ssh目录存在并设置正确权限:mkdir -p ~/.ssh && chmod 700 ~/.ssh - 把复制的公钥内容追加到
authorized_keys文件里:
可以直接用echo命令,比如:
或者用vim打开文件粘贴:echo "你复制的公钥内容" >> ~/.ssh/authorized_keysvim ~/.ssh/authorized_keys,粘贴后保存退出 - 必须设置
authorized_keys的权限,否则SSH会拒绝免密:
额外注意:如果机器A上chmod 600 ~/.ssh/authorized_keyssftp_user的主目录权限给了其他用户写权限,也要改过来:chmod 755 ~
最后验证和注意事项
- 测试免密:在机器B上执行
sftp sftp_user@机器A的IP,如果不用输入密码直接进入SFTP交互环境,就说明成功了 - 检查机器A的SSH配置:如果免密失败,打开
/etc/ssh/sshd_config,确保PubkeyAuthentication yes(默认是开启的,但如果之前改过要确认),改完后重启sshd服务:systemctl restart sshd - 如果你给SFTP用户配置了Chroot目录(限制用户只能访问指定目录),要确保
.ssh目录和authorized_keys文件的位置符合Chroot要求:比如Chroot目录的所有者必须是root,权限为755,用户的.ssh目录要放在Chroot目录下的用户主目录里,且权限也要正确
内容的提问来源于stack exchange,提问作者kick07




