在 Linux 下实现 SFTP 免密登录,本质就是配置 SSH 公钥认证(SFTP 基于 SSH)。下面是常见、可靠的做法。
在**本地机器(客户端)**执行:
ssh-keygen -t rsa -b 4096
一路回车即可(如不想设密码)。
生成后一般位于:
~/.ssh/id_rsa # 私钥
~/.ssh/id_rsa.pub # 公钥
ssh-copy-id user@sftp_server_ip
输入一次密码后,以后即可免密登录。
在客户端查看公钥:
cat ~/.ssh/id_rsa.pub
登录服务器,写入:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sftp user@sftp_server_ip
如果不再提示输入密码,说明配置成功 ✅
检查服务器配置:
# /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
修改后重启 SSH:
systemctl restart sshd
服务器上:
chmod 700 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
在 /etc/ssh/sshd_config 添加:
Match User sftpuser
ForceCommand internal-sftp
PasswordAuthentication no
sftp -i ~/.ssh/id_rsa user@host <<EOF
put file.txt
bye
EOF
如果你有 具体系统(CentOS / Ubuntu)、是否用跳板机、或 只允许 SFTP 不允许 Shell 的需求,我可以给你更精确的配置。