温馨提示×

linux sftp如何免密登录

小樊
50
2026-09-29 04:08:27
栏目: 智能运维

在 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@sftp_server_ip

输入一次密码后,以后即可免密登录。


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

在客户端查看公钥:

cat ~/.ssh/id_rsa.pub

登录服务器,写入:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

三、测试 SFTP 免密登录

sftp user@sftp_server_ip

如果不再提示输入密码,说明配置成功 ✅


四、常见问题排查

1. 仍然提示输入密码

检查服务器配置:

# /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

修改后重启 SSH:

systemctl restart sshd

2. 权限问题(非常重要)

服务器上:

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

3. 仅允许 SFTP,不允许 SSH(可选)

在 /etc/ssh/sshd_config 添加:

Match User sftpuser
    ForceCommand internal-sftp
    PasswordAuthentication no

五、脚本/程序中免密 SFTP 示例

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

如果你有 具体系统(CentOS / Ubuntu)、是否用跳板机、或 只允许 SFTP 不允许 Shell 的需求,我可以给你更精确的配置。

0 踩