在 Linux 下实现 SFTP 免密登录,本质就是使用 SSH 密钥认证(SFTP 基于 SSH)。下面是最常见、最标准的做法。
在本地机器执行:
ssh-keygen -t rsa -b 4096
一路回车即可(默认生成在):
~/.ssh/id_rsa # 私钥
~/.ssh/id_rsa.pub # 公钥
✅ 如果想设置密码(passphrase)可以不留空,但那就不是完全“无交互”了。
ssh-copy-id user@server_ip
输入一次密码后,以后就免密了。
如果没 ssh-copy-id:
scp ~/.ssh/id_rsa.pub user@server_ip:/tmp/
在服务器上执行:
mkdir -p ~/.ssh
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
sftp user@server_ip
✅ 不再提示输入密码,就说明成功。
服务器上必须保证:
~ 权限不能是 777
~/.ssh 权限 700
~/.ssh/authorized_keys 权限 600
修复命令:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
检查服务器 /etc/ssh/sshd_config:
PubkeyAuthentication yes
PasswordAuthentication no # 可以 later 关
修改后重启 SSH:
systemctl restart sshd
restorecon -Rv ~/.ssh
如果你只想让用户 SFTP,不能 SSH 登录:
Match User sftpuser
ChrootDirectory /data/sftp
ForceCommand internal-sftp
sftp user@server <<EOF
put file.txt /remote/path/
bye
EOF
如果你愿意,可以告诉我:
我可以直接给你一套完整配置。