在 Ubuntu 上配置 SFTP 使用密钥登录(而非密码登录),一般步骤如下:
在**你自己的电脑(客户端)**上执行:
ssh-keygen -t rsa -b 4096
一路回车即可,默认生成:
~/.ssh/id_rsa~/.ssh/id_rsa.pubssh-copy-id user@server_ip
输入一次密码后,公钥会自动写入服务器:
~/.ssh/authorized_keys
在客户端查看公钥:
cat ~/.ssh/id_rsa.pub
登录服务器后:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
粘贴公钥内容,然后:
chmod 600 ~/.ssh/authorized_keys
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
确认以下配置:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
(一般默认就是开启的)
如果你希望该用户 只能用 SFTP,不能 SSH 登录:
Match User sftpuser
PasswordAuthentication no
ForceCommand internal-sftp
ChrootDirectory /home/sftpuser
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
修改后重启 SSH:
sudo systemctl restart ssh
如果使用 ChrootDirectory,目录权限必须:
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser
用户上传目录:
sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload
sftp -i ~/.ssh/id_rsa user@server_ip
或普通连接(默认使用密钥):
sftp user@server_ip
确认密钥可用后:
PasswordAuthentication no
然后:
sudo systemctl restart ssh
如果你愿意,可以告诉我:
我可以给你更精确的配置示例。