温馨提示×

centos sftp怎样用密钥

小樊
47
2026-10-23 13:14:21
栏目: 智能运维

在 CentOS 上使用 SFTP 密钥登录(即免密登录)一般步骤如下,适用于 CentOS 7 / 8 / Stream。


一、在客户端生成密钥(你的电脑)

ssh-keygen -t rsa -b 4096

一路回车即可,默认生成:

  • 私钥:~/.ssh/id_rsa
  • 公钥:~/.ssh/id_rsa.pub

也可使用 ed25519(更安全):

ssh-keygen -t ed25519

二、把公钥传到 CentOS 服务器

方法 1:使用 ssh-copy-id(最简单)

ssh-copy-id user@server_ip

输入一次密码后,公钥会自动写入服务器:

~/.ssh/authorized_keys

方法 2:手动复制(无 ssh-copy-id)

在客户端执行:

cat ~/.ssh/id_rsa.pub

在服务器上:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
# 粘贴公钥
chmod 600 ~/.ssh/authorized_keys

三、服务器 SSH 配置(CentOS)

编辑配置文件:

sudo vi /etc/ssh/sshd_config

确保以下配置:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

(可选)禁止密码登录(更安全):

PasswordAuthentication no

重启 SSH:

sudo systemctl restart sshd

四、使用 SFTP 密钥登录

命令行方式

sftp -i ~/.ssh/id_rsa user@server_ip

FileZilla / WinSCP

  • 协议:SFTP
  • 登录类型:密钥文件
  • 选择私钥:id_rsa

五、常见问题

1. 权限错误导致无法登录

服务器上必须保证:

chmod 700 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2. SELinux 问题

restorecon -Rv ~/.ssh

3. 防火墙

确保 22 端口开放:

sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload

六、仅允许 SFTP(禁止 SSH 登录,可选)

在 /etc/ssh/sshd_config 添加:

Match User sftpuser
    ChrootDirectory /data/sftp
    ForceCommand internal-sftp
    PasswordAuthentication no

然后重启 sshd。


如果你需要 只给某个用户 SFTP 权限但不给 shell,或者 用非 root 用户 + chroot,我可以给你完整示例。

0 踩