ubuntu服务器配置私钥登录

使用公钥和私钥登录 SSH 是一种比密码更安全、更便捷的身份验证方式。下面是为您整理的详细操作流程。

🔑 生成密钥对

首先,在您的本地计算机上生成一对密钥(公钥和私钥)。

  1. 打开终端,执行以下命令:

    bash 复制代码
    ssh-keygen -t rsa -b 4096
    • -t rsa 指定密钥类型为 RSA。
    • -b 4096 指定密钥长度为 4096 位,安全性更高。
  2. 系统会提示您:

    • Enter file in which to save the key:按回车键使用默认路径即可(通常是 ~/.ssh/id_rsa)。
    • Enter passphrase强烈建议为私钥设置一个"密码短语"。这能为私钥增加一层重要保护,即使私钥文件不慎泄露,对方也无法直接使用。

命令执行成功后,您会在 ~/.ssh/ 目录下得到两个文件:id_rsa(私钥)id_rsa.pub(公钥)。私钥是你的身份证明,必须妥善保管,绝不外传;公钥则可以放心地放到任何你需要登录的服务器上。

📤 将公钥上传至服务器

接下来,需要将公钥部署到您想登录的远程服务器上。

推荐使用 ssh-copy-id 命令,这是最简便的方法:

bash 复制代码
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip_address

系统会提示您输入一次服务器用户的密码,验证成功后公钥会自动追加到服务器对应用户家目录下的 ~/.ssh/authorized_keys 文件中。

如果无法使用 ssh-copy-id,可以手动复制:

  1. id_rsa.pub 文件内容拷贝到剪贴板。

  2. 登录服务器,编辑或创建 ~/.ssh/authorized_keys 文件。

  3. 将公钥内容粘贴到新的一行。

  4. 至关重要的一步 :设置正确的文件权限,否则 SSH 服务器会拒绝认可该密钥:

    bash 复制代码
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys

⚙️ 配置服务器 SSH

为使服务器接受密钥登录,需要确保其 SSH 服务配置正确。

  1. 编辑服务器上的 SSH 配置文件:

    bash 复制代码
    sudo nano /etc/ssh/sshd_config
  2. 确认或修改以下行,确保它们为 yes

    复制代码
    PubkeyAuthentication yes
    # RSAAuthentication yes  # 对于较新版本的 OpenSSH,通常不需要这一行
  3. (可选但强烈推荐)确认能通过密钥登录成功后 ,可以禁用密码登录以极大提升安全性:

    复制代码
    PasswordAuthentication no
  4. 保存文件后,重启 SSH 服务使配置生效:

    bash 复制代码
    sudo systemctl restart sshd

🖥️ 使用私钥登录

完成以上设置后,您就可以使用私钥登录了。

  • 在 Linux 或 macOS 上 :SSH 客户端通常会自动使用 ~/.ssh/id_rsa 这个默认私钥。只需直接连接即可,如果设置了密码短语,会提示您输入:

    bash 复制代码
    ssh username@server_ip_address
  • 如果需要指定其他私钥文件 ,使用 -i 参数:

    bash 复制代码
    ssh -i /path/to/your/private_key username@server_ip_address
  • 在 Windows 上 :使用 PuTTY 等工具时,需要用 PuTTYgen 工具将私钥转换为 .ppk 格式,然后在连接设置中指定该私钥文件。

🛡️ 增强安全性建议

为了进一步提升安全级别,可以考虑:

  • 禁用 root 用户直接通过 SSH 登录
    /etc/ssh/sshd_config 中设置:

    复制代码
    PermitRootLogin no
  • 考虑修改默认的 SSH 端口 :将 Port 22 改为一个非标准端口,可以减少自动化攻击脚本的骚扰。

  • 使用 Fail2ban 等工具:它可以自动屏蔽多次尝试登录失败的 IP 地址。

完成这些步骤后,您的 SSH 登录方式就变得更加安全可靠了。如果在配置过程中遇到任何问题,例如权限设置或配置文件修改,可以随时提问。

相关推荐
凡人叶枫4 分钟前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
yuanmenghao26 分钟前
Linux 性能实战 | 第 7 篇 CPU 核心负载与调度器概念
linux·网络·性能优化·unix
qq_2975746739 分钟前
Linux 服务器 Java 开发环境搭建保姆级教程
java·linux·服务器
神筆&『馬良』1 小时前
Foundation_pose在自己的物体上复现指南:实现任意物体6D位姿检测(利用realsense_D435i和iphone_16pro手机)
目标检测·ubuntu·机器人·视觉检测
70asunflower1 小时前
Emulation,Simulation,Virtualization,Imitation 的区别?
linux·docker
神梦流2 小时前
ops-math 算子库的扩展能力:高精度与复数运算的硬件映射策略
服务器·数据库
神梦流2 小时前
GE 引擎的内存优化终局:静态生命周期分析指导下的内存分配与复用策略
linux·运维·服务器
凡人叶枫2 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [drivers][input]serio
linux·笔记·学习
xuhe22 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr