温馨提示×

ubuntu sftp如何配置密钥

小樊
40
2026-10-16 23:49:02
栏目: 智能运维

在 Ubuntu 上配置 SFTP 使用密钥登录(而不是密码),通常步骤如下。下面以 OpenSSH Server 为例,假设你是服务器管理员,客户端是 Linux / macOS / Windows(WSL 或 PuTTY)。


一、服务器端配置(Ubuntu)

1. 安装 OpenSSH Server(一般已安装)

sudo apt update
sudo apt install openssh-server

2. 创建 SFTP 用户(可选)

sudo adduser sftpuser

3. 生成密钥(客户端生成更常见)

推荐在客户端生成,然后把公钥传到服务器。

如果你在服务器上生成:

ssh-keygen -t rsa -b 4096

生成:

  • 私钥:~/.ssh/id_rsa
  • 公钥:~/.ssh/id_rsa.pub

二、客户端操作(推荐方式)

1. 客户端生成密钥

ssh-keygen -t rsa -b 4096

一路回车(或设置密码)

2. 上传公钥到服务器

ssh-copy-id sftpuser@server_ip

或手动复制:

cat ~/.ssh/id_rsa.pub

服务器上:

mkdir -p ~/.ssh
echo "公钥内容" >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

三、限制用户只能使用 SFTP(重要)

1. 修改 SSH 配置

sudo nano /etc/ssh/sshd_config

添加或修改:

Match User sftpuser
    PasswordAuthentication no
    PubkeyAuthentication yes
    ForceCommand internal-sftp
    ChrootDirectory /home/sftpuser
    X11Forwarding no
    AllowTcpForwarding no

⚠️ ChrootDirectory 目录权限要求:

  • 属主必须是 root
  • 权限不能超过 755
sudo chown root:root /home/sftpuser
sudo chmod 755 /home/sftpuser

如果要可写目录:

sudo mkdir /home/sftpuser/upload
sudo chown sftpuser:sftpuser /home/sftpuser/upload

四、禁用密码登录(全局可选)

PubkeyAuthentication yes
PasswordAuthentication no

重启 SSH:

sudo systemctl restart ssh

五、客户端使用 SFTP 密钥登录

sftp -i ~/.ssh/id_rsa sftpuser@server_ip

或在 ~/.ssh/config:

Host sftp-server
    HostName server_ip
    User sftpuser
    IdentityFile ~/.ssh/id_rsa

然后:

sftp sftp-server

六、常见问题

1. 权限错误

Permission denied (publickey)

检查:

  • .ssh 700
  • authorized_keys 600
  • 属主正确

2. Chroot 失败

fatal: bad ownership or modes for chroot directory

Chroot 目录必须是 root 拥有,且不能有组写权限。


如果你愿意,可以告诉我:

  • 是 服务器配置 还是 客户端配置
  • 是否要 只允许 SFTP,禁止 SSH
  • 使用的是 Linux / Windows / 云服务器

我可以直接给你一份完整可复制的配置。

0 踩