温馨提示×

怎样用密钥登录Ubuntu SFTP

小樊
47
2026-09-29 10:34:39
栏目: 智能运维

下面给你一套从零开始在 Ubuntu 上用密钥登录 SFTP 的完整步骤,适用于 OpenSSH Server(最常用)。


一、前提条件

  • 一台 Ubuntu 服务器(已安装并运行 SSH)
  • 一台本地电脑(Windows / macOS / Linux 均可)
  • 有服务器的普通用户账号(不推荐直接用 root)

二、在本地生成 SSH 密钥

Linux / macOS

ssh-keygen -t ed25519 -C "your_email@example.com"

如果系统较老,可用:

ssh-keygen -r rsa -b 4096

按提示回车即可,默认生成:

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

Windows(PowerShell)

ssh-keygen -t ed25519

三、把公钥传到 Ubuntu 服务器

方法 1:自动上传(推荐)

ssh-copy-id user@server_ip

输入密码后,公钥会自动写入:

~/.ssh/authorized_keys

方法 2:手动上传

scp ~/.ssh/id_ed25519.pub user@server_ip:~/

登录服务器后:

mkdir -p ~/.ssh
cat ~/id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

四、测试密钥登录 SSH

ssh user@server_ip

✅ 如果不再输入密码就成功。


五、使用 SFTP 密钥登录

命令行 SFTP

sftp user@server_ip

FileZilla

  1. 协议:SFTP
  2. 登录类型:Key file
  3. 用户:user
  4. 密钥文件:选择 id_ed25519

WinSCP

  • 文件协议:SFTP
  • 高级 → SSH → 认证 → 私钥文件
  • 选择 .ppk(可用 PuTTYgen 转换)

六、(可选)禁止密码登录,提高安全性

编辑服务器 SSH 配置:

sudo nano /etc/ssh/sshd_config

修改或确认:

PubkeyAuthentication yes
PasswordAuthentication no

重启 SSH:

sudo systemctl restart ssh

⚠️ 确认密钥能登录后再关闭密码登录


七、常见问题

1. 权限错误导致无法登录

服务器上必须保证:

chmod 700 ~
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

2. SFTP 只能访问家目录

这是正常的,SFTP 默认限制在该用户目录。

3. 只想用 SFTP,不让 SSH

可配置:

Subsystem sftp internal-sftp
Match User sftpuser
    ForceCommand internal-sftp
    PasswordAuthentication no

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

  • 你用的是 Ubuntu 版本
  • 是 服务器 / 云服务器 / 树莓派
  • 用 命令行 / FileZilla / WinSCP

我可以给你更精确的配置示例。

0 踩