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 登录方式就变得更加安全可靠了。如果在配置过程中遇到任何问题,例如权限设置或配置文件修改,可以随时提问。

相关推荐
SPC的存折2 分钟前
1、MySQL故障排查与运维案例
linux·运维·服务器·数据库·mysql
Run_Teenage3 分钟前
Linux:认识信号,理解信号的产生和处理
linux·运维·算法
Deitymoon16 分钟前
linux——TCP服务器获取客户端IP地址
linux·服务器·tcp/ip
CDN36017 分钟前
高防服务器磁盘 / CPU 爆满?攻击引流与资源扩容实战
运维·服务器·网络协议
小贾要学习18 分钟前
【Linux】应用层自定义协议与序列化
linux·服务器·c++·json
white-persist20 分钟前
【vulhub spring CVE-2018-1270】CVE-2018-1270 Spring Messaging 远程命令执行漏洞 完整复现详细分析解释
java·服务器·网络·数据库·后端·python·spring
Amnesia0_025 分钟前
理解Linux中的OS管理和进程属性
linux·运维·服务器
十五年专注C++开发25 分钟前
cpolar(极点云): 一款主流的内网穿透工具
linux·windows·cpolar·穿透
徒 花25 分钟前
HCIP学习05 链路聚合(Eth-Trunk)+ VRRP
服务器·网络·学习·hcip
liliangcsdn40 分钟前
LLM如何与mcp server交互示例
linux·开发语言·python