在 CentOS 上使用 SFTP 密钥登录(即免密登录)一般步骤如下,适用于 CentOS 7 / 8 / Stream。
ssh-keygen -t rsa -b 4096
一路回车即可,默认生成:
~/.ssh/id_rsa~/.ssh/id_rsa.pub也可使用
ed25519(更安全):ssh-keygen -t ed25519
ssh-copy-id user@server_ip
输入一次密码后,公钥会自动写入服务器:
~/.ssh/authorized_keys
在客户端执行:
cat ~/.ssh/id_rsa.pub
在服务器上:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
# 粘贴公钥
chmod 600 ~/.ssh/authorized_keys
编辑配置文件:
sudo vi /etc/ssh/sshd_config
确保以下配置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
(可选)禁止密码登录(更安全):
PasswordAuthentication no
重启 SSH:
sudo systemctl restart sshd
sftp -i ~/.ssh/id_rsa user@server_ip
id_rsa服务器上必须保证:
chmod 700 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
restorecon -Rv ~/.ssh
确保 22 端口开放:
sudo firewall-cmd --add-service=ssh --permanent
sudo firewall-cmd --reload
在 /etc/ssh/sshd_config 添加:
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
PasswordAuthentication no
然后重启 sshd。
如果你需要 只给某个用户 SFTP 权限但不给 shell,或者 用非 root 用户 + chroot,我可以给你完整示例。