温馨提示×

Ubuntu如何使用SSH密钥认证

小樊
50
2025-10-26 17:49:54
栏目: 智能运维

Ubuntu使用SSH密钥认证的完整步骤

1. 生成SSH密钥对

在本地Ubuntu机器上生成密钥对(私钥+公钥),是密钥认证的基础。
打开终端,运行以下命令:

ssh-keygen -t ed25519 -C "your_email@example.com"
  • 参数说明
    • -t ed25519:推荐使用Ed25519算法(更安全、性能更好),若系统不支持可改用-t rsa -b 4096(RSA算法,4096位长度)。
    • -C "your_email@example.com":添加注释,用于标识密钥用途(如个人邮箱)。
  • 后续操作
    • 系统会提示选择密钥保存路径,默认为~/.ssh/id_ed25519(私钥)和~/.ssh/id_ed25519.pub(公钥),直接按Enter使用默认路径。
    • 可选设置私钥密码(Passphrase):输入密码可额外保护私钥,若留空则无需每次使用密钥时输入密码(不推荐用于高敏感场景)。
      生成完成后,可通过ls -l ~/.ssh/id_*命令查看密钥文件。

2. 将公钥上传到远程服务器

将本地生成的公钥(id_ed25519.pubid_rsa.pub)添加到远程服务器的~/.ssh/authorized_keys文件中,实现“钥匙与锁”的匹配。

方法1:使用ssh-copy-id命令(推荐)

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@remote_host
  • 参数说明
    • -i:指定公钥文件路径(若使用默认路径可省略)。
    • user:远程服务器上的用户名(如ubunturoot)。
    • remote_host:远程服务器的IP地址或域名(如192.168.1.100example.com)。
  • 操作流程
    运行命令后,输入远程服务器用户的密码,系统会自动将公钥内容追加到服务器的~/.ssh/authorized_keys文件中。

方法2:手动复制公钥(若ssh-copy-id不可用)

# 1. 复制本地公钥内容到剪贴板
cat ~/.ssh/id_ed25519.pub | xclip -selection clipboard  # 需安装xclip(sudo apt install xclip)
# 或直接打开公钥文件复制内容:cat ~/.ssh/id_ed25519.pub

# 2. 登录远程服务器
ssh user@remote_host

# 3. 在服务器上创建.ssh目录(若不存在)并设置权限
mkdir -p ~/.ssh
chmod 700 ~/.ssh

# 4. 将公钥内容追加到authorized_keys文件
echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys  # 关键:限制authorized_keys文件权限

注意authorized_keys文件的权限必须为600(仅所有者可读写),否则SSH会拒绝使用该文件。

3. 配置SSH服务器(可选但推荐)

修改远程服务器的SSH配置文件,启用密钥认证并优化安全性。

sudo nano /etc/ssh/sshd_config
  • 关键配置项(找到对应行并修改):
    PubkeyAuthentication yes      # 启用公钥认证(默认是yes,可省略)
    AuthorizedKeysFile .ssh/authorized_keys  # 指定authorized_keys文件路径(默认即可)
    PasswordAuthentication no     # 禁用密码认证(提升安全性,需确保密钥登录正常后再启用)
    # PermitRootLogin prohibit-password  # 可选:禁止root用户密码登录(推荐)
    
  • 保存并重启SSH服务
    sudo systemctl restart ssh  # 或sudo service ssh restart(旧版本)
    

注意:修改配置前建议备份原文件(sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak),避免配置错误导致无法登录。

4. 测试SSH密钥认证

在本地机器上测试是否能通过密钥登录远程服务器:

ssh user@remote_host
  • 结果说明
    • 若密钥配置正确,直接登录远程服务器(无需输入密码)。
    • 若设置了私钥密码,会提示输入密码短语(输入后即可登录)。
  • 常见问题排查
    • 若提示“Permission denied (publickey)”,需检查:
      1. 服务器端~/.ssh目录权限是否为700authorized_keys文件权限是否为600
      2. 公钥是否完整复制到authorized_keys文件中(无换行符或多余字符)。
      3. SSH配置文件中PubkeyAuthentication是否为yes

5. 优化密钥使用体验(可选)

使用SSH Agent管理私钥

SSH Agent可缓存私钥密码,避免每次使用密钥时重复输入:

# 1. 启动SSH Agent
eval "$(ssh-agent -s)"

# 2. 添加私钥到Agent(输入私钥密码)
ssh-add ~/.ssh/id_ed25519

# 3. 查看已加载的密钥
ssh-add -l

注意:SSH Agent仅在当前终端会话有效,关闭终端后需重新启动。

配置SSH客户端简化命令

编辑本地机器的~/.ssh/config文件(若不存在则创建),添加以下内容:

Host my_server  # 自定义别名(如server1)
    HostName 192.168.1.100  # 远程服务器IP或域名
    User ubuntu  # 远程服务器用户名
    IdentityFile ~/.ssh/id_ed25519  # 私钥文件路径

使用效果
之后可直接通过ssh my_server命令登录,无需输入完整参数。

注意事项

  • 私钥安全:私钥(id_ed25519id_rsa)是登录的关键,切勿泄露给他人。若私钥丢失,需重新生成密钥对并更新服务器端的authorized_keys文件。
  • 紧急恢复:禁用密码登录前,务必确认密钥登录正常,否则可能导致无法远程访问服务器。
  • 算法选择:优先使用Ed25519算法(更安全),若兼容性问题需使用RSA 4096位。
  • 防火墙设置:若服务器启用了UFW防火墙,需允许SSH端口(默认22):sudo ufw allow ssh

0