openssl的實踐應用

    在互聯網高速發展的今天,安全是一項必不可少的工作內容. 數據在互聯網上能夠安全準確完整的傳輸是一個得大的難題.很幸運的是我們有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 []:[email protected]                 填入各種信息 證書生成



[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 []:[email protected]             ==>郵件地址[測試,瞎編的]

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 [email protected]:/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 [email protected]:/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=[email protected]    ==>證書信息

(二) CA

   2、根據節點提交的serial和subject信息來驗正與index.txt文件中的信息是否一致;

節點提交以下信息 
serial=01 
subject= /C=cn/ST=hn/O=robert/OU=cto/CN=ct3.robert.com/[email protected]

CA查看證書信息, 看節點提交的信息與本地是否一致 

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

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

   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/[email protected]     ==>反正是說來自這個信息的主機證書停用了
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 ro[email protected]:/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. 
[email protected]'s password:                ==>需要輸入密碼
boot.iso 100% 37MB 4.6MB/s 00:08      ==>傳送中

[robert@ct3 ~]$ scp ./ct3.txt [email protected]:/root/   將本地文件ct3.txt 遠程傳送至 172.16.26.5的主機上/root目錄[以root的身份] 
[email protected]'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 [email protected] 
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 [email protected] 
The key's randomart image 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 [email protected]:/root     將密鑰發送到要連接的主機上 
[email protected]'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 [email protected] 
[email protected]'s password:        ==>此時輸入遠程主機用戶密碼 
Now try logging into the machine, with "ssh '[email protected]'", 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大功告成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章