Linux ~/.ssh目录详解和密钥对使用_~/.ssh/-程序员宅基地

技术标签: linux  ssh  服务器  Linux & 网络编程  

.ssh目录内容

Linux中,每个用户的根目录下都有一个.ssh目录,保存了ssh相关的key和一些记录文件。例如:

root@ubuntu:~/.ssh# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts  known_hosts.old

使用ssh-keygen生成key

ssh-keygen可以生成ssh协议所需要的公钥和私钥,例如:

ssh-keygen -t rsa

此命令将生成一个私钥文件(默认为id_rsa)和一个公钥文件(默认为id_rsa.pub)。
其中私钥是必须保存在.ssh目录中的,只有该主机的该用户可以使用。而公钥是给需要使用ssh验证的服务器,使用密钥对可以免密码验证,比如ssh,scp,rsync等。

known_hosts 和 known_hosts.old

known_hostsknown_hosts.old是SSH客户端中的文件,用于存储已知主机的公钥信息。以下是它们的作用和功能:

  1. known_hosts文件:这个文件包含了您曾经连接过的远程主机的公钥信息。当您首次连接一个远程主机时,SSH客户端会将该主机的公钥保存在known_hosts文件中。下次再次连接该主机时,客户端会验证主机的公钥是否与之前保存的一致,以防止中间人攻击。如果主机的公钥发生变化,客户端会发出警告,以提醒您进行确认。

  2. known_hosts.old文件:当SSH客户端检测到known_hosts文件发生了变化(比如主机公钥发生了更改)时,它会将原始的known_hosts文件备份为known_hosts.old。这样,您可以在需要时恢复到旧的已知主机配置。

这些文件通常位于SSH客户端用户的~/.ssh/目录下,每个用户都有自己的独立副本。

请注意,known_hosts文件不包含任何敏感信息,它只存储了公钥信息以供身份验证使用。但是,如果您的系统存在安全问题,有人可能会通过欺骗您来窃取您的密钥,因此当发现known_hosts文件发生变化时,务必审查和验证公钥的有效性。

authorized_keys文件

authorized_keys文件位于SSH服务器上,用于存储允许访问该服务器的客户端的公钥。当您希望使用密钥进行SSH身份验证时,您需要将您的公钥添加到目标服务器的authorized_keys文件中。只有在authorized_keys文件中列出的公钥才能成功进行身份验证并获得访问权限。

authorized_keys文件的作用是配置服务器允许哪些客户端使用密钥进行身份验证。每个客户端的公钥都需要在该文件中有相应的条目才能成功进行身份验证。

known_hosts和authorized_keys的区别

虽然known_hosts和authorized_keys两个文件都涉及到存储其他主机的公钥信息,但它们在SSH身份验证过程中的角色和功能是不同的。
known_hosts文件用于SSH客户端验证远程主机的身份,而authorized_keys文件用于SSH服务器验证客户端的身份。它们在SSH连接过程中扮演了不同的角色,并且存储的公钥信息也有不同的来源和目的。
你可能在.ssh目录中同时看到known_hosts和authorized_keys文件,因为这个主机即可以作为ssh客户端去连接其他主机,也可以作为ssh服务器被其他主机连接,因此这两个文件就都存在。

公钥使用举例:rsync免密同步文件

使用rsync同步文件时,我们可以在目标主机用户上保存当前主机用户的公钥,以实现免密同步文件。

  • 首先,保证我们的客户端主机的当前用户已经有密钥对,如果没有就使用ssh-keygen生成一对。
  • 如果我们知道目标主机用户的authorized_keys文件是空的,可以使用以下方法将客户端的公钥复制到目标主机上的~/.ssh/authorized_keys文件中:
  • ssh-copy-id -i ~/.ssh/id_rsa.pub user@target_host
    替换user为目标主机上的用户名,target_host为目标主机的IP地址或主机名。执行此命令后,系统会要求您输入目标主机的密码。
    如果ssh-copy-id命令不可用,请手动将公钥内容复制到目标主机的~/.ssh/authorized_keys文件中。
  • 但很有可能,目标主机用户的authorized_keys文件已经保存了其他客户端的公钥信息,所以我们大概率不能覆盖这个文件。但我们可以将自己的公钥信息添加到这个文件末尾。
    1. 首先,将我们的公钥文件上传到目标主机上:
      scp -P 22 ~/.ssh/id_rsa.pub user@target_host:/tmp/id_rsa.pub
      
      替换user为目标主机上的用户名,target_host为目标主机的IP地址或主机名。-P选项可以设置ssh服务的端口,如果目标主机的ssh服务是其他端口,请在这儿替换。
    2. 追加公钥到现有文件:登录到目标主机,并将公钥追加到~/.ssh/authorized_keys文件的末尾。在目标主机上运行以下命令:
      cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
      
    3. 清理临时文件(可选):可以在目标主机上删除临时公钥文件。运行以下命令:
      rm /tmp/id_rsa.pub
      
      现在,您已成功将公钥添加到目标主机上现有的~/.ssh/authorized_keys文件的末尾,而不会覆盖它。
  • 使用ssh登录验证
    向目标主机的user用户的.ssh/authorized_keys中添加源主机用户的公钥信息后,就可以直接使用ssh免密登录了:
    ssh user@target_host
    
    如果一切顺利,您应该能够在不输入密码的情况下成功登录到目标主机。
  • 使用rsync同步文件
    rsync -avz -e "ssh -p 22" /path/to/source user@target_host:/path/to/destination
    
    替换/path/to/source为源文件或目录的路径,user为目标主机上的用户名,target_host为目标主机的IP地址或主机名,/path/to/destination为目标文件或目录的路径。
    在使用rsync命令时,指定了-e "ssh -p 22"选项,它告诉rsync使用22端口进行SSH连接。由于您已经设置了密钥身份验证,rsync将使用密钥进行身份验证,而不需要输入密码。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/n5/article/details/130965092

智能推荐

一文会用 github 新利器——github ci-程序员宅基地

文章浏览阅读5.3k次。github ci 是什么  github ci 是 github 提供的一个依据 git 相关事件触发的自动化脚本服务。简单的说,当触发github的事件(push/pull request等)后,github官方会提供一个服务器环境,自动的运行先前配置的脚本,差不多近似于 gitlab 的 ci。为项目创建 github ci  github 来检测项目是否存在 github ci 就是查看该项目根目录下的.github/workflows是否存在yml的配置文件。因此可以通过在根目录下创建 .g_github ci

网络故障和网络诊断工具(1.0)_网络诊断工具支持从公网向私网的网络诊断工具发起诊断测试-程序员宅基地

文章浏览阅读8.3k次,点赞6次,收藏41次。网络故障概述在信息化社会里,各企事业单位对网络的依赖程度越来越高,网络随时都可能发生故障,影响正常工作。所以,必须掌握相应的技术及时排除故障。有些单位如电信、电子商务公司、游戏运营商等使用的网络一旦发生故障,若不能及时排除,会产生很大的损失。这些单位一般会安装网络故障管理软件,通过软件来管理和排除网络的故障。从网络故障本身来说,经常会遇到的故障有:物理层故障数据链路层故障网络层故障以太网络故障广域..._网络诊断工具支持从公网向私网的网络诊断工具发起诊断测试

Pixhawk原生固件PX4之日期时间的确定_px4日志日期未知-程序员宅基地

文章浏览阅读2.5k次。19701.1 00:00:00年到2000.1.1 00:00:00有多少秒?软件中哪里给的默认时间2000年的?_px4日志日期未知

Ogre射线精确查询_ogre射线准确求交-程序员宅基地

文章浏览阅读736次。bool PickEntity(Ogre::RaySceneQuery* mRaySceneQuery, Ogre::Ray &ray, Ogre::Entity **result, Ogre::uint32 mask ,Ogre::Vector3 &hitpoint, bool excludeInVisible,const Ogre::String& excludeobject, Ogre::R_ogre射线准确求交

/usr/lib/x86_64-linux-gnu/libopencv_highgui.so:对‘TIFFReadRGBAStrip@LIBTIFF_4.0’未定义的引用...-程序员宅基地

文章浏览阅读489次。LIBRARIES+=boost_threadstdc++boost_regexhttps://github.com/rbgirshick/fast-rcnn/issues/52转载于:https://www.cnblogs.com/huhuai/p/10624740.html_/usr/lib/x86_64-linux-gnu/libopencv_highgui.so: undefined reference to `tiff

人大金仓数据库KingbaseES dbms_xmlquery包使用技巧--集合元素处理方式_数据库中的xml数据怎么改-程序员宅基地

文章浏览阅读842次,点赞22次,收藏19次。在目前的KingbaseES的使用过程中,我们会遇到数据库需要存储XML格式的数据,或者需要对查询的数据进行转换的问题,XML格式的数据类似于HTML格式数据,XML是一种扩展标记语言,最早于1998年被引入软件工业界,它不仅可以在WEB前端使用还可以应用于后端数据处理以及数据库存储等。_数据库中的xml数据怎么改

随便推点

终端美化微软官方解决方案——Windows Terminal_mintty美化-程序员宅基地

文章浏览阅读699次。本文目录介绍下载方式终端美化介绍参考微软官方的介绍文档 An overview on Windows Terminal | Microsoft Docs:Windows Terminal 是一个面向命令行工具和 shell(如命令提示符Command Prompt、PowerShell 和适用于 Linux 的 Windows 子系统 (WSL))用户的新式终端应用程序。 它的主要功能包括多个选项卡、窗格、Unicode 和 UTF-8 字符支持、GPU 加速文本呈现引擎,你还可用它来创建你自己的主题_mintty美化

【Java SE】一文详解next和nextLine的区别-程序员宅基地

文章浏览阅读7.4k次,点赞2次,收藏9次。了解如何处理用户输入是编程中的一个基本任务。在Java中,我们经常用到的一个类就是Scanner,它提供了许多方法来读取和解析不同类型的输入。然而,即使是这样的基础概念,也存在着让人混淆的地方。例如,next()和nextLine()两个方法,它们在使用上有何区别?为何我们在某些情况下需要使用next(),而在其他情况下需要使用nextLine()?在这篇文章中,我们将详细地探讨这两个方法的不同,让我们一起开始吧!_next和nextline

从最佳并发用户数和最大并发用户数看性能测试_激活用户数,最大并发-程序员宅基地

文章浏览阅读5k次,点赞2次,收藏9次。从最佳并发用户数和最大并发用户数看性能测试原文地址:http://www.cnblogs.com/jackei/archive/2006/11/20/565527.html文章中介绍一个理发店理论,然后引出最佳并发用户数和最大并发用户数的概念 背景:理发店共有3名理发师,每名理发师完成一次理发都耗时1小时,店里有还有一些位子供客人等位,每个客人在_激活用户数,最大并发

linux中crontab定时执行脚本_cron 每周日凌晨6点执行-程序员宅基地

文章浏览阅读6.4k次。阅读目录1. cron服务【Ubuntu环境】 2. crontab用法 3. 编辑crontab文件 4. 流程举例 5. 几个例子Linux中,周期执行的任务一般由cron这个守护进程来处理。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。回到顶部1. cron服务【Ubu..._cron 每周日凌晨6点执行

时间序列入门学习-02 常用统计学概念及公式-程序员宅基地

文章浏览阅读77次。学习过程中涉及很多统计学公式,然而过去快10年,忘得一干二净,借此文复习一下叭~

CAD异常eNotOpenForWrite-程序员宅基地

文章浏览阅读6.6k次,点赞2次,收藏2次。之前在实际工程中查一个软件崩溃的问题,具体调试到的位置是AcDbDatabase::saveAs函数,应该是将数据库保存回CAD图纸时触发了CAD的"eNotOpenForWrite"报错随后软件崩溃。根据以往的使用情况来看,saveAs函数一般不会导致CAD的报错,且在具体测试后,确定只有该工程中一张特定图纸打开时,调用功能会导致异常发生。其他图纸操作一切正常,包括在打开其他图纸的情况下,对该特_enotopenforwrite