在 Linux 上配置 SFTP 使用密钥登录(而非密码),一般步骤如下,适用于 OpenSSH Server(绝大多数 Linux 发行版)。
在你自己的电脑 / 客户端执行:
ssh-keygen -t rsa -b 4096
按提示操作(可设密码,也可直接回车):
~/.ssh/id_rsa~/.ssh/id_rsa.pub在客户端执行(替换 user 和 host):
ssh-copy-id user@host
如果 ssh-copy-id 不可用,可手动操作:
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
在服务器上确保权限正确:
chmod 700 ~/.ssh
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@host
sftp -P 2222 -i ~/.ssh/id_rsa user@host
若希望用户只能用 SFTP,不能 SSH 登录:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
PasswordAuthentication no
注意:
ChrootDirectory 属主必须是 root755sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
| 问题 | 原因 |
|---|---|
| 还是要密码 | 公钥未写入 authorized_keys |
| Permission denied | .ssh 或 authorized_keys 权限不对 |
| 无法登录 | SELinux / 家目录加密 |
| sftp 连不上 | ForceCommand internal-sftp 配置错误 |
查看日志:
sudo tail -f /var/log/secure
# 或
sudo journalctl -u sshd -f
如果你告诉我:
我可以给你更精确的配置示例。