1恐锣、安全協(xié)議SSL/TLS
SSL: Secure Socket Layer
TLS: Transport Layer Security
1995:SSL 2.0 Netscape
1996: SSL 3.0
1999: TLS 1.0
2006: TLS 1.1 IETF(Internet工程任務(wù)組) RFC 4346
2008:TLS 1.2 當(dāng)前使用
2015: TLS 1.3
這兩種協(xié)議位于傳輸層和應(yīng)用層之前的協(xié)議,用于加密數(shù)據(jù)襟己,保證數(shù)據(jù)安全的協(xié)議垂谢。
加密機制:服務(wù)器端將證書發(fā)給客戶端厦画,證書里面是CA用私鑰簽名的服務(wù)器的公鑰,客戶端因為信任CA滥朱,所以事先已經(jīng)拿到CA的公鑰根暑,客戶端用CA的公鑰解密證書,得到服務(wù)器的公鑰徙邻,客戶端會自動生成對稱秘鑰排嫌,并用服務(wù)器的公鑰加密這個對稱秘鑰,將這個對稱秘鑰傳給服務(wù)器缰犁,服務(wù)器用自己的私鑰解密也得到這個對稱秘鑰淳地,這樣雙方就可以用這個對稱秘鑰加密數(shù)據(jù)進行通訊了。
HTTPS 協(xié)議:就是“HTTP 協(xié)議”和“SSL/TLS 協(xié)議”的組合帅容。HTTP over SSL”或“HTTP over TLS”颇象,對http協(xié)議的文本數(shù)據(jù)進行加密處理后,成為二進制形式傳輸并徘。
2遣钳、openssl
- 對稱加密
工具:openssl enc
算法:3des, aes, blowfish, twofish
[root@redhat7 app]#ls
bak.sh dos.sh reset.sh scp.sh script
[root@redhat7 app]#openssl enc -e -des3 -a -salt -in bak.sh -out bak.enc 加密文件,-e是加密麦乞,-des3就是3des加密算法-a -salt是加鹽
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:
[root@redhat7 app]#ls
bak.enc bak.sh dos.sh reset.sh scp.sh script
[root@redhat7 app]#openssl enc -d -des3 -a -salt -in bak.enc -out bak ---解密文件用-d
enter des-ede3-cbc decryption password:
[root@redhat7 app]#ls
bak bak.enc bak.sh dos.sh reset.sh scp.sh script
[root@redhat7 app]#cat bak
cp -a /etc/ /app/`date "+%F-%T"`/
- 對文件進行哈希運算
[root@redhat7 app]#openssl dgst -md5 bak ---也可以進行哈希運算
MD5(bak)= 1bd8b8413eafd7d6502c763ecba53386
[root@redhat7 app]#md5sum bak ---和上面是相同的蕴茴,因為算法相同
1bd8b8413eafd7d6502c763ecba53386 bak
[root@redhat7 app]#openssl dgst -sha512 bak
SHA512(bak)= d5ea17d3c7dc100967e4a9098793f41a4e53dc2b429bf9205fbc3e65cbb58c4810a2268cbafc4fcde03f5ab33d45ff138d409977e24bd3b1ef21f6d14f652b2e
- 生成用戶加密口令
[root@redhat7 app]#openssl passwd -1 ---1就是$1,指的是md5加密算法路幸,默認生成的口令是加鹽的
Password:
Verifying - Password:
$1$u1p3rJj9$yPPNsuRQGwPl6/fo7K.fo/
[root@redhat7 app]#openssl passwd -1 -salt magedu ---也可以指定加的鹽是什么
Password:
$1$magedu$2fbALA5Hbgf9m8izrwwA//
[root@redhat7 app]#openssl passwd -1 -salt magedu
Password:
$1$magedu$2fbALA5Hbgf9m8izrwwA// ---可以發(fā)現(xiàn)鹽相同荐开,輸入的口令也相同付翁,生成的加密口令就相同
[root@redhat7 app]#openssl passwd -1 -salt mageduddffggg
Password:
$1$magedudd$3ZgvXBGsY20eqyOIBJ5F0/ ---鹽不相同简肴,輸入的口令相同,生成的加密口令也不同
- 生成隨機數(shù)
[root@redhat7 app]#openssl rand -base64 12 ---基于base64編碼機制生成隨機數(shù)
1F5TsRK4otfuKgMg
[root@redhat7 app]#openssl rand -hex 12 ---基于十六進制生成隨機數(shù)
1b1efd0bd28a1e017a1d4941
12表示字節(jié)數(shù)百侧,-hex時砰识,每個字符為十六進制能扒,相當(dāng)于4位二進制,1/2個字節(jié)辫狼,一個字節(jié)8位
- 生成秘鑰對
[root@redhat7 app]#(umask 066;openssl genrsa -out zhang.skey -des 2048) ---生成私鑰初斑,umask 066是設(shè)定私鑰的默認權(quán)限,讓私鑰
的權(quán)限低一點膨处,rsa指生成私鑰的加密算法见秤,-des是對稱秘鑰加密算
法,用來對私鑰進行對稱秘鑰加密真椿,保護私鑰的安全鹃答,2048指明生成
私鑰的位數(shù)。小括號的作用是讓umask的值只對本次有效突硝,相當(dāng)于開
了一個子進程测摔,避免對當(dāng)前shell造成影響。
[root@redhat7 app]#ll zhang.skey
-rw-------. 1 root root 1746 Sep 9 20:55 zhang.skey
[root@redhat7 app]#openssl rsa -in zhang.skey -pubout -out zhang.pubkey ---從私鑰中提取公鑰
Enter pass phrase for zhang.skey:
writing RSA key
[root@redhat7 app]#ll zhang.pubkey
-rw-r--r--. 1 root root 451 Sep 9 21:01 zhang.pubkey
- 隨機數(shù)生成器
利用鍵盤解恰、鼠標(biāo)和塊設(shè)備中斷生成的隨機數(shù)锋八,保存在熵池中。
/dev/random:僅從熵池返回隨機數(shù)护盈;隨機數(shù)用盡挟纱,阻塞
/dev/urandom:從熵池返回隨機數(shù);隨機數(shù)用盡腐宋,會利用軟件生成偽隨機數(shù),非阻塞
兩個都可以用來生成隨機數(shù)樊销,只是第一個隨機數(shù)用完時會終端。
[root@redhat7 app]#cat /dev/urandom |tr -dc "[[:alnum:]]"|head -c 10 ---生成隨機數(shù)
ZnDsTH9CRS
3脏款、CA的配置文件
[root@redhat7 app]#cat /etc/pki/tls/openssl.cnf
---查看一下openssl的配置文件围苫,這個配置文件中有關(guān)于CA搭建的配置說明
4、如何搭建CA和服務(wù)器向CA申請證書
centos7為搭建CA主機撤师,cenots6為服務(wù)器剂府,向CA申請證書
1、生成CA的私鑰
[root@redhat7 CA]#(umask 066;openssl genrsa -out private/cakey.pem 2048)
--在這里沒有對私鑰進行加密剃盾,為了試驗方便
[root@redhat7 CA]#tree
.
├── certs
├── crl
├── newcerts
└── private
└── cakey.pem --發(fā)現(xiàn)已經(jīng)生成
4 directories, 1 file
2腺占、生成自簽名證書
[root@redhat7 CA]#openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 7300 ---req請求, -new新的證書痒谴,-x509專用
于CA生成自簽名證書衰伯,-key指明生成自簽名證書時用到的私鑰文
件,這里沒有用公鑰积蔚,是因為私鑰里面有公鑰 -out指明輸出的證書文
件
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) []:henan ---必須和后面匹配
Locality Name (eg, city) [Default City]:zhengzhou
Organization Name (eg, company) [Default Company Ltd]:magedu.com ---必須和后面匹配
Organizational Unit Name (eg, section) []:shuaiguo
Common Name (eg, your name or your server's hostname) []:magedu ----這里頒發(fā)者的名字
Email Address []:
到此CA就搭建好了意鲸,就可以給服務(wù)器頒發(fā)證書了
3、切換到centos6,生成私鑰怎顾,這里私鑰文件沒有具體的規(guī)定放到哪里读慎,可以在app下創(chuàng)建一個private/目錄
[root@centos6 app]#(umask 066;openssl genrsa -out /app/private/app.key 2048)
4、生成證書請求文件
[root@centos6 app]#openssl req -new -key private/app.key -out app.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) [XX]:cn ---和上面的要相同
State or Province Name (full name) []:henan --和上面的要相同
Locality Name (eg, city) [Default City]:luoyang
Organization Name (eg, company) [Default Company Ltd]:magedu.com --和上面要相同
Organizational Unit Name (eg, section) []:beiguoxia
Common Name (eg, your name or your server's hostname) []:www.magedu.com ---這個名字就是將來給網(wǎng)站用的域名槐雾,必須是唯一的夭委,可以用泛域名*.magedu.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
5、把證書請求文件傳給CA
[root@centos6 app]#scp app.csr 172.18.21.7:/etc/pki/CA/certs.csr
可以在centos7上創(chuàng)建一個目錄certs.csr募强,專門放證書請求文件株灸,便
于管理
root@172.18.21.7's password:
app.csr 100% 1017 1.0KB/s 00:00
6、頒發(fā)證書
[root@redhat7 certs.csr]#openssl ca -in app.csr -out /etc/pki/CA/certs/app.crt -days 365 ---頒發(fā)證書
Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/index.txt: No such file or directory
unable to open '/etc/pki/CA/index.txt' ---發(fā)現(xiàn)沒有創(chuàng)建索引數(shù)據(jù)庫文件
140336389027744:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/pki/CA/index.txt','r')
140336389027744:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
[root@redhat7 certs.csr]#touch /etc/pki/CA/index.txt --創(chuàng)建之后繼續(xù)執(zhí)行
[root@redhat7 certs.csr]#openssl ca -in app.csr -out /etc/pki/CA/certs/app.crt -days 365
Using configuration from /etc/pki/tls/openssl.cnf
/etc/pki/CA/serial: No such file or directory ---發(fā)現(xiàn)沒有指明證書編號的文件
error while loading serial number
140336405546912:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('/etc/pki/CA/serial','r')
140336405546912:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
[root@redhat7 certs.csr]#echo 01 > /etc/pki/CA/serial ---創(chuàng)建證書編號的文件擎值,并指明編號蚂且,編號必須是兩位數(shù)
[root@redhat7 certs.csr]#openssl ca -in app.csr -out /etc/pki/CA/certs/app.crt -days 365 ---再次執(zhí)行就可以了
[root@redhat7 CA]#tree
.
├── cacert.pem
├── certs
│ └── app.crt ---證書文件已經(jīng)生成
├── certs.csr
│ └── app.csr
├── crl
├── index.txt
├── index.txt.attr
├── index.txt.old
├── newcerts ---又生成了一個新的證書文件,這兩個文件是相同的
│ └── 01.pem
├── private
│ └── cakey.pem
├── serial
└── serial.old
5 directories, 10 files
[root@redhat7 CA]#cat index.txt ---查看一下數(shù)據(jù)庫幅恋,V表示證書是有效的
V 180909143602Z 01 unknown /C=cn/ST=henan/O=magedu.com/OU=beiguoxia/CN=www.magedu.com
[root@redhat7 CA]#cat serial ---下一個證書的編號
02
[root@redhat7 CA]#scp certs/app.crt 172.18.21.6:/app
把證書傳給服務(wù)器就可以了
[root@centos6 app]#openssl x509 -in app.crt -noout -text ---查看證書杏死,以文本方式顯示
[root@centos6 app]#openssl x509 -in app.crt -noout -dates
notBefore=Sep 9 14:36:02 2017 GMT
notAfter=Sep 9 14:36:02 2018 GMT
[root@centos6 app]#openssl x509 -in app.crt -noout -subject
subject= /C=cn/ST=henan/O=magedu.com/OU=beiguoxia/CN=www.magedu.com
[root@centos6 app]#openssl x509 -in app.crt -noout -issuer
issuer= /C=cn/ST=henan/L=zhengzhou/O=magedu.com/OU=shuaiguo/CN=www.magedu.com
也可以單獨的查看
[root@redhat7 CA]#openssl ca -status 01
Using configuration from /etc/pki/tls/openssl.cnf
01=Valid (V)
查看證書某個編號的信息,可以看到證書是可用的
- cenots6做為子CA捆交,給服務(wù)頒發(fā)證書如何實現(xiàn)
1淑翼、首先centos6做為子CA,要搭建子CA
[root@centos6 app]#cd /etc/pki/CA/
[root@centos6 CA]#ls
certs crl newcerts private
[root@centos6 CA]#touch index.txt ---創(chuàng)建數(shù)據(jù)庫文件
[root@centos6 CA]#echo 01 > serial ---生成證書的編號文件
[root@centos6 CA]#ls
certs crl index.txt newcerts private serial
[root@centos6 CA]#(umask 066;openssl genrsa -out private/cakey.pem 2048) ---生成子CA的私鑰
[root@centos6 CA]#openssl req -new -key private/cakey.pem -out subca.csr ---生成證書請求文件品追,用于向根CA申請證書
[root@centos6 CA]#scp subca.csr 172.18.21.7:/etc/pki/CA/certs.csr ---把證書請求文件傳給根CA
[root@redhat7 CA]#openssl ca -in certs.csr/subca.csr -out certs/subca.crt -days 300 ---頒發(fā)證書
無論是根CA還是子CA玄括。都必須有自簽名或者上級CA簽名的證書后,才能給服務(wù)器頒發(fā)證書
[root@redhat7 CA]#cat index.txt ----查看數(shù)據(jù)庫肉瓦,可以看到有兩個證書了遭京,第二個是頒發(fā)給子CA的證書
V 180909143602Z 01 unknown /C=cn/ST=henan/O=magedu.com/OU=beiguoxia/CN=www.magedu.com
V 180706151220Z 02 unknown /C=cn/ST=henan/O=magedu.com/OU=beigo/CN=centos6magedu
[root@redhat7 CA]#scp certs/subca.crt 172.18.21.6:/etc/pki/CA/cacert.pem ---將證書文件傳給子CA,在
配置文件里規(guī)定泞莉,無論是根CA還是子CA哪雕,只要是CA,證書文件就應(yīng)
該是/etc/pki/CA/cacert.pem文件鲫趁,并且路徑也要是這個斯嚎。
所以在拷貝的時候直接把名字改過來了
這樣子CA已經(jīng)搭建好了。這里用centos7.3做為服務(wù)器挨厚,向子CA申請證書
[root@centos7 app]#(umask 066;openssl genrsa -out app1.key 2048) ---生成私鑰
[root@centos7 app]#openssl req -new -key app1.key -out app.csr
----生成證書請求文件
[root@centos7 app]#scp app.csr 172.18.21.6:/app
---把證書請求文件發(fā)給子CA
[root@centos6 app]#openssl ca -in app.csr -out /etc/pki/CA/certs/app.crt -days 365 ---頒發(fā)證書堡僻,然后將證書傳給服務(wù)器就可以了
- 吊銷證書和生成證書吊銷列表
[root@redhat7 CA]#openssl ca -revoke newcerts/01.pem ---吊銷證書
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[root@redhat7 CA]#cat index.txt ---發(fā)現(xiàn)數(shù)據(jù)庫里面證書已經(jīng)處于R
狀態(tài),就是被吊銷的狀態(tài)
R 180909143602Z 170909154144Z 01 unknown /C=cn/ST=henan/O=magedu.com/OU=beiguoxia/CN=www.magedu.com
V 180706151220Z 02 unknown /C=cn/ST=henan/O=magedu.com/OU=beigo/CN=centos6magedu
[root@redhat7 CA]#echo 01 > /etc/pki/CA/crlnumber --生成被吊銷
的證書的序號文件疫剃,并指明序號
[root@redhat7 CA]#openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
生成證書吊銷列表
[root@redhat7 CA]#cat crlnumber ---下一個被吊銷的證書的編號
02
[root@redhat7 CA]#cat crlnumber.old ---前一個編號
01
[root@redhat7 CA]#openssl ca -revoke newcerts/02.pem ---再吊銷一個證書
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 02.
Data Base Updated
[root@redhat7 CA]#cat index.txt ---發(fā)現(xiàn)兩個證書都被吊銷了
R 180909143602Z 170909154144Z 01 unknown /C=cn/ST=henan/O=magedu.com/OU=beiguoxia/CN=www.magedu.com
R 180706151220Z 170909154819Z 02 unknown /C=cn/ST=henan/O=magedu.com/OU=beigo/CN=centos6magedu
[root@redhat7 CA]#openssl ca -gencrl -out /etc/pki/CA/crl/crl.pem
生成證書吊銷列表文件钉疫,文件名必須是crl.pem,并且路徑也要是這個
路徑巢价。吊銷一個證書牲阁,就要從新更新一下這個列表文件固阁。
[root@redhat7 CA]#openssl crl -in crl/crl.pem -noout -text 查看吊銷列表文件
如果把這個吊銷列表導(dǎo)出來在windows中看,要把后綴改為crl才可以
看咨油。
最后生成的證書文件在windows中查看如下圖
出現(xiàn)這種效果您炉,要把證書一個個的安裝才可以柒爵,安裝過程為要把每個證書導(dǎo)出來役电,后綴為crt才可以,安裝過程如下
也可以在瀏覽器的internet選項里棉胀、內(nèi)容法瑟、證書里導(dǎo)入證書或者刪除證書。
5唁奢、ssh客戶端
ssh: secure shell, protocol, 22/tcp, 安全的遠程登錄
具體的軟件實現(xiàn):
OpenSSH: ssh協(xié)議的開源實現(xiàn)霎挟,CentOS默認安裝
dropbear:另一個開源實現(xiàn)
兩種方式的用戶登錄認證:
基于password
基于key
?OpenSSH介紹
?相關(guān)包:
openssh
openssh-clients
openssh-server
- ssh客戶端
ssh, 配置文件:/etc/ssh/ssh_config
[root@redhat7 ~]#ssh wang@172.18.21.6
默認不寫wang@時是連接到對方的roo用戶,因為你現(xiàn)在是以root身份登錄的麻掸,如果你現(xiàn)在是以wang身份登錄的酥夭,默認連接的時候就是連接到對方的wang用戶,但如果對方?jīng)]有wang用戶就連接不了了脊奋,所以連接的時候最好指明對方的用戶熬北。
[root@redhat7 ~]#ssh -b 172.18.21.100 172.18.21.6 ---指定用哪個
ip地址去連接對方的ip地址
[root@centos7 ~]#ssh -t 172.18.21.100 172.18.21.106
-t選項的作用是。如果直接連接
172.18.21.106不能連接诚隙,可以借助于
172.18.21.100這個ip地址去連接后面的讶隐,
相當(dāng)于借助于一個跳板去連接
[root@redhat7 ~]#ssh 172.18.21.6 -p 2222 ---指定端口號,如果把
服務(wù)器的端口號改為非標(biāo)準(zhǔn)端口久又,連接時就要指明端口號巫延,因為默認
是22端口
[root@centos6 ~]#ssh 172.18.21.7
The authenticity of host '172.18.21.7 (172.18.21.7)' can't be established.
RSA key fingerprint is f4:90:98:ae:60:ed:e4:ae:bf:16:34:83:2e:17:1c:1e.
Are you sure you want to continue connecting (yes/no)?
用ssh和遠程主機連接時,剛開始要問yes地消,這個就是要確定一下遠程
主機的身份炉峰,身份如何確定的呢?RSA key fingerprint is
f4:90:98:ae:60:ed:e4:ae:bf:16:34:83:2e:17:1c:1e.就是根據(jù)這個key
確定的脉执,遠程主機的key會公開的發(fā)布到一個網(wǎng)站上讲冠,可以根據(jù)
key確定是否是遠程主機。
確定身份后當(dāng)敲yes的時候适瓦,就會在自己的家目錄里復(fù)制一份遠程
主機的公鑰竿开,下次再連接時就不用敲yes了,因為已經(jīng)有這個公鑰
了玻熙,下次連接時遠程主機會用自己的私鑰簽名加密數(shù)據(jù)傳給要連接的主機否彩,因為要連接的主機已經(jīng)有遠程主機的公鑰了,所以就能解開這個數(shù)據(jù)嗦随,進而證明這個數(shù)據(jù)就是遠程主機發(fā)過來的列荔,就確定了遠程主機的身份了敬尺,不用再問yes,到網(wǎng)站上去查找比對了贴浙,比如以root身份登錄時在自己的家目錄里會看到如下
[root@redhat7 ~]#cd .ssh/ ---家目錄里有個隱藏的目錄
[root@redhat7 .ssh]#ls ---這個文件里存放的就是遠程主機的公鑰
known_hosts
遠程主機的公鑰存放在下面目錄中
[root@centos6 .ssh]#cd /etc/ssh/
[root@centos6 ssh]#ls
moduli ssh_host_dsa_key ssh_host_key.pub
ssh_config ssh_host_dsa_key.pub ssh_host_rsa_key
sshd_config ssh_host_key ssh_host_rsa_key.pub ---這個就
是主機的公鑰砂吞,如果之前兩個主機連接過,這個公鑰在對方的家目錄
里.ssh/known_hosts文件中也會有這個公鑰崎溃,是一樣的
如果另外一臺主機想要冒充遠程主機蜻直,只要將遠程主機的私鑰偷到自
己的主機上,并覆蓋自己的私鑰文件/etc/ssh/ ssh_host_rsa_key袁串,
并且將ip地址改成和遠程主機一樣的ip地址概而,當(dāng)我要連接遠程主機
時,你用私鑰簽名加密數(shù)據(jù)傳給我囱修,我可以用原來遠程主機的公鑰解
開赎瑰,我就誤認為你就是原來的那個遠程主機了。
ssh -X 選項用于在連接遠程主機后破镰,可以在本主機顯示遠程主機的圖形餐曼。
總結(jié):當(dāng)你用ssh連接遠程主機時,如果是第一次連接鲜漩,要回答yes源譬,是確定遠程主機的身份,你連接的是不是遠程主機宇整,當(dāng)輸入yes后瓶佳,第二次就不用輸入了,因為在輸入yes的時候你已經(jīng)得到了遠程主機的公鑰鳞青,并保存在自己家目錄里的.ssh目錄霸饲,第二次連接時因為你有遠程主機的公鑰,你會發(fā)個數(shù)據(jù)用遠程主機的公鑰加密臂拓,如果能夠解密確定是遠程主機厚脉;當(dāng)連接的時候要輸入密碼,是確定你的身份胶惰,如果把你的公鑰給遠程主機傻工,這樣遠程主機就會發(fā)數(shù)據(jù)用你的公鑰加密,如果你能解開孵滞,遠程主機就可以確定是你中捆,這樣就可以連接了,所以連接的過程是個雙方確認的過程坊饶。
6泄伪、ssh登錄驗證
ssh服務(wù)登錄驗證方式:①用戶/口令;②基于密鑰
一匿级、基于用戶和口令登錄驗證
1蟋滴、客戶端發(fā)起ssh請求染厅,服務(wù)器會把自己的公鑰發(fā)送給用戶
2、用戶會根據(jù)服務(wù)器發(fā)來的公鑰對密碼進行加密
3津函、加密后的信息回傳給服務(wù)器肖粮,服務(wù)器用自己的私鑰解密,如果密碼正確尔苦,則用戶登錄成功
二涩馆、基于密鑰的登錄方式
1、首先在客戶端生成一對密鑰(ssh-keygen)
2蕉堰、并將客戶端的公鑰ssh-copy-id 拷貝到服務(wù)端
3 凌净、當(dāng)客戶端再次發(fā)送一個連接請求悲龟,包括ip屋讶、用戶名
4、服務(wù)端得到客戶端的請求后须教,會到authorized_keys中查找皿渗,如果有響應(yīng)的IP和用戶,就會隨機生成一個字符串轻腺,例如:acdf
5乐疆、服務(wù)端將使用客戶端拷貝過來的公鑰進行加密,然后發(fā)送給客戶端
6贬养、得到服務(wù)端發(fā)來的消息后挤土,客戶端會使用私鑰進行解密,然后將解密后的字符串發(fā)送給服務(wù)端
7误算、服務(wù)端接受到客戶端發(fā)來的字符串后仰美,跟之前的字符串進行對比,如果一致儿礼,就允許免密碼登錄
7咖杂、基于key認證
1、在客戶端生成秘鑰對
[root@centos7 ssh]#ssh-keygen -t rsa -P '' -f "/root/.ssh/id_rsa"
生成公鑰和私鑰對兒蚊夫,-t指定算法诉字,-P給私鑰對稱加密,在這里為了
方便知纷,寫的是空口令壤圃,可以在單引號里輸入口令,這樣私鑰就被加密
了,注意是大寫的P琅轧,也可以直接用ssh-keygen命令生成伍绳。默認就是rsa算法、空口令和私鑰存放在/root/.ssh/id_rsa文件中鹰晨。
[root@centos7 ssh]#cd
[root@centos7 ~]#cd .ssh
[root@centos7 .ssh]#ls ---可以看到已經(jīng)生成公鑰和私鑰對
id_rsa id_rsa.pub known_hosts
2墨叛、把公鑰文件傳輸至遠程服務(wù)器對應(yīng)用戶的家目錄
[root@centos7 .ssh]#ssh-copy-id -i id_rsa.pub root@172.18.21.106
[root@centos6 ~]#cd .ssh/
[root@centos6 .ssh]#ls ---可以看到在遠程服務(wù)器生成一個
authorized_keys文件止毕,這個文件就是客戶端的公鑰
authorized_keys known_hosts
3、測試連接
[root@centos7 .ssh]#ssh 172.18.21.106 ---不需要輸入口令就可以直接連接了
Last login: Thu Aug 31 07:02:08 2017 from 172.18.252.32
Good morning,clock in please!
[root@centos6 .ssh]#ssh-keygen -t rsa -P '123456' ---也可以不指定存放的文件漠趁,-P指定了對私鑰加密的口令
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): ---直接敲回車扁凛,就是默認的這個文件
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:
22:93:c3:7e:a6:9d:5c:48:16:29:af:bc:1f:e5:07:22 root@centos6.magedu.com
[root@centos6 .ssh]#cd
[root@centos6 ~]#cd .ssh
[root@centos6 .ssh]#ls ---發(fā)現(xiàn)已經(jīng)生成
authorized_keys id_rsa id_rsa.pub known_hosts
[root@centos6 .ssh]#ssh-copy-id id_rsa.pub root@172.18.21.107
把公鑰拷貝給對方
[root@centos6 .ssh]#ssh 172.18.21.107 ---可以直接連接了,連接
之前要輸入對稱加密的口令闯传,就是給私鑰加密的對稱秘鑰的口令谨朝,從
中也可以看出連接的過程中要用到私鑰解密。
[root@centos7 .ssh]#ssh-keygen -p ---如果私鑰之前沒有加口令甥绿,可以用這個命令對私鑰加口令字币,注意是小寫的p
- 啟用代理
對私鑰加密后,要連接對方時共缕,每次都要輸入生成秘鑰對時設(shè)置的對稱加密口令洗出,很麻煩,可以用下面的辦法图谷,啟用代理翩活,讓代理去幫助你輸入口令,就可以直接連接了便贵。
[root@centos7 .ssh]#ssh-agent bash ---啟用代理
[root@centos7 .ssh]#ssh-add ---輸入要代理的對稱加密口令
Enter passphrase for /root/.ssh/id_rsa:
Identity added: /root/.ssh/id_rsa (/root/.ssh/id_rsa)
8菠镇、在xshell里實現(xiàn)基于key的驗證
將公鑰另存到桌面上,并rz上傳至要連接的服務(wù)器承璃,這里我們要連接172.18.21.106的機器利耍,并且存放到/root/.ssh/authorized_keys中
[root@centos6 .ssh]#ls
authorized_keys id_rsa_2048_zhang.pub known_hosts
id_rsa id_rsa.pub
[root@centos6 .ssh]#cat id_rsa_2048_zhang.pub >>authorized_keys ---因為這個文件中已經(jīng)有別的公鑰了,所以要用>>把公鑰追加到這個文件中
[root@centos6 .ssh]#cat authorized_keys ---我們看到已經(jīng)追加進去盔粹,變成兩個公鑰了
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDirvPoTUGmzblUyiZXYdufIK0E0Q8K8q/6T413e5dr+RcbdUX8OcBYTtNLUyefGwERsfmHuxJE0Ic2ECBW1v42+7EOreyjP6bGQieNRdogiwcRQQoc/4QdADoVWo/W4aPlAh06nwbDL0BratXnZtFs6rZwDnc1s/onM9ClwolvJoTwUY+jLMiXATONr0D+THyyCySQRHKlZUexIkHT5DNcxAt/Zw5Qqx96PAo1AnUyEtZ15bLVVLtZtf2LkeFGo9x/BWIK1MbOduWnFUhxskeHhEAxTC4VoW4IuChGJMG+krFEeebDON96B4V4tWaP+ESHWvvwOpoqa9T8IKxZ5k+t root@centos7.magedu.com
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArcugl5AB+AKs8QfganOe02iURbfOYQi5EYcOSRu0iy6r/a+qbnl8Dr8ZM8RdW8JTpT1Z1adQ3p6pJcELXw/J4h3Ikc7o9mMbJkSSv/mjbYQW+0F68TKjD9pHZT0uyIWGu5a3gIDm3RnlzLxlWPRQa9NhRfHo2Qk4sjJ6LL7Rnta4iL0JhC9PZcTIdUdp4Q9mOFvhyfVb1QZxVU/XGsrwid3A9xspdBm3MLkGdN8ze13aeTW7Nt/3Zryv3j8PkzISHZrNftgJVHfULNFS9133JfEhWEgms/MkEVFuuY7EUMvOwT1ybeGT73QjBM3LKShjiA4SosNzKOH+Tpy09JwU1Q==
在xshell中進行如下操作
9隘梨、scp命令
基于key的驗證后,scp命令十分方便玻佩,不用輸入密碼就可以實現(xiàn)遠程拷貝出嘹。
scp[options] SRC... DEST/
?兩種方式:
scp[options] [user@]host:/sourcefile /destpath ---把遠程主機的文件拷貝到當(dāng)前主機的目錄
scp[options] /sourcefile [user@]host: /destpath ---把當(dāng)前主機的文件拷貝到遠程主機的哪個目錄
?常用選項:
-C: 壓縮數(shù)據(jù)流
-r: 遞歸復(fù)制
-p: 保持原文件的屬性信息
-q: 靜默模式
-P PORT: 指明remote host的監(jiān)聽的端口
[root@centos7 app]#scp app.csr app1.key root@172.18.21.106:/app ---可以一次性的拷貝多個文件。
[root@centos7 app]#scp -r /etc/sysconfig/ root@172.18.21.106:/app ---拷貝目錄要加上-r選項咬崔,也可以加上-q為靜默模式拷貝税稼,不在屏幕上輸出,適合寫到腳本里
scp在拷貝時垮斯,如果遠程主機已經(jīng)有這個文件郎仆,它也會再拷貝一遍,并且覆蓋原來的文件兜蠕。
10扰肌、rsync命令
?基于ssh和rsh服務(wù)實現(xiàn)高效率的遠程系統(tǒng)之間復(fù)制文件
?使用安全的shell連接做為傳輸方式
?rsync –av /etc server1:/tmp復(fù)制整個目錄
?rsync –av /etc/ server1:/tmp只復(fù)制目錄下文件
?比scp更快,只復(fù)制不同的文件熊杨,用法和格式根scp差不多
?選項:
-n 模擬復(fù)制過程
-v 顯示詳細過程
-r 遞歸復(fù)制目錄樹
-p 保留權(quán)限
-t 保留時間戳
-g 保留組信息
-o 保留所有者信息
-l 將軟鏈接文件本身進行復(fù)制(默認)
-L 將軟鏈接文件指向的文件復(fù)制
-a 存檔曙旭,相當(dāng)于–rlptgoD盗舰,但不保留ACL(-A)和SELinux屬性(-X)
示例
[root@centos7 app]#rsync /etc/fstab root@172.18.21.106:/app/
[root@centos7 app]#rsync -av /etc root@172.18.21.106:/app
這里要注意,/etc后面加斜線和不加斜線是有區(qū)別的桂躏,加斜線表示復(fù)制這個目錄下文件钻趋,不加斜線表示復(fù)制整個目錄,把文件夾也復(fù)制了
11剂习、pssh工具
?pssh是一個python編寫可以在多臺服務(wù)器上執(zhí)行命令的工具蛮位,也可實現(xiàn)文件復(fù)制,工具在epel源里下載,包名為pssh鳞绕,pssh命令可以用于管理遠程多臺主機失仁。
?選項如下:
?--version:查看版本
?-h:主機文件列表,內(nèi)容格式”[user@]host[:port]”
?-H:主機字符串们何,內(nèi)容格式”[user@]host[:port]”
?-l:登錄使用的用戶名
?-p:并發(fā)的線程數(shù)【可選】
?-o:輸出的文件目錄【可選】
?-e:錯誤輸入文件【可選】
?-t:TIMEOUT 超時時間設(shè)置萄焦,0無限制【可選】
?-O:SSH的選項
?-v:詳細模式
?-A:手動輸入密碼模式
?-x:額外的命令行參數(shù)使用空白符號,引號垂蜗,反斜線處理
?-X:額外的命令行參數(shù)楷扬,單個參數(shù)模式解幽,同-x
?-i:每個服務(wù)器內(nèi)部處理信息輸出
?-P:打印出服務(wù)器返回信息
示例
[root@centos7 yum.repos.d]#pssh -H 172.18.21.106 -i hostname
[1] 15:56:20 [SUCCESS] 172.18.21.106
centos6.magedu.com
[root@centos7 yum.repos.d]#pssh -H "172.18.21.106 172.18.21.6" -i hostname
[1] 16:08:59 [SUCCESS] 172.18.21.6
centos6.9.magedu.com
[2] 16:08:59 [SUCCESS] 172.18.21.106
centos6.magedu.com
[root@centos7 app]#vim ip.txt
1 172.18.21.106
2 172.18.21.6
[root@centos7 app]#pssh -h ip.txt -i hostname
[1] 16:11:34 [SUCCESS] 172.18.21.6
centos6.9.magedu.com
[2] 16:11:34 [SUCCESS] 172.18.21.106
centos6.magedu.com
[root@centos7 app]#pssh -h ip.txt -i setenforce 0
[1] 16:12:28 [SUCCESS] 172.18.21.106
[2] 16:12:28 [SUCCESS] 172.18.21.6
[root@centos7 app]#pssh -h ip.txt -i sed -i.bak '/^SELINUX=/cSELINUX=permissive' /etc/selinux/config
[1] 16:16:11 [SUCCESS] 172.18.21.6
[2] 16:16:11 [SUCCESS] 172.18.21.106
[root@centos7 app]#pssh -H root@172.18.21.6 -i hostname ---這
種寫法才是正規(guī)的寫法贴见。不寫用戶名默認是當(dāng)前登錄的用戶
[1] 16:22:55 [SUCCESS] root@172.18.21.6
centos6.9.magedu.com
[root@centos7 ~]#pssh -H 172.18.21.106 -l zhang -A -i hostname
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password:
[1] 16:35:57 [SUCCESS] 172.18.21.106
centos6.magedu.com
[root@centos7 app]#pssh -h ip.txt -i -o /app/ hostname ---在遠程的
主機上執(zhí)行hostname這個命令,并把結(jié)果保存到/app/目錄下
[1] 19:48:25 [SUCCESS] 172.18.21.106
centos6.magedu.com
[2] 19:48:25 [SUCCESS] 172.18.21.6
centos6.9.magedu.com
[root@centos7 app]#ls
172.18.21.106 172.18.21.6 app1.key app.csr ip.txt
[root@centos7 app]#cat 172.18.21.106
centos6.magedu.com
[root@centos7 app]#cat 172.18.21.6
centos6.9.magedu.com
[root@centos7 app]#pssh -h ip.txt -i -o /app/ uptime ---查看兩個主
機的負載情況躲株,并把結(jié)果保存到/app的目錄下
[1] 19:51:07 [SUCCESS] 172.18.21.6
19:51:57 up 3:53, 1 user, load average: 0.00, 0.00, 0.00
[2] 19:51:07 [SUCCESS] 172.18.21.106
13:37:26 up 7:12, 3 users, load average: 0.00, 0.00, 0.00
[root@centos7 app]#vim f1.sh
1 #!/bin/bash
2 echo $HOSTNAME
[root@centos7 app]#pscp.pssh -h ip.txt /app/f1.sh /app ---把f1.sh
這個腳本推送到遠程主機
[1] 19:55:23 [SUCCESS] 172.18.21.106
[2] 19:55:23 [SUCCESS] 172.18.21.6
[root@centos7 app]#pssh -h ip.txt -i /app/f1.sh ---執(zhí)行遠程主機的
腳本片部,執(zhí)行之前要加執(zhí)行權(quán)限
[1] 19:57:48 [SUCCESS] 172.18.21.6
centos6.9.magedu.com
[2] 19:57:48 [SUCCESS] 172.18.21.106
centos6.magedu.com
[root@centos7 app]#pslurp -h ip.txt -L /app /etc/passwd pass ---把
遠程主機的文件拷貝到我的主機,并改名為pass霜定,-L 是指定考到本
機的哪個目錄
[1] 20:08:49 [SUCCESS] 172.18.21.6
[2] 20:08:49 [SUCCESS] 172.18.21.106
[root@centos7 app]#tree
.
├── 172.18.21.106
│ └── pass
├── 172.18.21.6
│ └── pass
└── ip.txt
2 directories, 3 files
pssh這個命令對于管理遠程多臺主機很方便档悠,小型環(huán)境很實用,但前提是基于key的驗證望浩,就是要把本機本用戶的公鑰傳給遠程主機辖所,也可以不基于key的驗證,用-A選擇進行輸入密碼磨德,但前提是遠程主機的密碼都是一樣的缘回,只需要輸入一次密碼。如果遠程主機每個密碼都不一樣典挑,則要輸入很多次酥宴,所以最好還是基于key的驗證,每個主機的每個用戶都有自己的公鑰私鑰對您觉,放在自己的家目錄里拙寡,root用戶就放在/root/.ssh這個目錄下,zhang用戶就放在/home/zhang/.ssh目錄下琳水,進行這個命令前肆糕,要把本機登錄的用戶的公鑰傳給遠程主機的用戶般堆。
12、sftp命令
?交互式文件傳輸工具
?用法和傳統(tǒng)的ftp工具相似
?利用ssh服務(wù)實現(xiàn)安全的文件上傳和下載
?使用ls cd mkdirrmdirpwdget put等指令诚啃,可用郁妈?或help獲取幫助信息
sftp[user@]host
sftp> help
[root@centos7 app]#sftp 172.18.21.106
Connected to 172.18.21.106. ---因為事先已經(jīng)基于key的驗證,所
以直接就連到遠程主機上了
sftp> ls
Desktop Documents Downloads
Music Pictures Public
Templates Videos anaconda-ks.cfg
install.log install.log.syslog mbr
sftp> cd /app
sftp> ls
app.csr app1.key etc f1.sh fstab sysconfig
sftp> get fstab ---可以下載文件
Fetching /app/fstab to fstab
/app/fstab 100% 595 0.6KB/s 00:00
sftp> put /etc/issue ---可以上傳本機的文件到遠程
Uploading /etc/issue to /root/issue
/etc/issue 100% 68 0.1KB/s 00:00
sftp> pwd
Remote working directory: /root
sftp> ls
Desktop Documents Downloads
Music Pictures Public
Templates Videos anaconda-ks.cfg
install.log install.log.syslog issue ---發(fā)現(xiàn)已經(jīng)上傳成功
mbr
sftp> quit
[root@centos7 app]#ls ---發(fā)現(xiàn)文件已經(jīng)下載到連接的時候的前期目
錄
172.18.21.106 172.18.21.6 fstab ip.txt
sftp走的是ssh協(xié)議绍申,所以是安全的噩咪,可以實現(xiàn)安全的上傳和下載文件。
openssl軟件包提供的是ssl/tls協(xié)議极阅,命令是openssl溯警;openssh軟件包提供的是ssh服務(wù)阵具,走的是ssh協(xié)議,命令時ssh,這兩個協(xié)議都是安全的加密協(xié)議匾竿。
13、SSH的端口轉(zhuǎn)發(fā)
?SSH端口轉(zhuǎn)發(fā)
SSH 會自動加密和解密所有SSH 客戶端與服務(wù)端之間的網(wǎng)絡(luò)數(shù)據(jù)测萎。但是星澳,SSH 還能夠?qū)⑵渌鸗CP 端口的網(wǎng)絡(luò)數(shù)據(jù)通過SSH 鏈接來轉(zhuǎn)發(fā),并且自動提供了相應(yīng)的加密及解密服務(wù)髓迎。這一過程也被叫做“隧道”(tunneling)峦朗,這是因為SSH 為其他TCP 鏈接提供了一個安全的通道來進行傳輸而得名。例如排龄,Telnet波势,SMTP,LDAP 這些TCP 應(yīng)用均能夠從中得益橄维,避免了用戶名尺铣,密碼以及隱私信息的明文傳輸。而與此同時争舞,如果工作環(huán)境中的防火墻限制了一些網(wǎng)絡(luò)端口的使用凛忿,但是允許SSH 的連接,也能夠通過將TCP 端口轉(zhuǎn)發(fā)來使用SSH 進行通訊
?SSH 端口轉(zhuǎn)發(fā)能夠提供兩大功能:
?加密SSH Client 端至SSH Server 端之間的通訊數(shù)據(jù)
?突破防火墻的限制完成一些之前無法建立的TCP 連接
?本地轉(zhuǎn)發(fā):
-L localport:remotehost:remotehostport sshserver
?選項:
-f 后臺啟用
-N 不打開遠程shell竞川,處于等待狀態(tài)
-g 啟用網(wǎng)關(guān)功能
?示例
ssh–L 9527:telnetsrv:23 -N sshsrv
telnet 127.0.0.1 9527
當(dāng)訪問本機的9527的端口時店溢,被加密后轉(zhuǎn)發(fā)到sshsrv的ssh服務(wù),再解密被轉(zhuǎn)發(fā)到telnetsrv:23
data<--->localhost:9527 <--->localhost:XXXXX<--->sshsrv:22 <--->sshsrv:YYYYY<--->telnetsrv:23
數(shù)據(jù)首先發(fā)送到本機的9527端口流译,收到后在本機開一個隨機端口充當(dāng)ssh的客戶端逞怨,把數(shù)據(jù)通過ssh協(xié)議加密后發(fā)送到ssh服務(wù)器的22端口,服務(wù)器收到后解密數(shù)據(jù)并在ssh服務(wù)器生成一個隨機端口充當(dāng)telnet的客戶端福澡,然后走telnet流量把數(shù)據(jù)傳給telnet服務(wù)器的23端口叠赦。
實驗
本機是個172.18.21.106去連接遠程的telnet服務(wù)器172.18.21.6,因為防火墻限制,無法直接連接除秀,172.18.21.107是一個ssh服務(wù)器糯累,可以通過中間的ssh服務(wù)器做為跳板,連接到遠程的telnet服務(wù)器册踩,當(dāng)你telnet 127.0.0.1 9527時泳姐,最終的連接就是172.18.21.106連接到172.18.21.107的ssh22端口,172.18.21.107去連接172.18.21.6的telnet23端口暂吉,因為172.18.21.107沒有被172.18.21.6這個機器做防火墻策略拒絕胖秒,可以訪后者的telnet23端口。中間的ssh服務(wù)器就向一個隧道或者橋一樣慕的,把前后兩者通過ssh協(xié)議連接起來阎肝。
[root@centos6 ~]#ssh -L 9527:172.18.21.6:23 -Nf 172.18.21.107 ---實現(xiàn)隧道功能的命令
[root@centos6 ~]#telnet 127.0.0.1 9527 ---執(zhí)行連接命令
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
CentOS release 6.9 (Final)
Kernel 2.6.32-696.el6.x86_64 on an x86_64
centos6.9.magedu.com login: dufu
Password:
Last login: Sun Sep 10 21:08:23 from 172.18.21.106
[dufu@centos6 ~]$