在互联网高速发展的今天,安全是一项必不可少的工作内容. 数据在互联网上能够安全准确完整的传输是一个得大的难题.很幸运的是我们有openssl这样的解决方案,它能实现众多的加密算法,为我们的数据安全保驾护航.

    我们先了解一下openssl的基本用法.

openssl支持对称加密,和单向加密

 对称加密:

子命令

            gpg

            openssl

            enc

算法:DES, 3DES, AES, Blowfish, Twofish, RC6, idea, CAST5

         对称加密是可以是密钥对加密, 有密钥其中的一个加密得用密钥的另一半解密

        也可以是同一个密钥加密解密

单向加密:

    有不可逆的特性,而且是定长输出

    算法:md5,sha1,sha256,sha384,sha512,


我们来做一些案例说明

对称加密

[root@www tmp]# openssl enc -e -des3 -a -salt -in ./messages -out ./messages.jm 中间会交互输入密码

enc 是openssl的子命令,指对称加密用 , 能还原  

-des3 加密算法

-a base64 的编码方式

-salt "加盐"

-e 加密

-d 解密 

-in url 要加密的文件

-out 输出的密文文件

[root@www tmp]# openssl enc -d -des3 -a -salt -in messages.jm -out messages.jlm    同样会交互输入密码以解密

和加密不同的是有加密的选项 -e 改成了 -d ,输入的是密文文件,还原解密明文 ,其它的选项以及参数要和加密时一样,否则解密结果不对

单项加密

[root@www tmp]# md5sum messages 
c23ffe42fdb66c39a7447629e8295f1d messages

[root@www tmp]# openssl dgst -md5 messages 
MD5(messages)= c23ffe42fdb66c39a7447629e8295f1d

dgst 是单项加密

-md5 加密算法

           还有这么多种加密算法 -md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1

                                                            -1 表示使用md5 算法加密

[root@www tmp]# openssl passwd -1 -salt 1234567e       

通过openssl 的子命令 passwd   的md5 算法,加点 "盐" 1234567e 得到密码


Password: 
$1$1234567e$rBE86JiDGHwdgMmlwwWYc0

passwd子命令

-1 选项是指用md5加密

-salt 指加盐码

[root@www tmp]# openssl rand -base64 6 
6xnBZ8ZN 
[root@www tmp]# openssl rand -hex 6 
f818d9e06072

rand子命令    生成随机字符

-base64 #    base64编码选项  后面通常跟一个长度选项 

-hex #     hex编码选项 后面也是跟一个长度选项 

[root@www tmp]# openssl passwd -1 -salt `openssl rand -hex 4` 
Password: 
$1$17482cc8$xMw7laryfvFWDGtaDRnCL. =>组合使用,通过openssl 的子命令rand的hex编码生成随机字串


生成密钥:

(umask 077; openssl genrsa -out ./abc.txt -des3)在当前目录下生成一个权限为700的以-des3生成的密钥 

genrsa 子命令

 -des encrypt the generated key with DES in cbc mode

 -des3 encrypt the generated key with DES in ede cbc mode (168 bit key)

 -idea encrypt the generated key with IDEA in cbc mode

 -seed   encrypt PEM output with cbc seed 

 -aes128, -aes192, -aes256

                 encrypt PEM output with cbc aes

 -camellia128, -camellia192, -camellia256

                 encrypt PEM output with cbc camellia   有各种的加密算法

  提出公钥: 

[root@www tmp]# openssl rsa -in ./abc.txt -noout -pubout -text 

rsa 子命令

-in 来源的加密文件

-noout 不输出编码版本 

-pubout 输出公钥

-text 以文本输出

Enter pass phrase for abc.txt: 
Private-Key: (1024 bit) 
modulus: 
00:d9:e7:d5:29:b3:40:23:f7:44:b8:52:90:61:41: 
a8:a9:73:80:4f:01:70:6a:5b:e9:9f:0a:2c:1f:d4: 
27:57:82:b9:44:51:d6:48:5f:99:06:75:94:54:ef: 
8e:88:62:9d:d1:fb:d7:3d:5f:fd:8d:a9:07:e1:56: 
15:3f:6b:9a:3b:a8:c1:ad:d1:aa:32:74:c5:88:54: 
59:8b:47:26:58:ba:e3:e8:d7:69:25:11:76:bd:92: 
5e:e2:87:2d:4d:ef:c5:a3:90:67:35:a7:99:36:44: 
db:2b:bc:b6:a4:f2:a3:f0:86:7b:c7:9e:6f:05:6f: 
96:40:cc:ad:39:77:b8:c4:6d 
publicExponent: 65537 (0x10001)   ........==>后面好长好长,这里省略

以上是输出结果,如果仅想看输出的公钥,按以下方式执行

[root@www tmp]# openssl rsa -in abc.txt -pubout      [不要 -noout  -text ]

Enter pass phrase for abc.txt: 
writing RSA key 
-----BEGIN PUBLIC KEY----- 
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZ59Ups0Aj90S4UpBhQaipc4BP 
AXBqW+mfCiwf1CdXgrlEUdZIX5kGdZRU746IYp3R+9c9X/2NqQfhVhU/a5o7qMGt 
0aoydMWIVFmLRyZYuuPo12klEXa9kl7ihy1N78WjkGc1p5k2RNsrvLak8qPwhnvH 
nm8Fb5ZAzK05d7jEbQIDAQAB 
-----END PUBLIC KEY-----



但是以上的加密方式,无论哪一种都无法同时保证双方的主机通讯的保密性和完整性.

那么此时我们就需要有一种安全机制,能够使通讯双方互换密钥,已实现安全通讯

下面我们就以robert和judy的通讯作为例子,讲解双方安全通讯的过程.

互联网上各主机的公钥是公开的,任何主机可随意获得.

robert为了保证与judy的通讯的数据完整性,以及可靠性,用单向加密算法,得到数据报文的指纹信息

再用自己的私钥对报文的指纹信息做对称加密[即数字签名]

此时再将数据报文和报文的指纹信息对称加密结果 用密钥做对称加密[固然可以用judy的公钥对二者加密,但是速度极慢,效率极低]. 此时要解决的问题只是如何将对称加密的密钥交给judy的问题了.

那么我们再对对称加密的密钥用judy的公钥加密.将加密结果和对称加密过的数据一并发送给judy.


judy收到报文后,用自己的私钥解密,得到对称加密的密钥,再用对称加密的密钥解密对称算法得到的结果. 此时就能得到原报文,和robert私钥加密的报文指纹信息. 

judy只需要对原报文做同样的单项加密就能得到原报文的指纹信息, 再用robert的公钥解密加密过的报文指纹信息,就能还原原报文的指纹信息,  将两种方法得到的指纹信息一比对,如果一致,则说明此次通讯安全完成.

下图是 robert和judy通讯过程的图解.


wKioL1PeMFCj9pROAAd7jG9uyQ4753.jpgwKiom1Pdn9Dz0H8nAAPhMetXX7U805.jpg


但是问题依然存在,robert怎么就能知道自己发送的消息就一定是到了judy的主机上呢? 中间有没有可能让别人路由截获,有人冒judy之名与robert通讯呢?这就需要用到了一种第三方的认证机制.

    国际上有第三方的权威认证机构ca. judy向ca申请证书. 申请时明确告知自己的所在国家,省份,城市,组织名称,部门名称,所在域名等信息. ca核实后给judy颁发证书.

    robert在与judy通讯的时候首先下载judy的证书,同时要据证书的信息到ca服务器上去验证, 如果验证信息真实有效,还在证书使用期,那么就可以确认judy主机的身份了. 

那么我们又如何知道ca认证的主机是否直实呢? 很简单,下载ca的证书查看证书信息就行了. 那么ca的证又从何而来呢? 大家都相信ca的权威性,所以ca自己给自己发证.


wKiom1Pdsq3yE81-AAKERTYJsXM104.jpg


如果公司内部需要这样的一个认证机制,那怎么办呢?去ca申请证书代价不菲.成本太高. 解决方案很简单,自行建立 ca认证服务器.下面介绍一下ca服务器的建立过程,以及作为客户机的申请,ca服务器申批的过程.

为了更深入的了解ca的建立机制,更方便的运用,我们先来了解一下ca创建所需要用到的配置文件

/etc/pki/tls/openssl.cnf, 需要注意的配置项有以下

[配置文件]

dir = /etc/pki/CA # Where everything is kept               CA工作目录

certs = $dir/certs # Where the issued certs are kept    存放证书数据

crl_dir = $dir/crl # Where the issued crl are kept        存放证书吊销列表

database = $dir/index.txt # database index file.        发出证书索引

#unique_subject = no # Set to 'no' to allow creation of

                    # several ctificates with same subject.

new_certs_dir = $dir/newcerts # default place for new certs.

certificate = $dir/cacert.pem # The CA certificate

serial = $dir/serial # The current serial number                证书序列号

crlnumber = $dir/crlnumber # the current crl number    证书吊销列表索引

                    # must be commented out to leave a V1 CRL

crl = $dir/crl.pem # The current CRL

private_key = $dir/private/cakey.pem# The private key    私钥位置    

RANDFILE = $dir/private/.rand # private random number file

默认请求配置      ==>请求配置我已更改为我喜好的配置

[ req_distinguished_name ]

countryName = Country Name (2 letter code)

countryName_default = cn    ==>默认国家编码 cn

 

localityName_default = zz ==>默认城市名 zz

0.organizationName = Organization Name (eg, company)

0.organizationName_default = robert 默认公司(组织)名称

 

#organizationalUnitName_default =

organizationalUnitName_default = cto 所属部门


一、建立CA服务器:

   1、生成密钥

  (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)   2048是密钥的长度

==>没错,就这个命令,在 /etc/pki/CA/private 生成一个密钥文件cakey.pem [因为配置文件就是叫这个名字,所以必须生成一个叫cakey.pem的文件]


  2、自签证书

   # openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365      (cacert.pem  这个文件名也是配置文件定义的)

自签证书时,指定私钥文件,会自动提取出公钥文件, 并可指定有效期限 365天

req 子命令 

    -new 生成新请求

    -x509  创建自签署证书   这是专用选项,只有自签才有用  

    -key 指明私钥文件 /path/from/somefile

    -out 证书存入位置    /path/to/somefile

   -days 证书有效期, 只有在和x509一起用才有效,因为申请的证书不能自己决定有效时长,除非是自己给自己发证书

[root@www private]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365  执行此命令
                         签署  新请求  自签选项   来源私钥文件                               生成的证书文件

You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Country Name (2 letter code) [XX]:cn 
State or Province Name (full name) []:hn 
Locality Name (eg, city) [Default City]:zz 
Organization Name (eg, company) [Default Company Ltd]:robert 
Organizational Unit Name (eg, section) []:cto 
Common Name (eg, your name or your server's hostname) []:ca2.robert.com 
Email Address []:admin@robert.com                 填入各种信息 证书生成



[root@www CA]# pwd 
/etc/pki/CA ==>在证书目录下
[root@www CA]# ls 
cacert.pem certs crl index.txt newcerts private serial    ==>果然有证书文件

 3、初始化工作环境      索引文件  序列号文件

   # touch /etc/pki/CA/{index.txt,serial}  ==>要想工作,就得有这两个文件 index.txt 索引文件,记录着颁发的证书信息

   # echo 01 > /etc/pki/CA/serial    ==>序列号文件,要指明从哪里开始


二、节点申请证书:

   (一) 节点生成请求

    1、生成密钥对儿

    # (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)

    2、生成证书签署请求 

[root@www httpd]# openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr 
You are about to be asked to enter information that will be incorporated 
into your certificate request. 
What you are about to enter is what is called a Distinguished Name or a DN. 
There are quite a few fields but you can leave some blank 
For some fields there will be a default value, 
If you enter '.', the field will be left blank. 
----- 
Country Name (2 letter code) [cn]:             ==>使用配置文件的默认信息
State or Province Name (full name) [hn]:      ==>使用配置文件的默认信息
Locality Name (eg, city) [zz]:                  ==>使用配置文件的默认信息
Organization Name (eg, company) [robert]:      ==>使用配置文件的默认信息
Organizational Unit Name (eg, section) [cto]:      ==>使用配置文件的默认信息
Common Name (eg, your name or your server's hostname) []:ct3.robert.com ==>主机名[测试瞎编的,和本机保持一致]
Email Address []:ct3@robert.com             ==>邮件地址[测试,瞎编的]

Please enter the following 'extra' attributes 
to be sent with your certificate request 
A challenge password []:     ==>如果对方要签署就得要密码,此时不加密
An optional company name []:    => 图省事,空吧

 # openssl req -new -key /etc/httpd/ssl/httpd.key -out /etc/httpd/ssl/httpd.csr 

wKiom1Pd0bWDX0ANAABQHqe6Les168.jpg  用上述命令生成的证书签署请求,就做好了请求文件

    3、把签署请求文件发送给CA服务器

[root@www ssl]# scp -P 22222 ./httpd.csr robert@172.16.26.2:/tmp/  =>此处能过scp 在22222号[修改的]的ssh服务端口 以robert的普通用户 发送到/tmp下

 /etc/pki/CA/certs  ==>一般发送的证书请求发到这个目录   [或者让ca服务器创建一个目录/etc/pki/CA/csr/ , 让请求证书的用户都发到这里来 ]



CA服务器端的工作:

    签署证书

  1、验正证书中的信息;==>一般是手动验证

    2、签署证书                        请求的签署        签署证书输出  有效期300天

[root@www qishuzhengshu]# openssl ca -in ./httpd.csr -out ./httpd.crt -days 300 签署证书

wKioL1Pd03uzLXWyAASJL4jfYiA435.jpg

此时问你签不签 [没问题就签吧] 

wKioL1Pd03uwbAaQAABalGlooEU385.jpg 证书生成OK,  

wKiom1Pd0mHDOe3LAACBIG1ijHs245.jpg签署好的证书在/etc/pki/CA/newcerts目录有记录

  3、发送给请求者;

[root@www qishuzhengshu]# scp -P 22222 ./httpd.crt robert@172.16.26.3:/tmp/  

以robert用户身份发送到刚才请求的172.16.26.3 的/tmp/目录下 

mv /tmp/httpd.crt /etc/httpd/ssl   ==>请求者将证书 移到 /etc/httpd/ssl目录中

wKiom1Pd09DikCsKAADp81RP_3I727.jpg

 

三、吊销证书

   (一)节点

   1、获取证书节点[serial] 

[root@www ssl]# openssl x509 -in ./httpd.crt -noout -serial -subject 
serial=01 ==>证书节点
subject= /C=cn/ST=hn/O=robert/OU=cto/CN=ct3.robert.com/emailAddress=ct3@robert.com    ==>证书信息

(二) CA

   2、根据节点提交的serial和subject信息来验正与index.txt文件中的信息是否一致;

节点提交以下信息 
serial=01 
subject= /C=cn/ST=hn/O=robert/OU=cto/CN=ct3.robert.com/emailAddress=ct3@robert.com

CA查看证书信息, 看节点提交的信息与本地是否一致 

[root@www CA]# cat index.txt 
V 150529031250Z 01 unknown /C=cn/ST=hn/O=robert/OU=cto/CN=ct3.robert.com/emailAddress=ct3@robert.com

查看得知, 信息果然一致 [红色部分]

   3、吊销证书 [既然一致,可以吊销了]   #吊销前得有个文件存吊销编号  echo 00 > /etc/pki/CA/crlnumber

[root@www newcerts]# openssl ca -revoke /etc/pki/CA/newcerts/01.pem 
Using configuration from /etc/pki/tls/openssl.cnf 
Revoking Certificate 01. 
Data Base Updated

 

4、更新证书吊销列表

[root@www CA]# openssl ca -gencrl -out /etc/pki/CA/crl/dxca.crl 
Using configuration from /etc/pki/tls/openssl.cnf 
[root@www CA]# ls /etc/pki/CA/crl 

dxca.crl     ==>果然有吊销列表文件

5查看吊销列表文件

[root@www crl]# openssl crl -in /etc/pki/CA/crl/dxca.crl -noout -text 
Certificate Revocation List (CRL): 
Version 2 (0x1) 
Signature Algorithm: sha1WithRSAEncryption 
Issuer: /C=cn/ST=hn/L=zz/O=robert/OU=cto/CN=ca2.robert.com/emailAddress=admin@robert.com     ==>反正是说来自这个信息的主机证书停用了
Last Update: Aug 2 04:24:52 2014 GMT 
Next Update: Sep 1 04:24:52 2014 GMT 
CRL extensions: 
X509v3 CRL Number: 

Revoked Certificates: 
Serial Number: 01 
Revocation Date: Aug 2 04:20:11 2014 GMT 
Signature Algorithm: sha1WithRSAEncryption 
6c:1c:0b:74:a5:42:a7:10:1e:42:ad:9c:af:2d:57:d4:26:a5: 
4b:76:6b:85:d0:94:48:0c:1c:8a:92:90:4f:97:69:ed:85:00: 
8d:33:4f:d4:ff:4a:6a:d8:e7:62:79:f6:e9:01:b5:36:6e:e6: 
3d:3b:f1:20:12:4a:2c:12:44:5b:03:b7:f5:ad:1a:ea:aa:88: 
4b:83:c1:18:63:7a:05:75:f0:d8:22:4e:b9:07:bb:93:12:3c: 
62:b8:ce:8a:0e:e5:57:08:a1:cc:b1:ed:f5:f1:c9:aa:e2:a8: 
06:3b:25:24:67:47:fe:83:9e:89:6f:32:d4:c7:42:c9:82:aa: 
9e:c8:6b:54:17:cd:9b:81:21:b3:07:04:ea:9e:2f:23:6f:15: 
60:40:c1:9e:09:8c:98:f8:07:95:7c:2c:ae:7c:ab:3b:d3:2d: 
28:e6:d1:3b:a9:5d:aa:b2:a9:46:ef:f1:10:08:48:fa:84:1d: 
9c:6e:e7:10:0c:f8:a9:0b:23:65:c0:64:fc:9e:1f:0f:da:2a: 
c4:83:5f:a2:42:72:59:3e:80:c4:3d:c5:3b:ac:d9:c1:5d:68: 
c7:23:b5:c5:8e:f4:9b:b2:ce:59:29:dd:df:df:57:18:1f:fb: 
bb:ef:70:2e:5a:1d:0c:44:70:28:40:36:86:07:97:0e:79:cd: 
2d:d6:4a:46  

大功告成 


以上是openssl 的加密 以及其安全通讯的机制.CA服务器的建立过程.

下面来介绍一下在此基础上实现的通讯工具

SSH是一种C/S架构的服务,其服务端是SSHD

客户端的组件有

scp 远程复制文件

ssh 远程连接

sftp 基于ssh的安全文件传输系统

scp: 利用ssh协议在主机之间实现安全文件传输的工具 

[robert@ct3 ~]$ scp root@172.16.26.5:/root/boot.iso ./ 
The authenticity of host '172.16.26.5 (172.16.26.5)' can't be established. 
RSA key fingerprint is c8:b4:dc:b0:5d:8d:a5:96:31:b9:3e:27:4e:b0:36:2d. 
Are you sure you want to continue connecting (yes/no)? yes ==>;因为是第一次连接,所以会询问是否进行连接
Warning: Permanently added '172.16.26.5' (RSA) to the list of known hosts. 
root@172.16.26.5's password:                ==>需要输入密码
boot.iso 100% 37MB 4.6MB/s 00:08      ==>传送中

[robert@ct3 ~]$ scp ./ct3.txt root@172.16.26.5:/root/   将本地文件ct3.txt 远程传送至 172.16.26.5的主机上/root目录[以root的身份] 
root@172.16.26.5's password: 
ct3.txt 100% 0 0.0KB/s 00:00         ==>传输文件
[robert@ct3 ~]$

如果需要复制目录,则需要加-r 选项 [递归复制目录]  加 - p 选项 ,保持源文件的元数据信息,包括属组,属主,mode等

    -r: 复制目录时使用

    -p: 保持源文件的元数据信息,包括mode和timestamp

    -q: 静默模式

    -p PORT: 指定ssh协议监听的端口

如下,复制目录 会显示目录中的所有文件及复制过程

spacer.gif

上述过程不方便操作,有点麻烦,想要安全的传输文件,还有更方便安全的用法

基于ssh的ftp服务 => sftp

可以远程连接到对方主机的stfp服务, 通过切换路径, 查看目录下文件的方式,找到喜好的文件进行下载[ 也可以上传 ]

[robert@ct3 ~]$ sftp root@172.16.26.5 
Connecting to 172.16.26.5...  

sftp> cd /tmp
sftp> pwd 
Remote working directory: /tmp 
sftp> ls 
ks-script-5pkrEC ks-script-5pkrEC.log tmpQiWZ_a tmph2beLk  yum.log  

sftp> get ks-script-5pkrEC.log    下载此文件到本地[与本地目录名一致的地方]

Fetching /tmp/ks-script-5pkrEC.log to ks-script-5pkrEC.log

/tmp/ks-script-5pkrEC.log 100% 346 0.3KB/s 00:00 

sftp> cd /root ==>切换目录到/root家目录

sftp> ls

a.txt anaconda-ks.cfg boot.iso ct3.txt install.log

install.log.syslog mycd myiso

sftp> get a.txt     ==>下载root的文件

Fetching /root/a.txt to a.txt

sftp> put ct3.txt    ==>上传文件到远程主机

Uploading ct3.txt to /root/ct3.txt

ct3.txt                   

wKiom1Pd11aTMjJfAACQfEjnliE105.jpg

ssh服务固然安全

但是我们也得优化其服务,让其工作使人更放心,下面我们讲讲它的最佳实践需要注意的要点

sshd服务安全日志

/var/log/secure    ==>安全日志

 最佳实践:

  1、不要使用默认的22号端口;     Port 22222

  2、不要使用protocol 1;                Protocol 2

  3、限制可登录的用户                    

   白名单:

    AllowUsers user1 user2 ...

    AllowGroups grp1 grp2...

   黑名单:

    DenyUsers

    DenyGroups

  4、设定空闲会话超时时长        

   ClientAliveInterval 300

   ClientAliveCountMax 0

  5、利用防火墙设置ssh访问策略;     

  6、仅监听在特定的IP地址,而非本机所有的IP地址;[如内网地址] ListenAddress 0.0.0.0 改这里

  7、使用强密码策略

  # tr -dc A-Za-z0-9_ </dev/urandom | head -c 30 | xargs 用此命令生成随机密码作为登陆强密码

  8、使用基于密钥的认证;        ==>详见文后

  9、禁止使用空密码;         PermitEmptyPasswords no

  10、禁止root用户直接登录;    PermitRootLogin no

  11、限制ssh的访问频度    MaxAuthTries 6 

  12、做好日志,经常分析; ==>另作讨论


   -f指定保存密钥文件的位置 -P密码为空['']    ==>这两项指定,以免交互

[root@ct3 .ssh]#ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''  ==>生成密钥  -t 指类型 rsa是一种密钥类型
Generating public/private rsa key pair. 
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: 
e3:cb:d9:22:01:26:0b:82:4a:ea:5b:60:02:68:af:48 root@ct3.robert.com 
The key's randomart p_w_picpath is: 
+--[ RSA 2048]----+ 
| | 
|. | 
|+. | 
|*.o o | 
|*E = . S | 
|B + .. . | 
|o. . .. | 
| .. ...+ | 
| .. .+.. | 
+-----------------+ ==>密钥生成结果 当然光生成密钥是不够的,还需要将密钥信息写入要连接的主机上,有两种方法
 

{ 方法一  
[root@ct3 .ssh]# ls 
authorized_keys id_rsa id_rsa.pub known_hosts    ==>红字是生成的密钥
[root@ct3 .ssh]# scp ./id_rsa.pub root@172.16.26.5:/root     将密钥发送到要连接的主机上 
root@172.16.26.5's password: 
id_rsa.pub 100% 401 0.4KB/s 00:00             ==

:   ====================================>>>>此时 172.16.26.5主机接收到密钥要,要进行一个导入操作

将对方发送来的 id_rsa.pub 文件 导入到 家目录下的 .ssh/authorized_keys 文件中

spacer.gif

[root@localhost ~]# ls 
anaconda-ks.cfg a.txt boot.iso ct3.txt id_rsa.pub install.log install.log.syslog mycd myiso  
[root@localhost ~]# ls  .ssh/  

authorized_keys id_rsa id_rsa.pub known_hosts 
[root@localhost .~]# cat id_rsa.pub >>  .ssh/authorized_keys ==> 将从 172.16.26.3接收的密钥文件内容导入 .ssh/authorized_keys  文件中

                172.16.26.5主机接收到密钥要,要进行一个导入操作   <<<<===================================== 

}

{ 方法二  :   

[root@ct3 .ssh]# ssh-copy-id -i id_rsa.pub root@172.16.26.5 
root@172.16.26.5's password:        ==>此时输入远程主机用户密码 
Now try logging into the machine, with "ssh 'root@172.16.26.5'", and check in:  ==>尝试将其记录到远程主机 
.ssh/authorized_keys    保存到.ssh/authorized_keys 文件中了   

}

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

[root@ct3 .ssh]# ssh 172.16.26.5     ===>连接已将密钥导入的主机  无需输入密码,就可以连接
Last login: Wed Jul 30 22:41:28 2014 from 172.16.26.176 
[root@localhost ~]# ifconfig             ==>验证 ,看以下ip地址,没错已登陆 172.16.26.5 主机
eth0 Link encap:Ethernet HWaddr 00:0C:29:F3:FD:EB 
inet addr:172.16.26.5 Bcast:172.16.255.255 Mask:255.255.0.0   


使用window 环境的xshell软件也可以生成密钥,以安全访问远程主机

wKiom1Pd2Pbz8lpAAAI2wkDaGzU722.jpg

wKiom1Pd2PixEGOGAAFpjmC5JKg338.jpg

wKioL1Pd2hSxWmYCAAFSk-kt_Lw693.jpg

wKioL1Pd2hWSpNQ7AAHJQLBTRVc812.jpg


 保存后关闭使用xshell自带的ftp功能,将文件传到远程主机上

wKiom1Pd2S2C9Vr5AAPBe9YahZg614.jpg

由于远程主机上禁止 root 用户登陆, 现演示在普通用户 robert 上做操作 

 

在远程主机172.16.26.2上作许可操作
[root@ca2 robert]# mkdir .ssh  ==>在robert家目录下创建一个.ssh目录

[root@ca2 robert]# touch .ssh/ authorized_keys     ==>在robert家目录下创建允许密钥文件

[root@ca2 robert]# cat .ssh/id_rsa_rob_to_26.2.pub >>.ssh/authorized_keys     ==>将win7 xshell生成的公钥文件导入密钥许可文件中 

wKiom1Pd2XqiVjDuAAJK1lML3jc756.jpg

在win7的xshell上新建连接操作

wKioL1Pd2pTwkAyIAAJPyu54qHI171.jpg

一切准备就绪,只要点击确定,就能连接远程主机了

wKiom1Pd2cqDcXysAAIydSCv5xo017.jpg事实证明,连接已建立==>OK大功告成