在 Linux 下实现 SFTP 免密登录,本质是使用 SSH 公钥认证(SFTP 基于 SSH)。步骤如下:
ssh-keygen -t rsa -b 4096
一路回车即可,默认生成:
~/.ssh/id_rsa~/.ssh/id_rsa.pubssh-copy-id user@sftp_server_ip
输入一次密码后,以后即可免密。
在客户端执行:
cat ~/.ssh/id_rsa.pub
登录服务器:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
vi ~/.ssh/authorized_keys
把公钥内容粘贴进去,然后:
chmod 600 ~/.ssh/authorized_keys
sftp user@sftp_server_ip
如果不再提示输入密码,说明成功。
服务器上权限必须正确:
chmod 700 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
服务器 /etc/ssh/sshd_config 中:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 可禁用密码(可选)
修改后重启:
systemctl restart sshd
restorecon -Rv ~/.ssh
若只想让用户用 SFTP 不能登录 shell:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
PasswordAuthentication no
如果你需要 脚本自动 SFTP、Windows 到 Linux、或 Jumpserver/堡垒机场景,可以告诉我具体环境。