当前位置: 首页 > article >正文

如何在Linux上配置SSH密钥以实现免密登录

在Linux环境中,SSH(Secure Shell)是一种常用的远程登录协议,它提供了安全加密的通信通道。传统的SSH登录方式需要输入密码,这在频繁操作或自动化脚本执行时显得繁琐且不安全。为了解决这个问题,SSH密钥认证成为了一种更便捷且安全的选择。本文将详细介绍如何在Linux上配置SSH密钥,以实现免密登录。

一、生成SSH密钥对
  1. 打开终端
    首先,在你的Linux系统上打开终端。

  2. 生成密钥对
    使用ssh-keygen命令生成SSH密钥对。默认情况下,它会在用户的~/.ssh目录下生成一个id_rsa(私钥)和一个id_rsa.pub(公钥)文件。

     

    bash

    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

    这里,-t rsa指定了密钥类型为RSA,-b 4096指定了密钥长度为4096位,-C选项后面跟的是你的注释信息,通常是你的邮箱地址。

  3. 保存密钥文件
    系统会提示你输入保存密钥文件的位置和密码短语(可选)。如果你不想设置密码短语,可以直接按回车跳过。但请注意,设置密码短语可以增加私钥的安全性。

二、将公钥复制到远程服务器
  1. 查看公钥内容
    使用cat命令查看生成的公钥内容。

     

    bash

    cat ~/.ssh/id_rsa.pub
  2. 复制公钥到远程服务器
    使用ssh-copy-id命令将公钥复制到远程服务器的~/.ssh/authorized_keys文件中。如果该文件不存在,ssh-copy-id会自动创建它。

     

    bash

    ssh-copy-id user@remote_host

    这里,user是远程服务器上的用户名,remote_host是远程服务器的地址。

  3. 验证配置
    现在,你可以尝试使用SSH登录远程服务器,而不需要输入密码。

     

    bash

    ssh user@remote_host
三、配置SSH客户端和服务器(可选)
  1. 编辑SSH客户端配置文件
    在本地Linux系统上,你可以编辑~/.ssh/config文件来配置SSH客户端的行为。例如,你可以为特定的远程主机设置别名、端口号、使用的密钥文件等。

     

    bash

    Host alias_name
    HostName remote_host
    User user
    IdentityFile ~/.ssh/custom_key
  2. 编辑SSH服务器配置文件
    在远程服务器上,你可以编辑/etc/ssh/sshd_config文件来配置SSH服务器的行为。例如,你可以禁用密码认证、设置允许的最大连接数、限制允许的密钥类型等。

     

    bash

    # 禁用密码认证
    PasswordAuthentication no
    # 设置允许的密钥类型
    PubkeyAcceptedKeyTypes +ssh-rsa

    修改配置文件后,需要重启SSH服务以使更改生效。

     

    bash

    sudo systemctl restart sshd
四、注意事项
  1. 保护私钥
    私钥文件(id_rsa)应妥善保管,不要将其泄露给未经授权的人员。如果私钥丢失或泄露,应立即重新生成密钥对并更新远程服务器上的公钥。

  2. 权限设置
    确保~/.ssh目录和其中的文件具有正确的权限设置。通常,~/.ssh目录的权限应为700,私钥文件的权限应为600。

     

    bash

    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_rsa
  3. 备份密钥
    定期备份你的密钥文件,以防丢失或损坏。你可以将私钥文件复制到安全的存储位置或使用密码管理器进行保存。

五、总结

通过在Linux上配置SSH密钥认证,你可以实现免密登录,从而简化远程操作并提高安全性。本文详细介绍了生成SSH密钥对、将公钥复制到远程服务器以及配置SSH客户端和服务器的步骤。希望这些内容能够帮助你更好地理解和使用SSH密钥认证。


http://www.kler.cn/a/458680.html

相关文章:

  • JVM对象内存分配
  • C#:多线程 简单示例
  • 有什么AI辅助阅读文献工具推荐?
  • 【机器人】机械臂:精度、重复精度、控制器分辨率、手腕、末端执行器
  • Enum枚举类与静态变量和静态数组的区别
  • 基于单片机的多功能视力保护器(论文+源码)
  • PostgreSQL 初始化配置设置
  • Unity功能模块一对话系统(4)实现个性文本标签
  • 2024-12-29-sklearn学习(25)无监督学习-神经网络模型(无监督) 烟笼寒水月笼沙,夜泊秦淮近酒家。
  • Leetcode 3405. Count the Number of Arrays with K Matching Adjacent Elements
  • 【LangChain】Chapter1 - Models, Prompts and Output Parsers
  • 【开源免费】基于SpringBoot+Vue.JS网上摄影工作室系统(JAVA毕业设计)
  • PostgreSQL中FIRST_VALUE、LAST_VALUE、LAG 和 LEAD是窗口函数,允许返回在数据集的特定窗口(或分区)内访问行的相对位置
  • 软件测试之单元测试
  • 技术周总结 12.23~12.29 周日(C#异步线程及调试)
  • 网络畅通无阻:计算机网络知识点复习指南
  • Empire Lupin One靶机
  • AIGC多模态生成模型的演进:图像与视频生成算法的协同发展(附代码与详细教程)
  • .net core 的软件开发方法论
  • 【Go】:Sentinel 动态数据源配置指南
  • C++ 设计模式
  • RabbitMQ中的异步Confirm模式:提升消息可靠性的利器
  • docker oracle一些报错处理--失败记录
  • table 表格转成 excell 导出
  • windows C#-拆分类和方法
  • leetcode hot 100 全排列