ssh基于密钥的认证及实现

ssh登录认证方式介绍

大致有以下两种

  • 基于口令的认证
    这种认证方式就是通过ssh指令以指定用户名、指定端口等信息后,待连接建立完成,需要输入用户名对应的口令来完成认证。一般形如:

[root@localhost ~]# ssh -l lantian 192.168.1.201   #-l表示指定登录用户名
The authenticity of host '192.168.1.201 (192.168.1.201)' can't be established.
RSA key fingerprint is 04:2b:f5:62:4a:e6:8a:17:2b:7f:a8:c2:97:f9:d7:c6.
Are you sure you want to continue connecting (yes/no)? yes #回答yes继续连接,一般第一次与主机建立连接时会有此提示
Warning: Permanently added '192.168.1.201' (RSA) to the list of known hosts.
lantian@192.168.1.201's password:    #输入密码完成登录
Last login: Wed Jan  4 21:52:51 2017 from 192.168.1.102
  • 基于密钥的认证
    实现基于密钥的认证,在登录过程中不需要输入密码,客户端和ssh服务端以密钥对进行认证,不在网络中传输用户名和密码信息,其公钥存储于ssh服务端,私钥当然是存储在客户端本地的。认证通过后才能登录成功。基于密钥的认证在我们常用的终端软件上设置好以后,我们在连接Linux主机时可自动登录,而且比常规ssh口令登录更加安全,而且服务器之间ssh登录也可以启用这种方式省去了输入口令的过程,而且在修改账号密码后也能继续使用原来的密钥进行认证。

  • 实现基于密钥的认证

  • 服务器之间实现密钥认证

    一般来说,要实现将主机A作为客户端,登录作为ssh服务端的主机B就需要有如下操作:

    • 以账户a身份登录主机A

    • 在主机A上生成a账户的密钥对

    • 将a账户的公钥注册到主机B目标账户b的~/.ssh/authorized_keys文件中

    • 将主机B的sshd启用公钥认证

    • 验证主机A是否可以通过密钥认证的方式登录主机B
      这样实现的效果是:先以a的身份登录主机A,然后在a上可以以b的身份通过密钥认证的方式登录到主机B。

  • 以下以两台服务器test1和test2为例,实现它们之间以lantian这个账号可以密钥登录。

  • 在test1和test2上分别生成它们各自的密钥对

test1: 
[lantian@test1 ~]$ ssh-keygen -t dsa   #使用ssh-keygen工具生成test1上lantian账号的密钥对,-t指定加密算法为dsa 
Generating public/private dsa key pair. 
Enter file in which to save the key (/home/lantian/.ssh/id_dsa):   #指定密钥对的保存位置,默认为当前用户的家目录下的./ssh目录 
Enter passphrase (empty for no passphrase): #设置密钥的密码,设置以后每次使用到这个密钥都会需求输入密码,不设置就留空 
Enter same passphrase again:  
Your identification has been saved in /home/lantian/.ssh/id_dsa. 
Your public key has been saved in /home/lantian/.ssh/id_dsa.pub. 
The key fingerprint is: 
51:b1:7c:b4:78:7e:f4:fa:dd:24:04:82:bc:81:47:a4 lantian@test1  #这一指纹信息的最后部分表明了密钥的身份必须是:test1主机上的lantian账户。 
 
test2: 
[lantian@test2 ~]$ ssh-keygen -t dsa 
Generating public/private dsa key pair. 
Enter file in which to save the key (/home/lantian/.ssh/id_dsa):  
Enter passphrase (empty for no passphrase):  
Enter same passphrase again:  
Your identification has been saved in /home/lantian/.ssh/id_dsa. 
Your public key has been saved in /home/lantian/.ssh/id_dsa.pub. 
The key fingerprint is: 
c3:63:24:29:dc:7b:12:59:d5:a2:c2:e1:72:e0:ea:9e lantian@test2  #此密钥对所有者为test2中的lantian账户。 

查看test1和test2各自的公钥
test1:
[lantian@test1 .ssh]$ ll ~/.ssh
total 16
-rw------- 1 lantian lantian 1116 Jan  4 21:05 authorized_keys
-rw------- 1 lantian lantian  668 Jan  5 11:38 id_dsa  #lantian的私钥
-rw-r--r-- 1 lantian lantian  603 Jan  5 11:38 id_dsa.pub #lantian的公钥
-rw-r--r-- 1 lantian lantian  395 Dec 30 23:47 known_hosts

test2:
[lantian@test2 .ssh]$ ll ~/.ssh
total 16
-rw-------. 1 lantian lantian 1117 Jan  4 21:54 authorized_keys
-rw-------. 1 lantian lantian  668 Jan  5 11:57 id_dsa     #lantian的私钥
-rw-r--r--. 1 lantian lantian  603 Jan  5 11:57 id_dsa.pub #lantian的公钥
-rw-r--r--. 1 lantian lantian  397 Dec  6 20:33 known_hosts

分别在test1和test2上注册对方的公钥并进行登录验证

[lantian@test1 .ssh]$ ssh-copy-id -i id_dsa.pub lantian@test2  #使用这一指令实现公钥自动注册,-i指明要将哪个公钥注册到对方服务器上,lantian指明是要注册到对方服务器哪个账户下。
The authenticity of host 'test2 (192.168.1.201)' can't be established.
RSA key fingerprint is 04:2b:f5:62:4a:e6:8a:17:2b:7f:a8:c2:97:f9:d7:c6.
Are you sure you want to continue connecting (yes/no)? yes
/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
lantian@test2's password:             #需要先输入一次密码进行登录

Number of key(s) added: 1  #显示注册了一个key文件

Now try logging into the machine, with:   "ssh 'lantian@test2'"
and check to make sure that only the key(s) you wanted were added. #提示已经注册完成,可以进行验证
[lantian@test1 .ssh]$ ssh lantian@test2
Last login: Wed Jan  4 22:58:28 2017 from 192.168.1.201 
[lantian@test2 ~]$           #成功从test1通过密钥认证登录test2

test2:
[lantian@test2 .ssh]$ ssh-copy-id -i id_dsa.pub lantian@test1
lantian@test1's password: 
Now try logging into the machine, with "ssh 'lantian@test1'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

[lantian@test2 .ssh]$ ssh lantian@test1
Last login: Thu Jan  5 12:15:30 2017 from test2
[lantian@test1 ~]$       #从test2通过密钥认证成功登录test1
  • xshell实现基于密钥认证

    • 在xshell软件中选择“工具”,然后选择“新建用户密钥生成向导”
      ssh基于密钥的认证及实现

    • 选择生产密钥的参数,图中选择的是DSA加密算法,密钥长度2048位。
      ssh基于密钥的认证及实现

    • 密钥对生成成功
      ssh基于密钥的认证及实现

    • 给用户私钥取名,设置密码(可以不设置密码)
      ssh基于密钥的认证及实现

    • 保存公钥为某文件,文件名保持默认即可
      ssh基于密钥的认证及实现

    • 密钥对创建完成
      ssh基于密钥的认证及实现

    • 确认服务器端配置文件/etc/ssh/sshd_config中启用了PubkeyAuthentication和AuthorizedKeysFile。
      这里只需要确认这两项不是配置为no且未被注释掉即可,配置文件中默认为这两项即为yes,尽管其前面有#,初始状态下的/etc/ssh/sshd_config中的内容都可以理解为sshd的默认配置。
      ssh基于密钥的认证及实现

    • 将xshell生成的公钥添加到/home/lantian/.ssh/authorized_keys文件中
      打开之前保存下来的公钥文件,然后复制,在vim authorized_keys时粘贴过去。

    • 在xshell中进行登录验证
      在xshell中使用ssh lantian@ ,弹出登录框时,选择“Public key",然后选择刚生成的私钥,如果有设置私钥密码一并输入密码,然后”确定“即可建立连接。
      ssh基于密钥的认证及实现
      也可在xshell中新建会话时,即指定此会话的身份验证方式为Public key,以后在打开这一会话时就会自动登录,而不用再去手动选择Public key。

  • SecureCRT实现基于密钥认证
    SecureCRT要实现基于密钥的认证,方法和xshell大同小异。先是生成密钥对,然后将公钥注册到SSH服务器,同时在建立的会话属性,认证方法处只选择”Public key“,如下所示:
    ssh基于密钥的认证及实现
    需要注意的是SecureCRT生成密钥时,格式选择为”openssh format"。其生成公钥文件,只能从其保存的文件Identity.pub(默认文件名,可按需修改)文件中查看,只能从它复制,然后在vim authorized_keys时粘贴过去,无法在key生成工具处直接复制。

简单地总结一下:要想实现A机器的a账户密钥认证登录B机器的b账户上,取决于A机器a账户是否保存的有a的私钥,并且B机器b账户中是否保存有a的公钥。


以上即是ssh密钥登录实现的简单介绍。

原创文章,作者:N24_lantian,如若转载,请注明出处:http://www.178linux.com/65950

(0)
N24_lantianN24_lantian
上一篇 2017-01-05
下一篇 2017-01-05

相关推荐

  • N26-第十三周

    1、建立samba共享,共享目录为/data,要求:(描述完整的过程)  1)共享名为shared,工作组为magedu;  2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;  3)添加samb…

    Linux干货 2017-06-01
  • vi(vim)编辑器的使用

    vim编辑器:全屏编辑器,模式编辑器 vim模式:     编辑模式:     输入模式:     末行模式:     转换模式:      &nbs…

    Linux干货 2016-08-15
  • Clonezilla(再升龙)系统备份还原使用

      实验一、单机Centos 系统利用Clonezilla手动备份和还原(VMware vSphere) 实验二、利用Clonezilla+DRBL网络备份和还原   一、简介 DRBL(Diskless Remote Boot in Linux)中文名“企鹅龙”,是基于GNU GPL协议授权下的开源项目,可以实现客户机的远程启动及多客户…

    Linux干货 2015-10-27
  • N22-love cat第19周 – 基于Apache + Tomcat +2种模式实现负载均衡以及配置集群seesion服务

      基于Apache+Tomcat实现负载均衡和集群服务 一、概念     从Tomcat权威指南中的测试数据,我们不难发现,对于静态页面的数据,Tomcat的处理速度比Apache要快很多,所以为什么要整合apache虽然在处理静态页面速度上比Apache快,但是Tomcat经不起大的并发量容易死。为此,我们就需要A…

    Linux干货 2016-08-29
  • 马哥教育网络班22期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登陆多次,则只显示一次即可。     who | cut -d' ' -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。     who | sort -t' ' -k4 | …

    Linux干货 2016-08-29
  • 计算机的组成介绍

    一,什么是计算机?     计算机(computer)俗称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 二,发展历史 阶段 时期(年) 主要器件 特征 应用领域发展 第一代 1946—1958 电子管数字机 电子管,机…

    2016-10-29