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

SSH 公私钥对使用指南

一、生成 SSH 公私钥对

可以使用 ssh-keygen 命令来生成 SSH 公私钥对,同时指定使用 RSA 算法。

bash

ssh-keygen -t rsa

  • -t rsa:表明使用 RSA 算法生成密钥对。
  • 执行该命令后,系统会提示你输入密钥保存的位置和密码。若直接回车,则会采用默认值。默认情况下,私钥会保存为 ~/.ssh/id_rsa,公钥会保存为 ~/.ssh/id_rsa.pub
二、SSH 服务配置
  1. 查看 SSH 服务配置
    可以使用以下命令查看 SSH 服务配置中关于公钥认证和密码认证的设置:

bash

grep -E '^PubkeyAuthentication|^PasswordAuthentication' /etc/ssh/sshd_config

  1. 配置公钥认证和密码认证
    要保证 SSH 服务允许公钥认证,若需要,也可开启密码认证作为备用方式。在 /etc/ssh/sshd_config 文件中进行如下设置:

plaintext

PubkeyAuthentication yes
PasswordAuthentication yes  # 可选,允许密码认证作为备用

设置完成后,重启 SSH 服务,使配置生效:

bash

sudo systemctl restart sshd
三、将公钥复制到目标主机

有两种方法可以将本地生成的公钥内容添加到目标主机的 ~/.ssh/authorized_keys 文件中,如此本地主机就能使用对应的私钥免密登录目标主机。

方法一:使用 ssh-copy-id 命令(前提是目标主机已开启 SSH 服务且允许密码登录)

bash

ssh-copy-id user@target_host

这里的 user 是目标主机的用户名,target_host 是目标主机的 IP 地址或者域名。

方法二:手动复制公钥内容

bash

cat ~/.ssh/id_rsa.pub | ssh user@target_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

该命令借助管道将本地公钥内容通过 SSH 传输到目标主机,并追加到 ~/.ssh/authorized_keys 文件中。

四、免密登录
  1. 直接使用私钥登录
    在本地主机上,使用 ssh 命令并指定私钥文件进行登录:

bash

ssh -i ~/.ssh/id_rsa user@target_host

  • -i:代表私钥的路径。
  • 后面依次为用户名和目标主机的 IP 地址或域名。

  1. 配置 SSH 配置文件(可选)
    可以在本地的 ~/.ssh/config 文件中为目标主机配置别名,以简化登录操作。

plaintext

Host target_alias
    HostName target_host
    User user
    IdentityFile ~/.ssh/id_rsa

  • target_alias:为目标主机设置的别名。
  • 配置完成后,只需使用以下命令即可登录目标主机:

bash

ssh target_alias
五、常见问题及解决办法

密钥认证和密码认证是两种不同的模式,所以即使之后目标用户修改了密码也不会影响密钥认证,但在以下情况下可能会出现认证失败的问题:

  1. SSH 配置改变:若目标机器将 PubkeyAuthentication 选项设置为 no,则会禁用公钥认证。需要检查并修改 /etc/ssh/sshd_config 文件,然后重启 SSH 服务。
  2. 权限问题~/.ssh 目录权限一般应为 700,~/.ssh/authorized_keys 文件权限一般应为 600。可以使用以下命令修改权限:

bash

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

      3 .公钥被修改或者删除:若公钥被修改或者删除,需要重新将本地公钥复制到目标主机的 ~/.ssh/authorized_keys 文件中。

相关文章:

  • Flutter项目之页面实现以及路由fluro
  • (每日一道算法题)最长回文子串
  • 15三数之和解题记录
  • 使用 Flask 框架添加多个AI模型的API进行对话
  • 【读论文】——基于高光谱的玉米籽粒黄曲霉侵染方法研究
  • codis分布式集群
  • 【LeetCode 热题 100】解答汇总
  • 【NLP 50、损失函数 KL散度】
  • 第2.5节 iOS 覆盖率数据的采集
  • JAVA接口调用限速器
  • DQL语句-分组函数-查询
  • 7、linux c 进程通信
  • 深入探索 C++20 中的 std::make_obj_using_allocator
  • 数字换字母
  • 《机甲崛起》
  • VxKex无法通过快捷方式启动程序
  • Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据
  • 【Python】multiprocessing - 进程隔离
  • 使用crypto-js进行DES加/解密
  • 常用的排序算法------练习2
  • 做网站工具 不懂代码/淘词神器
  • 上海正规做网站公司电话/种子搜索器
  • 网站制作毕业设计/登封网站设计
  • 营销型网站建设 案例/网站模板哪家好
  • 功能类网站/中国推广网
  • 深圳网站建设维护/国内最新十大新闻