在 Linux 上配置 SFTP 使用密钥登录(而非密码),通常步骤如下:
在**你自己的机器(客户端)**执行:
ssh-keygen -t rsa -b 4096
一路回车即可(可设置密码短语 passphrase,也可留空)。
生成后:
~/.ssh/id_rsa~/.ssh/id_rsa.pub在服务器上(假设用户为 sftpuser):
# 登录服务器后
mkdir -p ~/.ssh
chmod 700 ~/.ssh
在客户端执行(推荐方式):
ssh-copy-id sftpuser@服务器IP
或手动复制:
cat ~/.ssh/id_rsa.pub | ssh sftpuser@服务器IP "cat >> ~/.ssh/authorized_keys"
然后在服务器上:
chmod 600 ~/.ssh/authorized_keys
编辑服务器上的:
/etc/ssh/sshd_config
确保或添加:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 禁止密码登录(可选但推荐)
如果 只允许 SFTP(禁止 SSH shell),可添加:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
PasswordAuthentication no
AllowTcpForwarding no
注意:
ChrootDirectory目录必须 root 所有且 755 权限
重启 SSH:
systemctl restart sshd
客户端执行:
sftp sftpuser@服务器IP
如指定私钥:
sftp -i ~/.ssh/id_rsa sftpuser@服务器IP
✅ 权限错误(最常见):
~/.ssh → 700authorized_keys → 600✅ SELinux(CentOS/RHEL):
restorecon -Rv ~/.ssh
如果你需要 Chroot 多用户 SFTP、只传文件不能登录、或 Windows 客户端(FileZilla / WinSCP)配置,可以继续问我。