配置 Debian SFTP 自动登录
一 准备与安装
- 在本地与服务器均安装 OpenSSH 客户端/服务器:sudo apt update && sudo apt install -y openssh-client openssh-server。
- 启动并开机自启 SSH 服务:sudo systemctl start ssh && sudo systemctl enable ssh。
- 确认 SSH 服务运行:sudo systemctl status ssh(应显示 active/running)。
二 基于密钥的免密登录(推荐)
- 在本地生成密钥对(如尚未生成):ssh-keygen -t rsa -b 4096,默认生成 ~/.ssh/id_rsa 与 ~/.ssh/id_rsa.pub。
- 将公钥复制到服务器:ssh-copy-id user@remote_host。
- 加固私钥与目录权限:chmod 600 ~/.ssh/id_rsa;chmod 644 ~/.ssh/id_rsa.pub;chmod 700 ~/.ssh;chmod 700 ~/.ssh/authorized_keys。
- 服务器端启用公钥认证:编辑 /etc/ssh/sshd_config,确保 PubkeyAuthentication yes,AuthorizedKeysFile .ssh/authorized_keys;保存后重启:sudo systemctl restart ssh。
- 测试免密登录:sftp user@remote_host,应直接进入 SFTP 会话。
三 服务器端安全与 Chroot 限制(可选但强烈建议)
- 使用内部 SFTP 并限制用户仅能 SFTP:编辑 /etc/ssh/sshd_config,在文件末尾加入(可按用户或用户组匹配):
Match User sftpuser
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
PermitTTY no
说明:Chroot 目录(此处为用户的 %h 主目录)及其上级目录必须归 root:root 且权限 755,否则 SFTP 会拒绝登录。
- 若需指定固定目录(如网站目录),可改为:ChrootDirectory /sftp/www-data,并确保 /sftp/www-data 属主 root:root、权限 755;为用户可写子目录(如 /sftp/www-data/website_files)设置属主 www-data:www-data。
- 重启服务:sudo systemctl restart ssh。
- 验证限制:sftp sftpuser@your_server_ip,执行 cd … 应失败,pwd 显示 /(即被 chroot 的根)。
四 客户端自动登录与脚本化
- 使用 SSH 配置文件保存连接参数:编辑 ~/.ssh/config,加入
Host mysftp
HostName your_server_ip
User sftpuser
IdentityFile ~/.ssh/id_rsa
Port 22
之后可直接执行:sftp mysftp。
- 非交互批处理(无需手动输入密码)可用 sftp 的批量命令文件:
echo “get /remote/file /local/file” > batch.txt
sftp -b batch.txt mysftp
注意:仅在已配置密钥免密时,上述命令才真正“全自动”。
- 如需在脚本中静默连接,可临时关闭主机密钥检查(仅在内网可信环境使用):sftp -o StrictHostKeyChecking=no mysftp。
五 常见问题排查
- 配置语法检查:sudo sshd -t;查看日志:sudo tail -f /var/log/auth.log。
- 权限要点:
- 用户主目录(或 Chroot 目录)及其上级目录:属主 root:root、权限 755。
- 用户可写目录:属主对应用户(如 www-data:www-data),权限 755/775 视需求而定。
- 连接被拒绝或卡住:确认 sshd 运行、端口 22 开放、密钥已正确部署、以及 Chroot 目录权限无误。