当前位置: 首页 > 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 文件中。

http://www.dtcms.com/a/94477.html

相关文章:

  • 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
  • JumpServer:一款企业级开源堡垒机
  • mapbox进阶,仿照百度,加载marker点位,移入marker点切换图标,点击展示气泡,气泡和marker联动
  • Ubuntu系统保姆级Paperless-ngx部署指南:零基础实现文档云端化管理
  • LeetCode 热题 100_爬楼梯(81_70_简单_C++)(动态规划)
  • SLAM文献之-NR-SLAM: Non-Rigid Monocular SLAM
  • 使用独立服务器的最佳方式指南
  • 【软件测试】一篇总结软件测试的基础知识
  • redis(主从复制)教程
  • 播放本地视频-实现视频画廊功能
  • @emotion/css + react+动态主题切换