SFTP自动登录的核心是通过SSH密钥认证替代密码输入,同时确保SFTP服务正常运行。以下是详细操作流程:
在需要连接SFTP的本地机器上生成密钥对(若已有密钥可跳过)。运行以下命令:
ssh-keygen -t rsa -b 4096
按提示操作(可直接按回车键使用默认路径和空密码),生成后会得到两个文件:
~/.ssh/id_rsa(私钥,需严格保密)~/.ssh/id_rsa.pub(公钥,需上传至服务器)。使用ssh-copy-id命令将公钥自动添加到服务器目标用户的authorized_keys文件中(替换username为服务器用户名,server_ip为服务器IP):
ssh-copy-id username@server_ip
执行后会提示输入服务器用户密码,输入后公钥会自动写入服务器的~/.ssh/authorized_keys文件。
编辑服务器的SSH配置文件(/etc/ssh/sshd_config),确保以下关键配置项未被注释且设置正确:
sudo nano /etc/ssh/sshd_config
修改或添加以下内容:
# 启用公钥认证
PubkeyAuthentication yes
# 指定authorized_keys文件路径
AuthorizedKeysFile .ssh/authorized_keys
# 可选:禁用密码认证(提升安全性,需确保密钥配置正确)
PasswordAuthentication no
保存文件后,重启SSH服务使配置生效:
sudo systemctl restart sshd
```。
#### **4. 配置SFTP子系统(限制用户访问范围)**
为确保SFTP用户只能访问自己的主目录(增强安全性),需修改SSH配置文件中的`Subsystem`和`Match`规则:
```bash
sudo nano /etc/ssh/sshd_config
找到Subsystem sftp行(取消注释),并添加以下Match规则(以sftpusers组为例,可自定义组名):
# 启用SFTP子系统(使用内置的internal-sftp更安全)
Subsystem sftp internal-sftp
# 限制sftpusers组的用户
Match Group sftpusers
# 将用户根目录锁定为其主目录(chroot)
ChrootDirectory %h
# 强制使用SFTP(而非Shell)
ForceCommand internal-sftp
# 禁用端口转发等不必要的功能
AllowTcpForwarding no
X11Forwarding no
保存文件后,重启SSH服务:
sudo systemctl restart sshd
```。
#### **5. 创建SFTP用户及组(可选但推荐)**
为SFTP用户创建专用组,并设置正确的目录权限:
```bash
# 创建sftpusers组
sudo groupadd sftpusers
# 创建用户并加入sftpusers组(替换username为实际用户名)
sudo adduser username
sudo usermod -aG sftpusers username
# 设置用户主目录权限(chroot要求)
sudo chown root:root /home/username
sudo chmod 755 /home/username
此时,username用户只能通过SFTP访问自己的主目录,无法登录Shell。
在本地机器上使用以下命令测试自动登录(替换username和server_ip):
sftp username@server_ip
若配置正确,将直接进入SFTP命令行界面(无需输入密码)。
~/.ssh/id_rsa)需设置为600权限,防止未授权访问。ChrootDirectory指定的目录(如/home/username)必须由root拥有,且权限不能超过755,否则会导致SFTP连接失败。ssh -vvv username@server_ip查看详细日志,定位问题。