温馨提示×

linux sftp如何免密

小樊
33
2026-10-29 08:22:29
栏目: 智能运维

在 Linux 下实现 SFTP 免密登录,本质就是 SSH 免密登录(基于密钥认证)。SFTP 只是 SSH 的一个子协议,所以配置好 SSH 密钥就行。

下面是最常用、最标准的做法。


一、在客户端生成密钥(只需一次)

在本地机器执行:

ssh-keygen -t rsa -b 4096

一路回车即可(也可设置密钥密码,但那就不是完全“免密”了)。

生成后通常在:

~/.ssh/id_rsa        # 私钥(自己留着)
~/.ssh/id_rsa.pub    # 公钥(放到服务器)

二、把公钥传到 SFTP 服务器

方法 1(推荐):ssh-copy-id

ssh-copy-id user@server_ip

输入一次密码后,以后就免密了。


方法 2:手动复制(无 ssh-copy-id 时)

在客户端查看公钥:

cat ~/.ssh/id_rsa.pub

在服务器上:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
# 粘贴公钥内容
chmod 600 ~/.ssh/authorized_keys

三、测试 SFTP 免密

sftp user@server_ip

如果不再提示输入密码,说明成功。


四、常见问题排查

1. 权限不正确(最常见)

服务器端必须严格:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2. SELinux 问题(CentOS/RHEL)

restorecon -Rv ~/.ssh

3. SSH 配置限制

服务器 /etc/ssh/sshd_config 中确认:

PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

修改后重启 SSH:

systemctl restart sshd

五、只允许 SFTP(可选,更安全的做法)

如果你希望该用户只能 SFTP,不能 SSH 登录:

Match User sftpuser
    ForceCommand internal-sftp
    PasswordAuthentication no
    ChrootDirectory /home/sftpuser

六、脚本/程序中免密 SFTP

例如:

sftp -i ~/.ssh/id_rsa user@server <<EOF
put file.txt
bye
EOF

如果你有 具体系统(CentOS / Ubuntu / Alpine) 或 使用场景(脚本 / 自动化 / 容器),我可以给你更精确的配置示例。

0 踩