一、原理简介:

1、SSH公钥认证的基本原理:

    SSH是一个专为远程登录会话和其他网络服务提供安全性的协议。默认状态下SSH链接是需要密码认证的,可以通过添加系统认证(即公钥-私钥)的修改,修改后系统间切换可以避免密码输入和SSH认证。

    对信息的加密和解密采用不同的key,这对key分别称作private key和public key,其中,public key存放在欲登录的服务器上,而private key为特定的客户机所持有。

    当客户机向服务器发出建立安全连接的请求时,首先发送自己的public key,如果这个public key是被服务器所允许的,服务器就发送一个经过public key加密的随机数据给客户机,这个数据只能通过private key解密,客户机将解密后的信息发还给服务器,服务器验证正确后即确认客户机是可信任的,从而建立起一条安全的信息通道。

    通过这种方式,客户机不需要向外发送自己的身份标志“private key”即可达到校验的目的,并且private key是不能通过public key反向推断出来的。这避免了网络窃听可能造成的密码泄露。客户机需要小心的保存自己的private key,以免被其他人窃取,一旦这样的事情发生,就需要各服务器更换受信的public key列表。

2、要实现的效果:

   网络拓扑图如下:共4台服务器,主机名分别为flower1~4,要实现flower1到另外3台服务器的免密码登录。

   

3、基本步骤:

  1. 设置主机名。
  2. 在服务器flower1上利用ssh-keygen命令生成公钥私钥对。
  3. 将flower1上的公钥分别拷贝到flower2~4服务器上。
  4. 修改相关文件的权限。
  5. 验证免密码登录。

二、实际操作流程:

1、修改4台服务器上的主机名:

    这里以主机1为例,hostname修改为flower1。那么有几种修改方式呢?下面4种方式都可以做到,但是效果有所不同。

1:  hostname flower1     --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改

2:  echo flower1   > /proc/sys/kernel/hostname  --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改

3: sysctl kernel.hostname=flower1    --运行后立即生效(新会话生效),但是在系统重启后会丢失所做的修改

4: 修改/etc/sysconfig/network下的HOSTNAME变量  --需要重启生效,永久性修改。

    上面4种方式的区别在哪呢?

    hostname是Linux系统下的一个内核参数,它保存在/proc/sys/kernel/hostname下,但是它的值是Linux启动时从/etc/rc.d/rc.sysinit读取的。

    而/etc/rc.d/rc.sysinit中HOSTNAME的取值来自与/etc/sysconfig/network下的HOSTNAME。

    所以,如果服务器重启,就肯定以/etc/sysconfig/network为准。其余3种方式都是临时的修改。

    另外,从上面的逻辑上看,hostname的取值跟/etc/hosts中的配置没什么关系。

    所以,如果要服务器的hostname立刻生效,并保证重启后生效,该如何操作呢?

    只要修改/etc/sysconfig/network中的HOSTNAME,并在命令行执行 hostname flower1即可。

[root@iZ940419pwoZ ~]# vim /etc/sysconfig/network
[root@iZ940419pwoZ ~]# hostname flower1
[root@iZ940419pwoZ ~]# hostname
flower1
[root@iZ940419pwoZ ~]# reboot

    重启看一下效果。如法炮制,修改其余3台服务器,分别命名为flower2\flower3\flower4

2、在服务器flower1上利用ssh-keygen命令生成公钥私钥对:

    这里需要注意一点,虽然flower1也是服务器,但是它是作为ssh客户端来进行配置的。

    在用户的主目录下执行以下命令(这里使用的是root用户,可以根据个人需要调整),连续按3次回车即可。

[root@flower1 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
df:71:f6:3e:bb:bb:6c:38:91:f4:bc:70:a1:dd:86:a9 root@flower1
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| |
| . . |
| S o Ooo|
| . . Oo*o|
| . ..=.o|
| Eo.= |
| o*B|
+-----------------+

    进入到~/.ssh目录下查看生成的文件:其中id_rsa为私钥,id_rsa.pub为公钥。

3、将flower1上的公钥拷贝到flower2~4相关目录下:

    这里使用scp命令进行复制,首先保证flower2~4下有~/.ssh目录。

    这里以flower2为例

[root@flower1 .ssh]# scp id_rsa.pub root@10.170.125.14:~/.ssh

然后到flower2机器上

# touch ~/.ssh/authorized_keys (如果已经存在这个文件, 跳过这条)
# chmod 600 ~/.ssh/authorized_keys (# 注意: 必须将~/.ssh/authorized_keys的权限改为600, 该文件用于保存ssh客户端生成的公钥,可以修改服务器的ssh服务端配置文件/etc/ssh/sshd_config来指定其他文件名)
# cat ~/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys (将id_rsa.pub的内容追加到 authorized_keys 中, 注意不要用 > ,否则会清空原有的内容,使其他人无法使用原有的密钥登录)

4、验证:

[root@flower1 .ssh]# ssh 10.170.125.14

其余几台服务器使用类似的方式修改即可。

Linux使用ssh-keygen实现SSH无密码登录的更多相关文章

  1. CentOS SSH安全和配置无密码登录

    CentOS ssh默认监听端口 22端口,允许root用户ssh登录.server投入生产后很有必要更改默认ssh监听端口和禁止root登录. 步骤1:确认安装有ssh包 [appuser@su17 ...

  2. 如何在Linux上设置SSH密码以进行无密码登录(转)

    ssh(secure shell)广泛用于远程登录Linux服务器.当我们使用ssh登录到远程系统时,它会提示输入密码,然后只允许我们登录到服务器.有时我们需要配置应用程序或脚本(主要是shell脚本 ...

  3. ssh 无密码登录 非相同用户

    场景,机器A 用户a,想登录机器B ,机器B上没有用户a,有用户b. 已知机器B的用户密码,可以这么做. 实验:两台机器都是linux centos的系统. 在机器A上生成a用户的密钥. ssh-ke ...

  4. Linux:实现Hadoop集群Master无密码登录(SSH)各个子节点

    以下所介绍的安装方式都是在线安装方式,如果你需要连网请参考:Linux:宿主机通过桥接方式连接的VMware内部Linux14.04虚拟机(静态IP)实现上网方案 环境: OS:Linux Ubunt ...

  5. linux下开启SSH,并且允许root用户远程登录,允许无密码登录

    参考:http://blog.csdn.net/jia0511/article/details/8237698 1. 允许root用户远程登录 修改ssh服务配置文件 sudo vi /etc/ssh ...

  6. ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访问(转)

    转自:http://blog.csdn.net/pennyliang/article/details/8556662 ssh-keygen+ssh-copy-id 在linux下实现ssh无密码登录访 ...

  7. linux ssh scp无密码登录

    一. 应用场景 假如你Linux Client是客户端, Server为服务器,用户名为user.现在要配置从Client到Server的无密码SSH登录或者无密码的scp拷贝. 例如客户端Clien ...

  8. Linux实现SSH无密码登录(对目录权限的设置非常详细,可以参考一下)

    假设服务器IP地址为192.168.1.1,机器名:cluster.hpc.org 客户端IP地址为172.16.16.1,机器名:p470-2.wangrx.sioc.ac.cn 客户端用户yzha ...

  9. 【原创】Linux服务器集群通过SSH无密码登录

    SSH 无密码授权访问slave集群机器 1. 安装SSH,所有集群机器,都要安装SSH环境介绍:  Master : CNT06BIG01 192.168.3.61 SLAVE 1: CNT06BI ...

  10. SSH无密码登录:只需两个简单步骤 (Linux)

    最后更新 2017年4月8日 分类 最新文章 服务器安全 标签 RSA SSH Key 非对称加密 如果你管理一台Linux服务器,那么你就会知道每次SSH登录时或者使用scp复制文件时都要输入密码是 ...

随机推荐

  1. 【bzoj3505】 Cqoi2014—数三角形

    http://www.lydsy.com/JudgeOnline/problem.php?id=3505 (题目链接) 题意 给定一个n*m的网格,请计算三点都在格点上的三角形共有多少个. Solut ...

  2. bzoj 4318 OSU!

    期望dp. 考虑问题的简化版:一个数列有n个数,每位有pi的概率为1,否则为0.求以每一位结尾的全为1的后缀长度的期望. 递推就好了. l1[i]=(l1[i-1]+1)*p[i]+0*(1-p[i] ...

  3. 了解了下 Google 最新的 Fuchsia OS

    就是看到篇报道,有点好奇,就去FQ挖了点东西回来. 我似乎已开始就抓到了重点,没错,就是 LK . LK 是 Travis Geiselbrecht 写的一个针对 ARM 的嵌入式操作系统,开源的.点 ...

  4. BZOJ3110: [Zjoi2013]K大数查询

    喜闻乐见的简单树套树= =第一维按权值建树状数组,第二维按下标建动态开点线段树,修改相当于第二维区间加,查询在树状数组上二分,比一般的线段树还短= =可惜并不能跑过整体二分= =另外bzoj上的数据有 ...

  5. C#之字符串篇

    大杂烩 一.类型转换    字符串转整形: int a = int.Parse(""); //不能转换null int b = Convert.ToInt32("&quo ...

  6. Python Day8

    Socket Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型 ...

  7. arguments

    arguments 转数组 通常使用下面的方法来将 arguments 转换成数组: Array.prototype.slice.call(arguments); 还有一个更简短的写法: [].sli ...

  8. 查看修改Linux时区和时间

    查看/修改Linux时区和时间 一.时区 1. 查看当前时区 date -R 2. 修改设置时区 方法(1) tzselect 方法(2) 仅限于RedHat Linux 和 CentOS timec ...

  9. RESTEasy-Rest服务框架

    什么是 RESTEasy RESTEasy 是 JBoss 的一个开源项目,提供各种框架帮助你构建 RESTful Web Services 和 RESTful Java 应用程序.它是 JAX-RS ...

  10. 关于跨域名的信息共享P3P实例

    首先我这里用到了redis 和 p3p技术.当然任意的nosql都可以满足 模拟的一个登陆访问的客户端. <?php session_start(); $get = $_GET; ') { $t ...