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 15:50
下一篇 2017-01-05 16:57

相关推荐

  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-29
  • 第四周练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限 # cp -a /etc/skel /home/tuser1 # chmod -R go= /home/tuser1 2、编辑/etc/group文件,添加组hadoop #vim /etc/group #hadoop:x:5…

    Linux干货 2017-10-21
  • 马哥教育网络班21期+第5周作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行(以/boot/grub2/grub.cfg代替); [root@localhost ~]# grep '^[[:space:]]\+' /boot/grub2/grub.cfg    load_e…

    Linux干货 2016-08-08
  • bash功能特性五 重定向和管道

    一、管道     使用“|”符号来实现管道功能;管道可以实现在一行中处理使用管道符号连接的多个命令,后面的命令使用前面命令的输出结果做为处理对象。 二、数据流重定向     数据输入和输出的类型:         标准输入(std…

    Linux干货 2015-04-21
  • 压缩及解压缩工具

    压缩和解压缩工具      压缩比      目的:时间换空间      CPU的时间 –> 磁盘空间 常见的压缩及解压缩工具: compress/uncompress, .Z gzip/gunzip, .gz bzip2…

    Linux干货 2016-08-22
  • shell脚本编写-1练习题

    1、编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本,CPU型号,内存大小,硬盘大小 #!/bin/bash echo “the hostname is:`hostname`” echo “the ip address is:`ifconfig | sed –n ‘2p’ |sed…

    Linux干货 2016-08-15