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

智能推荐

【连接池】-从源码到适配(上),你遇到过数据库连接池的问题吗?This connection has been closed_failed to initialize pool: this connection has bee-程序员宅基地

文章浏览阅读1.2k次,点赞19次,收藏22次。本文从项目需求出发到项目最终发版提测,讲述一下项目中遇到的问题(MyBatis数据库厂商适配、查看数据库链接、连接池失效等)以及打怪升级过程(思路),文章中会提到涉及到的坑以及解决办法。相信看完,多少会给你提供一些价值。_failed to initialize pool: this connection has been closed.

android listpreference 自定义,自定义android preference组件-程序员宅基地

文章浏览阅读179次。e() {return mDisableDependentsState;}public void setDisableDependentsState(boolean disableDependentsState) {mDisableDependentsState = disableDependentsState;}@Overrideprotected Object onGetDefaultValu..._android 自定义listpreference

射频MOS管和三极管优缺点对比_mos管比起三极管有什么优势-程序员宅基地

文章浏览阅读5.1k次。MOS管优点:1.具有良好的温度特性。2.具有良好的噪声特性。3.输入阻抗高。4.MOS管的漏极电流具有二次函数特性,三极管的集电极电流是指数形式。5.MOS管的上限频率远远超过三极管的上限工作频率。6.MOS管功耗较小。MOS管缺点:1.增益通常较低。2.输入阻抗高,导致匹配网络难设计。3.相对于三极管,MOS管的功率容量偏低..._mos管比起三极管有什么优势

华为云云耀云服务器L实例评测使用_华为云耀云服务器l实例跟腾讯云什么服务器类似-程序员宅基地

文章浏览阅读172次。其次就是会发送一条开通后的短信到手机上,这点还可以吧,不过也没太大必要,感觉要是第一次进这个服务器管理界面的话,有个服务器信息弹窗选择是新手还是老手,新手提示教程,老手提示服务器基础信息会更好一点,一般人买服务器都是在电脑上,感觉手机短信的不那么有必要。以下是进入后的界面,感觉还行吧,就是都是统一的黑色,没感觉到重点,熟悉后,应该会好一些,但是什么重置密码,设置网关什么的不好找到,需要详细的找一下,这点不太好。还有一次创建失败的信息,也不知道因为什么,在后边价格联系客服之类的应该会更好一点。_华为云耀云服务器l实例跟腾讯云什么服务器类似

在安装win7系统时如何不产生100M的系统保留分区_做系统的保留分区只有50mb-程序员宅基地

文章浏览阅读855次。在安装win7系统时如何不产生100M的系统保留分区 如果你是从xp系统升级安装,或者重新安装win7系统,应该不会出现所谓的100M系统保留分区情况。 这里说的安装指的的对新的磁盘或者删除了老的所有分区后的安装win7系统。 第一种方法:利用第三方分区工具先对磁盘进行分区。没有第三方工具,利用xp安装盘,进行磁盘分区也行。只要分区格式化就可以了,没有必要安装xp系统_做系统的保留分区只有50mb

大厂程序员都爱用的六款IDE工具,你都知道吗?_ide软件-程序员宅基地

文章浏览阅读2k次。给大家推荐六款好用的IDE工具,快来看看吧!_ide软件

随便推点

用Visual Studio建立第一个ASP.NET页面_vs2022怎么创建aspx文件-程序员宅基地

文章浏览阅读2.6w次,点赞17次,收藏84次。1.新建一个项目 (1)直接在VS开始界面上选择“新建项目 (2)在菜单上选择“文件”、“新建”、“项目”2.在弹出的窗口中选择“Visual C#”--->“Web”---->"ASP.NET空Web应用程序",注意选择的是.NET Framework4框架,然后输入你所想输入的项目名称,点击“确定”,就成功新建了一个ASP.NET项目_vs2022怎么创建aspx文件

快速上手MATLAB:科研、工程、数据分析,MATLAB入门(下)教你基础知识!分享《MATLAB初学者教程 MATLAB编程-菜鸟入门(清晰版)》_菜鸟教程matlab在线编程-程序员宅基地

文章浏览阅读1.2k次,点赞38次,收藏49次。前两天,我们在(MATLAB入门(上))中简单认识了MATLAB,了解了MATLAB的基础知识,今天继续从文件读取、MATLAB绘图两个方面给大家介绍。MATLAB是一款广泛应用的科学计算工具,适用于科研、工程、数据分析等领域。认识MATLAB需要了解其概述及特点,学会使用命令窗口、创建M文件、目录和文件管理、搜索路径管理等基本操作。MATLAB基础知识包括简单计算、基本运算符号、数值、变量及表达式、数组的生成和寻访。编程基础则包括流程控制、控制命令、逻辑数组和向量化等。_菜鸟教程matlab在线编程

问题:( )存量经营派单中,实现一个派单聚合多种业务的活动是哪类?( ) #微信#微信-程序员宅基地

文章浏览阅读307次,点赞9次,收藏6次。问题:( )存量经营派单中,实现一个派单聚合多种业务的活动是哪类?

《嵌入式系统原理与接口技术》第2章 嵌入式系统工程设计概述_嵌入式系统设计中有哪些矛盾需要设计者和开发者共同解决?-程序员宅基地

文章浏览阅读3.8k次。由于Live writer排版差异,文中编号始终从1开始,对于文章内容欢迎通过评论或者邮件[email protected]与我交流。1.1 嵌入式系统设计的基本流程不知各位读者是否记得在小学学过的一篇课文,说的是统筹方法,课文中举了泡茶喝这个例子。比方,想泡壶茶喝。当_嵌入式系统设计中有哪些矛盾需要设计者和开发者共同解决?

链表--有序链表的合并C语言实现-程序员宅基地

文章浏览阅读167次。合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。

显卡驱动 1080Ti Linux,Ubuntu18.04 Nvidia1080ti环境安装显卡驱动-程序员宅基地

文章浏览阅读483次。安装了1080ti显卡的电脑安装Ubuntu16.04和17.04都有烦人的黑屏问题,应该是内置显卡驱动不稳定导致的问题。安装刚新出的Ubuntu18.04尝试一下,很好很顺畅,没什么问题,系统直接安装成功,接着安装官方的显卡驱动。1、重启进入BIOS,将secure boot取消(设为disabled),再重启2、用命令lsmod | grep nouveau如果有东西输出,就要去关闭自带的No..._ubuntu18.04 1080ti 驱动