在 Linux 下实现 SFTP 免密登录,本质就是 SSH 免密登录(基于密钥认证)。SFTP 只是 SSH 的一个子协议,所以配置好 SSH 密钥就行。
下面是最常用、最标准的做法。
在本地机器执行:
ssh-keygen -t rsa -b 4096
一路回车即可(也可设置密钥密码,但那就不是完全“免密”了)。
生成后通常在:
~/.ssh/id_rsa # 私钥(自己留着)
~/.ssh/id_rsa.pub # 公钥(放到服务器)
ssh-copy-id user@server_ip
输入一次密码后,以后就免密了。
在客户端查看公钥:
cat ~/.ssh/id_rsa.pub
在服务器上:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
# 粘贴公钥内容
chmod 600 ~/.ssh/authorized_keys
sftp user@server_ip
如果不再提示输入密码,说明成功。
服务器端必须严格:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
restorecon -Rv ~/.ssh
服务器 /etc/ssh/sshd_config 中确认:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后重启 SSH:
systemctl restart sshd
如果你希望该用户只能 SFTP,不能 SSH 登录:
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication no
ChrootDirectory /home/sftpuser
例如:
sftp -i ~/.ssh/id_rsa user@server <<EOF
put file.txt
bye
EOF
如果你有 具体系统(CentOS / Ubuntu / Alpine) 或 使用场景(脚本 / 自动化 / 容器),我可以给你更精确的配置示例。