下面以 CentOS 7/8/Stream 为例,一步一步说明 SFTP 使用密钥登录 的配置方法(基于 OpenSSH)。
在 你自己的电脑(客户端) 上执行:
ssh-keygen -t rsa -b 4096
一路回车即可,默认会生成:
~/.ssh/id_rsa~/.ssh/id_rsa.pub⚠️ 私钥不要给别人
ssh-copy-id user@服务器IP
输入一次密码后,公钥会自动写入服务器:
/home/user/.ssh/authorized_keys
在客户端查看公钥:
cat ~/.ssh/id_rsa.pub
在服务器上:
mkdir -p /home/user/.ssh
vi /home/user/.ssh/authorized_keys
粘贴公钥内容,然后:
chmod 700 /home/user/.ssh
chmod 600 /home/user/.ssh/authorized_keys
chown -R user:user /home/user/.ssh
编辑 SSH 配置文件:
vi /etc/ssh/sshd_config
确认或修改以下配置:
PubkeyAuthentication yes
PasswordAuthentication no
重启 SSH:
systemctl restart sshd
⚠️ 操作前确保密钥能登录,否则会无法连接
如果用户 只能 SFTP,不能登录系统:
useradd sftpuser
vi /etc/ssh/sshd_config
添加:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
X11Forwarding no
AllowTcpForwarding no
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
重启 SSH:
systemctl restart sshd
sftp -i ~/.ssh/id_rsa sftpuser@服务器IP
或使用 FileZilla:
id_rsaPermissions 0777 for '.ssh' are too open
解决:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
查看服务器日志:
tail -f /var/log/secure
如果你需要 多用户 SFTP + 不同目录权限 或 Docker / SFTP 服务配置,也可以继续问我。