遠程服務(wù)-SSH
1.遠程管理服務(wù)介紹
(1)SSH是(Secure Shell Protocol)的簡寫,由IETF網(wǎng)絡(luò)工作小組制定限书;在進行數(shù)據(jù)傳輸之前蜒程,SSH先對聯(lián)機數(shù)據(jù)包通過加密技術(shù)進行機密處理荣刑,加密后在進行文件傳輸,確保了傳遞的數(shù)據(jù)安全躲叼。端口號是22(默認可以讓root用戶連接)
(2)Telnet不安全的鏈接,數(shù)據(jù)傳輸是明文的企巢,端口號是23(默認不可以讓root用戶連接)
2.ssh遠程管理服務(wù)遠程連接的原理
(1)客戶端:執(zhí)行遠程連接命令
(2)客戶端:建立三次握手過程
(3)服務(wù)端:讓客戶端進行確認是否接受服務(wù)端的公鑰信息
(4)客戶端:進行公鑰確認枫慷,接受到公鑰信息
(5)服務(wù)端:讓客戶端確認用戶密碼信息
(6)客戶端:進行密碼信息確認
(7)遠程連接建立成功
私鑰和公鑰的作用:
a.利用私鑰和公鑰對數(shù)據(jù)信息進行加密處理
b.利用公鑰和私鑰進行用戶身份確認
基于密碼的方式進行遠程連接:公鑰和私鑰只能完成數(shù)據(jù)加密過程
基于私鑰的方式進行遠程連接:公鑰和私鑰可以完成認證身份的工作
3.ssh遠程連接方式
(1)基于口令的方式進行遠程連接:連接比較麻煩,連接不太安全
(2)基于秘鑰的方式進行遠程連接:連接方便浪规,連接比較安全
基于秘鑰方式連接過程(原理)
1.客戶端(管理端) 執(zhí)行命令創(chuàng)建秘鑰對
客戶端(管理端) 建立遠程連接(口令),發(fā)送公鑰信息
客戶端(管理端) 再次建立遠程連接
服務(wù)端(被管理端) 發(fā)送公鑰質(zhì)詢信息
客戶端(管理端) 處理公鑰質(zhì)詢信息,將質(zhì)詢結(jié)果返回給服務(wù)端
服務(wù)端(被管理端) 接收到質(zhì)詢結(jié)果,建立好遠程連接
4.ssh實現(xiàn)基于秘鑰連接的部署
(1)管理端創(chuàng)建密鑰對
[root@m01 ~]# ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
SHA256:h/xJtYDRMWBQhA1KWk8bY3U2PKr13kJL/RqA0LEDVyM root@m01
The key's randomart image is:
+---[DSA 1024]----+
| o OOE=O. |
| + =.O.O++ |
| . . + =.... |
| oo+ o . |
| oS.+.. |
| . ++o. |
| +oo.. |
| + ... |
| ... |
+----[SHA256]-----+
(2)管理端需要將公鑰進行分發(fā)
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_dsa.pub 10.0.0.41
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_dsa.pub"
The authenticity of host '10.0.0.41 (10.0.0.41)' can't be established.
ECDSA key fingerprint is SHA256:l5Dqj1zZpxfY5PZZP3+40i4CdG2kw52NLl1PYL++bds.
ECDSA key fingerprint is MD5:3f:ea:c5:82:f7:c2:1d:63:54:da:1a:48:a3:ea:00:27.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.41's password:
?
Number of key(s) added: 1
?
Now try logging into the machine, with: "ssh '10.0.0.41'"
and check to make sure that only the key(s) you wanted were added.
(3)被管理端檢查公鑰信息
[root@backup ~]# cat /root/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAOrox0Ml74i6I1B1as0xg9wfpFNvpLGw673r0jciVYSpXXbn8LV8xK/UR90VcNnKH2Xfw5rPU/dX9on0HnaJW2lIMqzhmCCEigXotmO1q8Djbi10q2FLphpArmXdh7kcSW73JXsB+tP4LkvOuuq4kwZet6wnETcVVH7ocCglwMuDAAAAFQCLQz3xaSR/iu2ArrUK90fGivLJLQAAAIEA0dlRLq6gB34C7UMZXBwbxozzaAoabwYIltK7PtuAwkgF3Rt8aVSPxg5yEJOYwOWa0r5M6BnwpjUr/VwpI2NdZDhlI/T9Raw6Lnsutpl+RlgfJ8BKIJlA+ZnwL+p1AplOJzy29AV0SKwMsInDAb7TKy1z9E4hiYNVWWaUvXcNCKYAAACAYm6QX1/rksSjeWvy6HC9q1oyOj7J/13OJOc3zbv8KdO4rXJOV5sIKk+Mfce02rPeL4JN0yyRjBlCoUlSGZzsW9WD02Ndq50nDEHGDyKTKPSewqit7LFVeyeBq2bDR/190i50aHohmrnJSBgFvmpAeVlIp+nx99y/11D/r14rjCU= root@m01
(4)進行遠程連接測試
[root@m01 ~]# ssh 10.0.0.41 hostname
backup
(5)免交互進行公鑰分發(fā)
a.下載軟件
[root@m01 ~/.ssh]# yum install -y sshpass
[root@m01 ~/.ssh]# sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub root@10.0.0.41 -p22 "-o StrictHostKeyChecking=no"
(6)批量分發(fā)公鑰的腳本
#!/bin/bash
for ip in {7,31,41}
do
echo "=============== fenfa pub_key with 172.16.1.$ip =============== "
sshpass -p123456 ssh-copy-id -i /root/.ssh/id_dsa.pub 172.16.1.$ip -o StrictHostKeyChecking=no &>/dev/null
if [ $? -eq 0 ]
then
echo "公鑰信息分發(fā)成功 [ok]"
echo ""
else
echo "公鑰信息分發(fā)失敗 [failed]"
echo ""
fi
done
[root@m01 ~/.ssh]# sh fenfa.sh
=============== fenfa pub_key with 172.16.1.7 ===============
公鑰信息分發(fā)成功 [ok]
?
=============== fenfa pub_key with 172.16.1.31 ===============
公鑰信息分發(fā)成功 [ok]
?
=============== fenfa pub_key with 172.16.1.41 ===============
公鑰信息分發(fā)成功 [ok]
(7)對遠程主機進行批量檢查
#!/bin/bash
?
CMD=$1
?
for ip in {7,31,41}
do
echo "=============== check pub_key with 172.16.1.$ip =============== "
ssh 172.16.1.$ip $CMD >/dev/null
if [ $? -eq 0 ]
then
echo "分發(fā)測試檢查成功 [ok]"
echo ""
else
echo "公鑰測試檢查失敗 [failed]"
echo ""
fi
done
[root@m01 ~/.ssh]#
[root@m01 ~/.ssh]# sh check.sh "ip a"
=============== check pub_key with 172.16.1.7 ===============
分發(fā)測試檢查成功 [ok]
?
=============== check pub_key with 172.16.1.31 ===============
分發(fā)測試檢查成功 [ok]
?
=============== check pub_key with 172.16.1.41 ===============
分發(fā)測試檢查成功 [ok]
5.SSH服務(wù)配置文件
/etc/ssh/sshd_config 服務(wù)端配置文件
/etc/ssh/ssh_config 客戶端配置文件
Port 22 ------ssh端口(默認為22)
ListenAddress 0.0.0.0 ------監(jiān)聽地址(指定一塊網(wǎng)卡接收遠程訪問的請求或听,指定的地址是本地網(wǎng)卡的ip地址)
PermitEmptyPasswords no ------否允許遠程用戶使用空密碼登錄(默認不允許)
PermitRootLogin yes ------是否允許root用戶登錄(建議關(guān)閉)
GSSAPIAuthentication no ------是否開啟GSSAPI認證功能(建議關(guān)閉)
UseDNS no ------是否開啟反向DNS解析功能 (建議關(guān)閉)
6.ssh遠程連接安全防范思路
1.用密鑰登錄,不用密碼登陸
2.牤牛陣法:解決SSH安全問題
a.防火墻封閉SSH,指定源IP限制(局域網(wǎng)笋婿、信任公網(wǎng))
b.開啟SSH只監(jiān)聽本地內(nèi)網(wǎng)IP(ListenAddress 172.16.1.61)
3.盡量不給服務(wù)器外網(wǎng)IP
4.最小化(軟件安裝-授權(quán))
5.給系統(tǒng)的重要文件或命令做一個指紋 /etc/passwd md5sum inotify /bin 監(jiān)控
6.給文件上鎖 chattr +i
7.ssh服務(wù)相關(guān)命令
ssh-keygen ------創(chuàng)建公鑰
ssh-copy-id ------分發(fā)公鑰
sshpass ------免交互
##################################
sftp 172.16.1.41
ls 查看遠程ftp服務(wù)器信息
cd --- 查看遠程ftp服務(wù)器信息
lls 查看本地ftp客戶端信息
lcd --- 查看本地ftp客戶端信息
get --- 下載信息
put --- 上傳信息
help --- 查看命令幫助
bye --- 退出ftp連接</pre>
```