You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CentOS7环境下如何上传SSH公钥至SFTP服务器实现免密登录

嗨,既然两台都是CentOS7,而且SFTP本身是基于SSH协议的,那实现免密认证的思路和SSH免密完全一致,我给你两种实用方法,挑你顺手的来:

方法1:用ssh-copy-id一键搞定(最推荐)

CentOS7默认自带这个工具,能帮你自动完成公钥复制和权限配置,省很多事:

  • 因为你已经在机器B上生成了密钥对,直接在机器B的终端执行命令:
    ssh-copy-id -i ~/.ssh/id_rsa.pub sftp_user@机器A的IP地址或主机名
    
    要是你的SFTP服务器用的不是默认的22端口,记得加-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,或者网络环境限制没法用,可以手动操作:

  1. 在机器B上查看并复制公钥内容:
    cat ~/.ssh/id_rsa.pub
    
    把输出的一长串内容完整复制下来(别漏了开头的ssh-rsa和结尾的注释)
  2. 用密码登录到机器A,先确保.ssh目录存在并设置正确权限:
    mkdir -p ~/.ssh && chmod 700 ~/.ssh
    
  3. 把复制的公钥内容追加到authorized_keys文件里:
    可以直接用echo命令,比如:
    echo "你复制的公钥内容" >> ~/.ssh/authorized_keys
    
    或者用vim打开文件粘贴:vim ~/.ssh/authorized_keys,粘贴后保存退出
  4. 必须设置authorized_keys的权限,否则SSH会拒绝免密:
    chmod 600 ~/.ssh/authorized_keys
    
    额外注意:如果机器A上sftp_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

火山引擎 最新活动