ssh秘钥认证简述

通常我们会使用x-shellputtyMobaXterm等支持ssh连接的工具去登录服务器进行管理,而执行ssh命令、scp命令等从一台服务器登录另外一台服务器的时候,通常需要我们输入对应用户的密码,除了用户名/密码模式外,实际上还支持ssh秘钥登录,熟悉git工具的同学对此一定不会陌生,gitlab、github等都会支持http连接和ssh连接两种模式,而ssh模式会在我们本机中生成私钥文件(id_rsa)、公钥文件(id_rsa.pub)、认证信息文件(known_hosts)等,如图:

生成公钥和私钥

利用公钥、私钥对进行身份认证或者信息加密不是本文的重点,感兴趣的同学可以自行搜索资料了解对应的原理,下面开始介绍ssh的相关命令

默认情况下的Linux主机或者windows主机没有前面提到的公钥、私钥、认证信息等文件,我们通过ssh-keygen命令来生成(ssh key generate的缩写):

上图中的交互式过程很好理解,默认把私钥生成到/root/.ssh/id_rsa中(本例用的root用户登录,其它用户默认会在自己的home目录的/.ssh/下生成),然后是否给私钥再加入密码(给私钥加密码则每次用私钥认证还需要再输入密码,不是我们想要的效果了),我们直接回车跳过,这样我们就得到了自己的公钥和私钥对了。当然,这里采用的加密算法默认是rsa,我们也可以选择其他的加密算法,例如:dsa、ecdsa、ed25519,得到的文件也会不同,这里我们只采用默认的。

免秘钥登录

想要免秘钥登录别的机器,那么需要把自己的公钥给别的机器做认证,别人才会允许你登录,命令就是:ssh-copy-id

例如:我们要从172.16.101.4这台机器ssh登录172.16.101.34,输入命令:

 ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.16.101.34

其中-i参数表示指定本机的公钥文件

根据提示输入了172.16.101.34的登录密码后,就会在172.16.101.34机器上生成认证文件/root/.ssh/authorized_keys:

仔细对比就会发现,这里生成的认证信息,就是172.16.101.4的公钥文件的内容,这条命令实际上就是拷贝公钥到172.16.101.34,为什么我们不直接拷贝呢?因为直接拷贝需要建立文件夹、建立文件、赋予正确的权限、拷贝内容编码、拷贝是否完整等一系列问题,容易造成错误,不如直接执行命令来的方便~当然,我们也给出拷贝命令:

cat ~/.ssh/id_rsa.pub | ssh -p 22 root@172.16.101.34 "umask 077;mkdir -p ~/.ssh;cat - >> ~/.ssh/authorized_keys"

如果要连接的服务器不是采用的默认22端口,那么我们需要在命令中指定具体端口

当前服务器为centos6:

ssh-copy-id -i ~/.ssh/id_rsa.pub "root@172.16.101.34 -p 端口号"

当前服务器为centos7:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.101.34 -p 端口号

至此,我们就能通过ssh命令免密码登录到其他机器了。至于这个有什么用,在ansible的主机管理与通讯部分会用到~

ssh的秘钥认证的更多相关文章

  1. ssh分发秘钥时出现错误“Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”

    因为公司的服务器连接是通过xshell公钥和密码连接的,今天在ssh分发秘钥的时候出现了,下面的错误: [root@iZ2ze97cumk8opqm28h8Z .ssh]# ssh-copy-id - ...

  2. 克隆虚拟机+Linux互相登录+秘钥认证(四)

    1.虚拟机右键管理_克隆 修改虚拟机名称后完成! 2.开机启动虚拟机 随时保存快照 3.开启两台虚拟机,进行互相登录切换!(W命令查看系统负载) 补充: IP登录: ssh IP: 例如:ssh 19 ...

  3. Linux SSH 免秘钥登录

    SSH 免秘钥登录 ssh:是一种安全加密协议 ssh  username@hostname     ssh gongziyuan.com:以当前用户登录该机器(如果不是当前用户,需要这么干:ssh ...

  4. ansible-playbook 打通ssh无秘钥

    建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...

  5. linux下ssh免秘钥登录

    1.检查防火墙是否关闭 (1)切换到root用户 (2)查看防火墙状态 service iptables status 这是没有关闭 (3)设置关闭 service iptables stop 2.检 ...

  6. ssh 多秘钥管理和坑

    概述 很久之前就想研究一下 ssh 的多秘钥管理,今天正好有时间就研究了一下,挺简单的,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: Git - 生成 SSH公钥 , Linux 下多 ...

  7. SSH设置秘钥登录

    设置 SSH 通过密钥登录 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默 ...

  8. keychain实现ssh对秘钥免登陆免输入密码

    Linux同一网段实现密码认证,管理. 项目:https://github.com/funtoo/keychain 01.生成秘钥 ssh-keygen -t rsa   #  -t rsa | ds ...

  9. 配置SSH无秘钥登录

    [hadoop@hadoop01 ~]$ cd .ssh [hadoop@hadoop01 .ssh]$ ls authorized_keys id_rsa id_rsa.pub known_host ...

随机推荐

  1. HelloDjango 系列教程:博客从“裸奔”到“有皮肤”

    文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 在此之前我们已经编写了博客的首页视图,并且配置了 URL 和模板,让 django 能够正确地处理 HTTP 请求并返回合适的 ...

  2. 洛谷P2630 题解

    我先讲一下我的思路 将A,B,C,D四种操作用函数储存起来: 枚举所有可能出现的情况:A,B,C,D,AA,AB,AC,AD,BB,BC,BD,CC,CD,DD,ABC,ABD,ACD,BCD,ABC ...

  3. Unity学习--捕鱼达人笔记

    1.2D模式和3D模式的区别,2D模式默认的摄像机的模式是Orthographic(正交摄像机),3D模式默认的摄像机的模式是Perspective(透视摄像机).3D会额外给你一个平衡光.3D模式修 ...

  4. 消息中间件-activemq实战之消息持久化(六)

    对于activemq消息的持久化我们在第二节的时候就简单介绍过,今天我们详细的来分析一下activemq的持久化过程以及持久化插件.在生产环境中为确保消息的可靠性,我们肯定的面临持久化消息的问题,今天 ...

  5. GBK和UTF-8的区别

    我们这里将以最简单最容易理解的方式来描述GBK和UTF8的区别,以及它们分别是什么.   GBK编码:是指中国的中文字符,其它它包含了简体中文与繁体中文字符,另外还有一种字符“gb2312”,这种字符 ...

  6. react-navigation报错

    用react-navigation配置路由时,出现如下报错或白屏. 我的代码原来是 import {AppRegistry} from 'react-native'; import App from ...

  7. Java8 CompletableFuture 编程

    一.简介  所谓异步调用其实就是实现一个无需等待被调用函数的返回值而让操作继续运行的方法.在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,使调用继续运行或返回,而不需要等待计算结 ...

  8. Z算法

    Z算法 Z算法是一种用于字符串匹配的算法.此算法的核心在于\(z\)数组以及它的求法. (以下约定字符串下标从\(1\)开始) \(\bm z\)数组和Z-box 定义\(z\)数组:\(z_{a,i ...

  9. HashMap与ConcurrentHashMap在Java8的改进

    链接:http://www.cnblogs.com/huaizuo/archive/2016/04/20/5413069.html#undefined http://www.cnblogs.com/h ...

  10. shell习题2

    1---------------->>>>输入一个设备文件,输出这个设备文件的基本信息: 2.------------->>>>显示一个如下的菜单,cp ...