1. 程式人生 > >《SSH服務》

《SSH服務》

support protoc pen tac 守護 push 端口號 客戶 log

SSH服務

SSH介紹:
SSH是Secure Shell Protocol的簡寫,由IETF網絡工作小組(Network Working Group)制定;在進行數據傳輸之前,SSH先對聯機數據包通過加密技術進行加密處理,加密後在進行數據傳輸。確保了傳遞的數據安全。
Ssh是專為遠程會話和其他用戶網絡服務提供的安全性協議,代替了傳統的不安全的遠程聯機服務,如telnet()23端口,非加密的)等;
SSH服務的主要兩個功能:
1) 提供了類似telnel遠程聯機服務器的服務。
2) 類似於FTP服務的sftp-server,借助SSH協議來傳輸數據,提供更安全的SFTP(加密的FTP)服務。
註意:SSH客戶端(ssh命令)還包含一個很有用的遠程安全拷貝命令SCP,也是通過SSH協議工作的

小結:
1.ssh是安全氣囊的加密協議,用於遠程連接服務器。
2.默認端口是22,安全協議版本ssh2
3.服務端主要包含兩個服務功能(1.ssh遠程連接,2.SFTP功能)。
4.ssh客戶端包含ssh連接命令,以及遠程拷貝scp命令等。
Ssh結構:
Ssh服務由服務端軟件OpenSSH和OpenSSL(負責加密的)和客戶端(常見的有SSH(linux中),SecureCRT,Putty,Xshell(windows中))組成,SSH服務默認端口為22,它有兩個不兼容的SSH協議版本,分別為1.x和2.x。
Ssh服務端是一個守護進程(demon),它在後臺運行並響應來自客戶端的請求,進程名為sshd,負責實時監聽遠程ssh客戶端的連接請求,並進行處理,一般包括公共密鑰驗證、密鑰交換。對稱密鑰加密和非安全連接等。
Ssh客戶端包含ssh程序以及像scp(遠程拷貝)、slogin(遠程登錄)、sftp(安全FTP文件傳輸)等應用程序。
SSH工作原理簡單示意圖:
技術分享圖片

工作原理:(ssh1.x)
1.當ssh服務啟動的時候,服務端就會自動生成一個1024字節的公鑰(C5中是768),
[root@ns1 ~]# grep ServerKey /etc/ssh/sshd_config
#ServerKeyBits 1024
2.當客戶端請求連接時,服務端會把公鑰發給客戶端,客戶端收到後會和之前的公鑰進行比對,看是否一致,判斷標準:客戶端(linux)用戶家目錄下的known_hosts文件
[root@xuexi ~]# ll ~/.ssh/

total 12
-rw-r--r--. 1 root root 794 Sep 9 04:41 known_hosts
3.客戶端收到公鑰會,會在本地隨機產生一個公鑰,然後由系統的算法,將兩個公鑰重新加密,生成新的公鑰(密鑰對),客戶端再把這新的公鑰發給服務端。
4.客戶端發送完成後,以後就用新的公鑰進行加密解密,實現數據的傳遞。
Ssh2.x:在一版本中,客戶端將整合的密鑰對發給服務端後,服務端不會再去校驗密鑰對,這樣的話,一但密鑰對被修改了,會有安全風險,所以在版本2中修復了這個缺點,增加了確定聯機正確性機制(Diffie-Hellman),這樣每次數據傳輸時,服務端都會以該機制檢查數據來源的正確性,避免了聯機的過程中被插入惡意程序代碼的問題,所以版本2比版本1安全。
Ssh服務認證類型:
1)基於口令的安全認證:基於口令的安全認證是最常用的發那個是,需要IP,ssh服務的端口(默認22),賬號及密碼,聯機過程中所有傳輸都是加密的。
[root@xuexi ~]# ssh -p22 [email protected]
[email protected]‘s password:(輸入遠程登錄用戶的密碼)
Last login: Sun Dec 24 15:01:29 2017 from desktop-rtg9bmp.w.mifi
2.基於密鑰的安全驗證:基於密鑰是指需要依靠密鑰,也就是必須先建立一對密鑰對,然後把公鑰放在需要訪問的目標服務器上,;另外,還需要把私鑰放到SSH客戶端對應的客戶端服務器上。
面試題:給一個端口查出是什麽服務:
Lsof -I :端口號
Netstat -lntup| grep 端口號

查看ssh服務配置信息:
[root@ns1 ~]# less /etc/ssh/sshd_config(sshd_config沒d的話是客戶端)

Disable legacy (protocol version 1) support in the server for new

installations. In future the default will change to require explicit

activation of protocol 1

Protocol 2(協議版本)

查看包組:
[root@ns1 ~]# rpm -qa openssh openssl
openssh-5.3p1-94.el6.x86_64
openssl-1.0.1e-15.el6.x86_64
查看進程:
[root@ns1 ~]# ps -ef|grep sshd
root 1210 1 0 15:01 ? 00:00:00 /usr/sbin/sshd
root 1330 1210 0 15:01 ? 00:00:00 sshd: root@pts/0
root 1391 1362 0 15:06 pts/0 00:00:00 grep sshd
客戶端遠程服務器:
[root@xuexi ~]# ssh -p22 [email protected]
[email protected]‘s password:
Last login: Wed Sep 6 23:47:40 2017 from 192.168.116.129

[root@xuexi ~]# ssh -p22 [email protected] /sbin/ifconfig(遠程執行命令,但執行完還在原來的客戶端裏面)

小結:
1.切換到別的機器 ssh -p端口號 用戶名@ip地址
2.到其他機器上執行命令 ssh -p端口號 用戶名@ip地址 要執行的命令(命令要全路徑)
3.當第一次連接的時候,本地會產生一個秘鑰文件 ~/.ssh/known_hosts

當連接服務器慢的時候將下面的yes改成no(此文件路徑是/etc/ssh/sshd_config
GSSAPICleanupCredentials no

Scp命令:-P(大p)指定端口,-p(小p)保持原有文件的屬性,-r遞歸(拷貝整個目錄)
推;push 源 目標
[root@xuexi ~]# scp -P22 /data/oldboy.txt [email protected]:/tmp
[email protected]‘s password:
oldboy.txt 100% 0 0.0KB/s 00:00
拉:pull 服務器 客戶
[root@xuexi ~]# scp -P22 [email protected]:/data/o.txt /data
[email protected]‘s password:
o.txt 100% 0 0.0KB/s 00:00
[root@xuexi ~]# ll /data
total 0
-rw-r--r--. 1 root root 0 Sep 7 05:07 oldboy.txt
-rw-r--r--. 1 root root 0 Sep 7 05:13 o.txt

小結:
scp是加密的遠程拷貝,可以把數據從一臺機器推送的另一臺機器,也可以從其他服務器把數據拉回到本地執行命令的服務器,但是,每次都是全量拷貝(rsync增量拷貝),因此,效率不高。

客戶端連接sftp:
[root@xuexi ~]# sftp -oport=22 [email protected]
Connecting to 192.168.116.128...
[email protected]‘s password:
sftp>

sftp> put /data/oldboy.txt
Uploading /data/oldboy.txt to /root/oldboy.txt
/data/oldboy.txt 100% 0 0.0KB/s 00:00
sftp> ls
a anaconda-ks.cfg b
eet.txt install.log install.log.syslog
oldboy.log oldboy.txt pldboy.log
zhou2 zhou3 zhou4

sftp> put /data/oldboy.txt /tmp(上傳)
Uploading /data/oldboy.txt to /tmp/oldboy.txt
/data/oldboy.txt 100% 0 0.0KB/s 00:00
sftp> get /data/o.txt /data
Fetching /data/o.txt to /data/o.txt
ftp> get /data/b.txt ~
Fetching /data/b.txt to ~

sftp> get /data/b.txt(下載)
Fetching /data/b.txt to b.txt
sftp> get /data/b.txt /tmp
Fetching /data/b.txt to /tmp/b.txt

小結:
1.sftp -oPort=端口號 用戶名@ip地址
2.上傳put加客戶端本地路徑,也可以指定路徑上傳。put /etc/host /tmp
3.下載get服務端的內容,下載到本地的當前目錄。

全篇小結:
1.ssh加密的遠程連接協議。openssh,openssl
2.默認端口22
3.1.x,2.x,2安全。
4.ssh遠程連,sftp服務.ssd守護進程開機要自啟動
5.ssh客戶端包含ssh命令,scp,sftp
6.ssh安全驗證:口令和密鑰,這兩種都是基於用戶.
7.安全優化,修改默認端口,禁止root遠程連接。
8.公鑰(public key),服務器端,私鑰(private key),客戶端。

ssh-keygen -t dsa 中-t參數指建立密鑰的類型,這裏指建立的dsa類型,也可以執行ssh-keygen -t rsa建立rsa類型。
Rsa和dsa區別:
Rsa:是一種加密算法,是由Ron Rivest、Adi Shamir和Leonard Adleman這三個人名字的第一個字母連接起來。
Dsa:就是數字簽名算法的英文全稱的簡寫,即Digsital Signature Algorithm,rsa既可以進行加密也可以進行數字簽名認證,而dsa只能用於數字簽名從而實現認證。

[wangwu@xuexi ~]$ ssh-keygen -t dsa(創建dsa類型的密鑰)
[wangwu@xuexi ~]$ ll ~/ -al
total 24
drwx------. 3 wangwu wangwu 4096 Sep 8 02:47 .
drwxr-xr-x. 3 root root 4096 Sep 8 02:33 ..
-rw-r--r--. 1 wangwu wangwu 18 Jul 18 2013 .bash_logout
-rw-r--r--. 1 wangwu wangwu 176 Jul 18 2013 .bash_profile
-rw-r--r--. 1 wangwu wangwu 124 Jul 18 2013 .bashrc
drwx------. 2 wangwu wangwu 4096 Sep 8 02:48 .ssh
[wangwu@xuexi ~]$ ll .ssh/
total 8
-rw-------. 1 wangwu wangwu 668 Sep 8 02:48 id_dsa(私鑰)
-rw-r--r--. 1 wangwu wangwu 602 Sep 8 02:48 id_dsa.pub(公鑰)

分發公鑰:
[wangwu@xuexi ~]$ ssh-copy-id -i .ssh/id_dsa.pub [email protected](普通分發)(特殊端口用“-p 端口號 [email protected]”)
The authenticity of host ‘192.168.116.128 (192.168.116.128)‘ can‘t be established.
RSA key fingerprint is cd:ea:05:cb:65:e2:88:76:96:9d:81:ea:39:f9:c2:07.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.116.128‘ (RSA) to the list of known hosts.
[email protected]‘s password:
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:

.ssh/authorized_keys(表示成功)

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

腳本批量分發:
[wangwu@xuexi ~]$ vi fenfa.sh
if [$# -ne 1 ]
then
echo "/bin/sh $0 argl"
exit 1
fi

for n in 128 131
do
scp -P22 $1 [email protected].$n:~
done
腳本批量查看信息:
[wangwu@xuexi ~]$ vi chakan.sh
for n in 128 131
do
ssh -p 22 [email protected].$n $1
done

[wangwu@xuexi ~]$ sh chakan.sh "/usr/bin/free"
total used free shared buffers cached
Mem: 1004412 99060 905352 0 9772 28156
-/+ buffers/cache: 61132 943280
Swap: 1023992 0 1023992
total used free shared buffers cached
Mem: 1004412 164708 839704 0 10476 45692
-/+ buffers/cache: 108540 895872
Swap: 1023992 0 1023992

ssh批量分發與管理方案小結:
1.利用root做ssh key驗證。
優點:簡單,易用。
缺點:安全差,同時無法禁用root遠程連接。
企業應用:80%的企業。
2.利用普通用戶如oldboy來做,思路是先把分發的文件拷貝到服務器用戶家目錄,然後sudo提權拷貝到服務器的對應權限目錄。
優點:安全
缺點:配置復雜
3.擴展:同方案2,只是不用sudo,而是設置suid對固定命令提權。
優點:相對安全
缺點:復雜,安全性較差。任何人都可以處理帶有suid權限的命令。
建議:追求簡單,選1.安全建議,選2

企業級生產場景批量管理,自動化管理方案:
1.最簡單最常用ssh key。功能最強大的。一般中小型企業會用,50-100臺以下。
2.sina cfengine較早的批量管理工具,復雜,笨重。
3.門戶級別比較流行的,puppet批量管理工具,復雜,笨重。
4.saltstack批量管理工具,特點:簡單,功能強大(配置復雜)。
5.http+crontab

《SSH服務》