ssh的秘钥认证
ssh秘钥认证简述
通常我们会使用x-shell、putty、MobaXterm等支持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的秘钥认证的更多相关文章
- ssh分发秘钥时出现错误“Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”
因为公司的服务器连接是通过xshell公钥和密码连接的,今天在ssh分发秘钥的时候出现了,下面的错误: [root@iZ2ze97cumk8opqm28h8Z .ssh]# ssh-copy-id - ...
- 克隆虚拟机+Linux互相登录+秘钥认证(四)
1.虚拟机右键管理_克隆 修改虚拟机名称后完成! 2.开机启动虚拟机 随时保存快照 3.开启两台虚拟机,进行互相登录切换!(W命令查看系统负载) 补充: IP登录: ssh IP: 例如:ssh 19 ...
- Linux SSH 免秘钥登录
SSH 免秘钥登录 ssh:是一种安全加密协议 ssh username@hostname ssh gongziyuan.com:以当前用户登录该机器(如果不是当前用户,需要这么干:ssh ...
- ansible-playbook 打通ssh无秘钥
建议参考: http://www.cnblogs.com/jackchen001/p/6514018.html 这个代码清晰,效果佳! 参考链接: http://www.cnblogs.com/cao ...
- linux下ssh免秘钥登录
1.检查防火墙是否关闭 (1)切换到root用户 (2)查看防火墙状态 service iptables status 这是没有关闭 (3)设置关闭 service iptables stop 2.检 ...
- ssh 多秘钥管理和坑
概述 很久之前就想研究一下 ssh 的多秘钥管理,今天正好有时间就研究了一下,挺简单的,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: Git - 生成 SSH公钥 , Linux 下多 ...
- SSH设置秘钥登录
设置 SSH 通过密钥登录 我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器.但是,一般的密码方式登录,容易有密码被暴力破解的问题.所以,一般我们会将 SSH 的端口设置为默 ...
- keychain实现ssh对秘钥免登陆免输入密码
Linux同一网段实现密码认证,管理. 项目:https://github.com/funtoo/keychain 01.生成秘钥 ssh-keygen -t rsa # -t rsa | ds ...
- 配置SSH无秘钥登录
[hadoop@hadoop01 ~]$ cd .ssh [hadoop@hadoop01 .ssh]$ ls authorized_keys id_rsa id_rsa.pub known_host ...
随机推荐
- commons-logging + log4j源码分析
分析之前先理清楚几个概念 Log4J = Log For Java SLF4J = Simple Logging Facade for Java 看到Facade首先想到的就是设计模式中的门面(Fac ...
- 利用tensorboard可视化checkpoint模型文件参数分布
写在前面: 上周微调一个文本检测模型seglink,将特征提取层进行冻结,只训练分类回归层,然而查看tensorboard发现里面有histogram显示模型各个参数分布,看了目前这个训练模型参数分布 ...
- vue组件传值之$attrs、$listeners
当有父组件A,子组件B,孙子组件C的时候 A-B B-C 的传值想必大家应该都非常熟悉了,通过props和$emit和$on来进行传值 那么A-C之间的传值要怎么做呢? 1.event.bus总线传值 ...
- Oracle 12cR1 RAC集群安装(一)--环境准备
基本环境 操作系统版本 RedHat6.7 数据库版本 12.1.0.2 数据库名称 testdb 数据库实例 testdb1.testdb2 (一)安装服务器硬件要求 配置项目 参数要求 网卡 每台 ...
- Spark 系列(十五)—— Spark Streaming 整合 Flume
一.简介 Apache Flume 是一个分布式,高可用的数据收集系统,可以从不同的数据源收集数据,经过聚合后发送到分布式计算框架或者存储系统中.Spark Straming 提供了以下两种方式用于 ...
- 不得不会的10点Java基础知识
1.实例变量和类变量 实例变量:指每个对象独立的,修改其中一个对象的实例变量,不会影响其他实例变量的值,变量值无 static 关键字修饰: 类变量:是指所有对象共享的,其中一个对象把该变量的值修改了 ...
- 学习Vuex 个人的一些拙见。
首先说下什么是vuex?这个是对vue的状态的管理,这样说可能有点大,其实就是vue 里面 data 的管理,或者说是多个vue 组件共有的data 的一种管理, 在任何一个组件里面,都可以修改,访 ...
- Scrapy框架解读
1. Scrapy组件a. 主体部分i. 引擎(Scrapy):处理整个系统的数据流处理,触发事务(框架核心)ii. 调度器(Scheduler):1) 用来接受引擎发过来的请求, 压入队列中, 并在 ...
- 字符串匹配算法之————KMP算法
上一篇中讲到暴力法字符串匹配算法,但是暴力法明显存在这样一个问题:一次只移动一个字符.但实际上,针对不同的匹配情况,每次移动的间隔可以更大,没有必要每次只是移动一位: 关于KMP算法的描述,推荐一篇博 ...
- 01 - zabbix | LLD自动发现
01 - zabbix | LLD自动发现 1. 原理 zabbix支持设置变量,用{#VAR_NAME}来表示.然后有一些系统保留的变量 2. 设置 2.1 交换机电源自动发现 名字写好后进进入 ...