1. 生成SSH密钥对(客户端操作)
在客户端机器上生成RSA密钥对(推荐4096位强度),用于身份认证。执行以下命令:
ssh-keygen -t rsa -b 4096
按提示操作(可直接按回车键使用默认路径~/.ssh/id_rsa,私钥不建议设置密码短语以简化流程),生成后会得到两个文件:
id_rsa:私钥(需严格保密,权限设为600);id_rsa.pub:公钥(需上传至服务器)。2. 将公钥复制到Debian SFTP服务器
将客户端的公钥id_rsa.pub内容添加到服务器目标用户的~/.ssh/authorized_keys文件中,实现免密认证。常用两种方法:
ssh-copy-id命令,自动完成公钥传输和权限设置:ssh-copy-id username@server_ip~/.ssh/authorized_keys中。ssh-copy-id,可手动操作:cat ~/.ssh/id_rsa.pub,复制全部输出;ssh username@server_ip;.ssh目录并设置权限:mkdir -p ~/.ssh && chmod 700 ~/.ssh;authorized_keys:echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys;authorized_keys文件权限:chmod 600 ~/.ssh/authorized_keys。3. 配置SSH服务器(Debian系统)
编辑SSH服务的主配置文件/etc/ssh/sshd_config,启用密钥认证并优化SFTP设置:
sudo nano /etc/ssh/sshd_config
找到并修改以下关键参数(取消注释或新增):
# 启用公钥认证(必须)
PubkeyAuthentication yes
# 指定authorized_keys文件路径(默认即可)
AuthorizedKeysFile .ssh/authorized_keys
# 可选:禁用密码认证(仅允许密钥认证,提升安全性)
PasswordAuthentication no
# 可选:禁用PAM认证(若不需要额外认证模块)
ChallengeResponseAuthentication no
# 确保SFTP子系统启用(默认路径)
Subsystem sftp /usr/lib/openssh/sftp-server
若需限制SFTP用户只能访问自己的家目录(chroot jail),可添加以下配置(匹配特定用户组,如sftpusers):
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
保存并退出编辑器(Ctrl+O→Enter→Ctrl+X)。
4. 重启SSH服务
使配置变更生效,执行以下命令重启SSH服务:
sudo systemctl restart sshd
可通过sudo systemctl status sshd确认服务状态(显示“active (running)”即为正常)。
5. 测试SFTP密钥认证连接
在客户端使用私钥连接服务器,验证配置是否成功:
ssh -i ~/.ssh/id_rsa username@server_ip
或直接使用sftp命令:
sftp -i ~/.ssh/id_rsa username@server_ip
若配置正确,将无需输入密码直接登录服务器(或进入SFTP命令行界面)。
6. 安全加固(可选但推荐)
id_rsa的权限必须为600,防止未授权访问:chmod 600 ~/.ssh/id_rsa/etc/ssh/sshd_config中添加AllowUsers username@your_client_ip,仅允许指定IP连接。sudo tail -f /var/log/auth.log实时查看SSH登录记录,及时发现异常登录行为。