SSH從原理到配置

遠程連接服務器

什麼是遠程連接服務器

遠程連接服務器通過文字或圖形接口方式來遠程登錄系統,讓你在遠程終端前登錄linux主機以取得可操作主機接口(shell),而登錄後的操作感覺就像是坐在系統前面一樣。
允許別人遠程登錄到你的設備上,你的設備就是遠程連接服務器。

遠程連接服務器的功能

1)分享主機運算能力
2)服務器類型有限度開放連接
3)工作站類型,只對內網開放(安全)

常見的遠程管理工具

|--RDP(remotedesktop protocal )協議,windows遠程桌面管理(圖形界面)
|--telenetCLI界面下遠程管理,幾乎所有操作系統都有(內容明文傳輸)  23
|--ssh  CLI界面下的遠程管理,幾乎所有操作系統都有(內容加密傳輸) 類unix系統下主要  22  遠程管理方式(linux BSD Macos)
|--RFB(remote frame buffer) 圖形化遠程管理協議 VNC (Virtual Network Computing)使用的協議。(在linux unix Macos 下的圖形界面遠程管理工具)

SSH

  1. SSH代表安全外殼(Secure Shell),它現在是通過互聯網訪問網絡設備和服務器的唯一的主要協議。
  2. SSH默認情況下通過端口22運行;不過很容易更改這個端口。
  3. SSH是一種非常安全的協議,因爲它共享併發送經過加密的信息,從而爲通過互聯網等不安全的網絡訪問的數據提供了機密性和安全性。
  4. 一旦通訊的數據使用SSH經過加密,就極難解壓和讀取該數據,所以我們的密碼在公共網絡上傳輸也變得很安全。
  5. SSH還使用公鑰用於對訪問服務器的用戶驗證身份,這是一種很好的做法,爲我們提供了極高的安全性。
  6. SSH主要用在所有流行的操作系統上,比如Unix、Solaris、Red-Hat Linux、CentOS和Ubuntu等。
  7. ssh服務端由2部分組成:openssh(提供ssh服務) openssl(提供加密的程序)
  8. ssh的客戶端可以用XSHELL,Securecrt, Mobaxterm等工具進行連接,ssh sftp

TELNET

  1. Telnet是電信(Telecommunications)和網絡(Networks)的聯合縮寫,這是一種在UNIX平臺上最爲人所熟知的網絡協議。
  2. Telnet使用端口23,它是專門爲局域網設計的。
  3. Telnet不是一種安全通信協議,因爲它並不使用任何安全機制,通過網絡/互聯網傳輸明文格式的數據,包括密碼,所以誰都能嗅探數據包,獲得這個重要信息。
  4. Telnet中沒有使用任何驗證策略及數據加密方法,因而帶來了巨大的安全威脅,這就是爲什麼telnet不再用於通過公共網絡訪問網絡設備和服務器。

SSH

加密是如何實現的

SSH算法

SSH爲了確保信息的安全傳輸,從連接發起到完成各階段的各個點SSH協議採用了許多不同類型的數據加密技術,包括可逆的對稱加密,非對稱加密以及不可逆的哈希散列。

Ssl/tls(TransportLayer Security 傳輸層安全協議)

SecureSocket Layer,爲Netscape所研發,用以保障在Internet上數據傳輸之安全,利用數據加密(Encryption)技術,可確保數據在網絡上之傳輸過程中不會被截取及竊聽。
一般通用之規格爲40bit之安全標準,美國則已推出128bit之更高安全標準,但限制出境。只要3.0版本以上之I.E.或Netscape瀏覽器即可支持SSL。 Sslv3 -SSLv2
當前版本爲3.0。它已被廣泛地用於Web瀏覽器與服務器之間的身份認證和加密數據傳輸。

SSL協議位於TCP/IP協議與各種應用層協議之間,爲數據通訊提供安全支持。

SSL協議可分爲兩層:

  1. SSL記錄協議(SSL Record Protocol):它建立在可靠的傳輸協議(如TCP)之上,爲高層協議提供數據封裝、壓縮、加密等基本功能的支持。
  2. SSL握手協議(SSLHandshake Protocol):它建立在SSL記錄協議之上,用於在實際的數據傳輸開始前,通訊雙方進行身份認證、協商加密算法、交換加密密鑰等。
    在這裏插入圖片描述

ssl提供服務 ssh [email protected]

1)認證用戶和服務器,確保數據發送到正確的客戶機和服務器;  握手協議
2)加密數據以防止數據中途被竊取;                                          ssl記錄協議
3)維護數據的完整性,確保數據在傳輸過程中不被改變。

SSH和SSL的區別

ssl是通訊鏈路的附加層。可以包含很多協議。https, ftps, .....
ssh只是加密的shell,最初是用來替代telnet的。通過port forward,也可以讓其他協議通過ssh的隧道而起到加密的效果。

SSH建立連接的完整過程

連接過程

  1. SSH協議版本協商階段:
    客戶端通過TCP三次握手與服務器的SSH端口建立TCP連接。
1.服務器通過建立好的連接向客戶端發送一個包含SSH版本信息的報文,格式爲“SSH-<SSH協議大版本號>.<SSH協議小版本號>-<軟件版本號>”,軟件版本號主要用於調試。
2.客戶端收到版本號信息後,如果服務器使用的協議版本號低於自己的,但是客戶端能夠兼容這個低版本的SSH協議,則就使用這個版本進行通信。否則,客戶端會使用自己的版本號。
3.客戶端將自己決定使用的版本號發給服務器,服務器判斷客戶端使用的版本號自己是否支持,從而決定是否能夠繼續完成SSH連接。

如果協商成功,則進入密鑰和算法協商階段。

  1. 密鑰和算法協商階段:
1.服務器端和客戶端分別發送算法協商報文給對端,報文中包含自己支持的公鑰算法列表,加密算法列表,MAC(MessageAuthentication Code,消息驗證碼)算法列表,壓縮算法列表等。
2.和版本協商階段類似,服務器端和客戶端根據自己和對端支持的算法來決定最終要使用的各個算法。
3.服務器端和客戶端利用Diffie-Hellman密鑰交換算法,主機密鑰對等參數,生成共享密鑰和會話ID。會話密鑰用於在後續的通信過程中兩端對傳輸的數據進行加密和解密,而會話ID用於認證過程。
  1. 認證階段:
1.客戶端向服務器端發送認證請求,請求中包含用戶名,認證方法,密碼或密鑰。
2.服務器端對客戶端進行認證,如果認證失敗,則向客戶端發送失敗消息,其中包含可以再次認證的方法列表。
3.客戶端再次使用支持的認證方法中的一種進行認證,直到達到認證次數上限被服務器終止連接,或者認證成功爲止。
SSH支持的兩種認證方式:
密碼認證:客戶端通過用戶名/密碼進行認證,將使用會話密鑰加密後的用戶名和密碼發送給服務器,服務器解密後與系統保存的用戶名和密碼進行對比,並向客戶端返回認證成功或失敗的消息。
密鑰認證:採用數字簽名來進行認證,目前可以通過RSA和DSA兩種算法實現數字簽名,客戶端通過用戶名,公鑰以及公鑰算法等信息來與服務器完成驗證。
  1. 會話請求階段:
1.服務器等待客戶端請求。
2.認證完成後,客戶端想服務器發送會話請求。
3.服務器處理客戶端請求,完成後,會向客戶端回覆SSH_SMSG_SUCCESS報文,雙方進入交互會話階段。如果請求未被成功處理,則服務器返回SSH_SMSG_FAILURE報文,表示請求處理失敗或者不能識別客戶端請求。
  1. 交互會話階段:
1.客戶端將要執行的命令加密發送給服務器。
2.服務器收到後,解密命令,執行後將結果加密返回客戶端。
3.客戶端將返回結果解密後顯示到終端上。

服務端驗證客戶端

在這裏插入圖片描述

客戶端驗證服務端

在這裏插入圖片描述

加密技術

對稱加密

對稱密鑰加密------共享密鑰加密(對稱密鑰加密):加密和解密同用一個密鑰。
加密時就必須將密鑰傳送給對方,那麼如何安全的傳輸呢 md5加密

非對稱加密

非對稱密鑰加密系統—公開密鑰加密(非對稱密鑰加密):公開密鑰加密使用一對非對稱的密鑰。
一把叫做私有密鑰,一把叫做公開密鑰。私有密鑰不能讓其他任何人知道,而公開密鑰則可以隨意發佈,任何人都可以獲得。使用此加密方式,發送密文的一方使用公開密鑰進行加密處理,對方收到被加密的信息後,再使用自己的私有密鑰進行解密。利用這種方式,不需要發送用來解密的私有密鑰,也不必擔心密鑰被攻擊者竊聽盜走。
核心是:算法RSA

對稱加密和非堆成加密的區別

在這裏插入圖片描述

1)非對稱加密與對稱加密的不同之處在於,爲了在單個方向上發送數據,需要兩個相關的一組密鑰。其中一個密鑰稱爲私鑰,而另一個稱爲公鑰。
2)非對稱加解密的效率要遠遠小於對稱加解密
3)非對稱祕鑰相比對稱祕鑰更加安全

在這裏插入圖片描述
非對稱加密中是用最廣泛RSA算法就用到了利用大素數方便生成大整數(2048),但是該大素數則幾乎無法分解的特性。最近熱門的阿蒂亞老教授宣佈證明《黎曼猜想》,就是用關於大素數分佈的規律,如果該證明有效,能發現大素數的分佈規律,則可能會影響大素數分解,讀廣泛使用的RSA算法可能產生影響。

趣聞

有意思的是RSA算法曾暴露過一醜聞,數學家們發現,算法中曾經使用的一個隨機函數DUAL_EC_DRBG被NSA做了手腳,植入了後門,可以過這個這個算法來推算密鑰。NSA利用該算法監控和竊取一些加密信息。
在這裏插入圖片描述

PFX

公鑰加密技術12號標準(PublicKey Cryptography Standards #12,PKCS#12)爲存儲和傳輸用戶或服務器私鑰、公鑰和證書指定了一個可移植的格式。它是一種二進制格式,這些文件也稱爲PFX文件。

  1. CER: 用於存儲公鑰證書的文件格式
  2. RSA:算法是一種非對稱密碼算法
  3. PKI(Public Key Infrastructure ) 即"公鑰基礎設施",是一種遵循既定標準的密鑰管理平臺,它能夠爲所有網絡應用提供加密和數字簽名等密碼服務及所必需的密鑰和證書管理體系,
    簡單來說,PKI就是利用公鑰理論和技術建立的提供安全服務的基礎設施。PKI技術是信息安全技術的核心,也是電子商務的關鍵和基礎技術。
    /etc/pki/tls/certs
  4. PKI體系能夠實現的功能有
身份認證
數據完整性
數據機密性
操作的不可否認性

即使被人截獲了信息,也可以根據信息來源判斷是否安全。

ssh兩種驗證級別:openssh openssl

從客戶端來看,SSH提供兩種級別的安全驗證。

  1. 第一種級別(基於口令的安全驗證)
    只要你知道自己帳號和口令,就可以登錄到遠程主機。所有傳輸的數據都會被加密,但是不能保證你正在連接的服務器就是你想連接的服務器。可能會有別的服務器在冒充真正的服務器,也就是受到“中間人”這種方式的攻擊。
  2. 第二種級別(基於密匙的安全驗證)
    需要依靠密匙,也就是你必須爲自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之後,先在該服務器上你的主目錄下尋找你的公用密匙,服務器就用公用密匙加密“質詢”(challenge)並把它發送給客戶端軟件。客戶端軟件收到“質詢”之後就可以用你的私人密匙解密再把它發送給服務器。

用這種方式,你必須知道自己密匙的口令。但是,與第一種級別相比,第二種級別不需要在網絡上傳送口令。
第二種級別不僅加密所有傳送的數據,而且“中間人”這種攻擊方式也是不可能的(因爲他沒有你的私人密匙)。但是整個登錄的過程可能需要10秒
在這裏插入圖片描述
在這裏插入圖片描述

解讀ssh默認配置文件

1.#Port 22                                          監聽端口,默認監聽22端口  【默認可修改】
2.#AddressFamily any                        IPV4和IPV6協議家族用哪個,any表示二者均有
3.#ListenAddress 0.0.0.0                   指明監控的地址,0.0.0.0表示本機的所有地址  【默認可修改】
4.#ListenAddress ::                            指明監聽的IPV6的所有地址格式
5.# The default requires explicit activationof protocol 1
6.#Protocol 2                                      使用SSH第二版本,redhat7默認第一版本已拒絕
7.# HostKey for protocolversion 1      一版的SSH支持以下一種祕鑰形式
8.#HostKey /etc/ssh/ssh_host_key
9.# HostKeys for protocolversion 2                  使用第二版本發送祕鑰,支持以下四種祕鑰認證的存放位置:(centos6只支持rsa和dsa兩種)
10.HostKey/etc/ssh/ssh_host_rsa_key              rsa私鑰認證 【默認】
11.#HostKey /etc/ssh/ssh_host_dsa_key            dsa私鑰認證
12.HostKey /etc/ssh/ssh_host_ecdsa_key          ecdsa私鑰認證
13.HostKey /etc/ssh/ssh_host_ed25519_key      ed25519私鑰認證
14.# Lifetime and size ofephemeral version 1  server key  臨時版本1服務器密鑰的生存期和大小
15.#KeyRegenerationInterval1h                        祕鑰在生器,version1會使用server的pub key 每隔一段時間重新建立一次時間1h
16.#ServerKeyBits 1024        主機祕鑰長度
17.# Ciphers and keying
18.#RekeyLimit default none
19.# Logging
20.# obsoletes QuietMode and FascistLogging
21.#SyslogFacility AUTH
22.SyslogFacilityAUTHPRIV                   當有人使用ssh登錄系統的時候,SSH會記錄信息,信息保存在/var/log/secure裏面
23.#LogLevel INFO                                  日誌的等級 全部
24.# Authentication:
25.#LoginGraceTime 2m                           登錄的寬限時間,默認2分鐘沒有輸入密碼,則自動斷開連接
26.#PermitRootLogin no
27.PermitRootLogin yes                            是否允許管理員直接登錄,'yes'表示允許
28.#StrictModes yes                                 是否讓sshd去檢查用戶主目錄或相關文件的權限數據
29.#MaxAuthTries 6                                  最大認證嘗試次數,最多可以嘗試6次輸入密碼。之後需要等待某段時間後才能再次輸入密碼
30.#MaxSessions 10                                 允許的最大會話數
31.#RSAAuthentication yes
32.#PubkeyAuthentication yes
33.# The default is to check both.ssh/authorized_keys and .ssh/authorized_keys2
34.# but this is overridden so installationswill only check .ssh/authorized_keys
35.AuthorizedKeysFile.ssh/authorized_keys                 服務器生成一對公私鑰之後,會將公鑰放到.ssh/authorizd_keys裏面,將公鑰發給客戶端
36.#AuthorizedPrincipalsFile none
37.#AuthorizedKeysCommand none
38.#AuthorizedKeysCommandUser nobody
39.# For this to work you will also need hostkeys in /etc/ssh/ssh_known_hosts
40.#RhostsRSAAuthentication no
41.# similar for protocol version 2
42.#HostbasedAuthentication no
43.# Change to yes if you don't trust~/.ssh/known_hosts for
44.# RhostsRSAAuthentication andHostbasedAuthentication
45.#IgnoreUserKnownHosts no
46.# Don't read the user's ~/.rhosts and~/.shosts files
47.#IgnoreRhosts yes
48.# To disable tunneled clear text passwords,change to no here!
49.#PasswordAuthentication yes
50.#PermitEmptyPasswords no
51.PasswordAuthentication yes                    是否允許支持基於口令的認證
52.# Change to no to disable s/key passwords
53.#ChallengeResponseAuthentication yes
54.ChallengeResponseAuthentication no     是否允許任何的密碼認證
挑戰任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用!
與Kerberos 有關的參數設定!底下不用設定
55.# Kerberos options                                   是否支持kerberos(基於第三方的認證,如LDAP)認證的方式,默認爲no
56.#KerberosAuthentication no
57.#KerberosOrLocalPasswd yes
58.#KerberosTicketCleanup yes
59.#KerberosGetAFSToken no
60.#KerberosUseKuserok yes
61.# GSSAPI options
62.GSSAPIAuthentication yes
63.GSSAPICleanupCredentials no
64.#GSSAPIStrictAcceptorCheck yes
65.#GSSAPIKeyExchange no
66.#GSSAPIEnablek5users no
67.# Set this to 'yes' to enable PAMauthentication, account processing,
68.# and session processing. If this isenabled, PAM authentication will
69.# be allowed through theChallengeResponseAuthentication and
70.# PasswordAuthentication. Depending on yourPAM configuration,
71.# PAM authentication viaChallengeResponseAuthentication may bypass
72.# the setting of "PermitRootLoginwithout-password".
73.# If you just want the PAM account andsession checks to run without
74.# PAM authentication, then enable this butset PasswordAuthentication
75.# and ChallengeResponseAuthentication to'no'.
76.# WARNING: 'UsePAM no' is not supported inRed Hat Enterprise Linux and may cause several
77.# problems.
78.UsePAM yes
79.#AllowAgentForwarding yes
80.#AllowTcpForwarding yes
81.#GatewayPorts no
82.X11Forwarding yes
#ssh -X  user@IP
83.#X11DisplayOffset 10
84.#X11UseLocalhost yes
85.#PermitTTY yes
86.#PrintMotd yes
87.#PrintLastLog yes
88.#TCPKeepAlive yes
89.#UseLogin no
90.UsePrivilegeSeparation sandbox # Defaultfor new installations.
91.#PermitUserEnvironment no
92.#Compression delayed
93.#ClientAliveInterval 0
94.#ClientAliveCountMax 3
95.#ShowPatchLevel no
96.#UseDNS yes              是否反解DNS,如果想讓客戶端連接服務器端快一些,這個可以改爲no
97.#PidFile /var/run/sshd.pid
98.#MaxStartups 10:30:100
99.#PermitTunnel no
100.#ChrootDirectory none
101.#VersionAddendum none
102.# no default banner path
103.#Banner none
104.# Accept locale-related environmentvariables
105.AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIMELC_COLLATE LC_MONETARY LC_MESSAGES
106.AcceptEnv LC_PAPER LC_NAME LC_ADDRESSLC_TELEPHONE LC_MEASUREMENT
107.AcceptEnv LC_IDENTIFICATION LC_ALLLANGUAGE
108.AcceptEnv XMODIFIERS
109.# override default of no subsystems
110.Subsystem sftp/usr/libexec/openssh/sftp-server                    支持 SFTP ,如果註釋掉,則不支持sftp連接
111.# Example of overriding settings on aper-user basis
112.#Match User anoncvs
113.# X11Forwarding no
114.# AllowTcpForwarding no
115.# PermitTTY no
116.# ForceCommand cvs server
117.AllowUsers user1user2                登錄白名單(默認沒有這個配置,需要自己手動添加),允許遠程登錄的用戶。如果名單中沒有的用戶,則提示拒絕登錄

ssh特點

ssh服務端由2部分組成:
openssh(提供ssh服務) ,openssl(提供加密的程序)
ssh的客戶端可以用 XSHELL,Securecrt,Mobaxterm,window10下的命令行窗口等工具進行連接。

SSH的工作機制

需要依靠密匙,也就是你必須爲自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。如果你要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用你的密匙進行安全驗證。服務器收到請求之後,先在該服務器上你的主目錄下尋找你的公用密匙,服務器就用公用密匙加密“質詢”(challenge)並把它發送給客戶端軟件。客戶端軟件收到“質詢”之後就可以用你的私人密匙解密再把它發送給服務器
SSH的加密技術

加密技術:傳輸過程,數據加密。

  1. SSH1沒有對客戶端的祕鑰進行校驗,很容易被植入惡意代碼
  2. SSH2增加了一個確認聯機正確性的Diffe_Hellman機制,每次數據的傳輸,Server都會檢查數據來源的正確性,避免黑客入侵。
    SSH2支持RSA和DSA密鑰
    DSA:digital signature Algorithm 數字簽名
    RSA:既可以數字簽名又可以加密
SSH功能特點
1.SSH是安全的加密協議,用於遠程連接Linux服務器
2.SSH的默認端口是22,安全協議版本是SSH2
3.SSH服務器端主要包含2個服務功能SSH連接和SFTP服務器            xftp         rz
4.SSH客戶端包含ssh連接命令和遠程拷貝scp命令等                     ssh      scp

ssh基礎命令使用

客戶端使用ssh
  1. 登錄:3種方式
ssh 172.24.8.131
ssh [email protected]
ssh -p 22 [email protected]
  1. 直接執行命令 -->最好全路徑
ssh [email protected] ls -l /mnt
==>ssh [email protected] /bin/ls -ltr /backup/data
  1. 查看已知主機
cat /root/.ssh/known_hosts
ssh自帶的sftp功能

SecureFile Transfer Protocol的縮寫,安全文件傳送協議。可以爲傳輸文件提供一種安全的網絡的加密方法。sftp 與 ftp有着幾乎一樣的語法和功能。
SFTP 爲 SSH的其中一部分,是一種傳輸檔案至 Blogger伺服器的安全方式。其實在SSH軟件包中,已經包含了一個叫作SFTP(Secure File TransferProtocol)的安全文件信息傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接和答覆操作,所以從某種意義上來說,SFTP並不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多。
windows中可以使用CoreFTP,FileZilla, WinSCP,Xftp來連接SFTP進行上傳,下載文件,建立,刪除目錄等操作。

  1. Window和Linux的傳輸工具
    wincp filezip
    sftp -->基於ssh的安全加密傳輸
  2. sftp客戶端連接
sftp -o [email protected]
put /etc/hosts /tmp
get /etc/hosts /home/omd
  1. sftp小結:
1.linux下使用命令: sftp -o [email protected]
2.put加客戶端本地路徑上傳
3.get下載服務器端內容到本地
4.遠程連接默認連接用戶的家目錄
客戶端scp 跨機遠程拷貝

scp是securecopy的簡寫,用於在Linux下進行遠程拷貝文件的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨服務器,而且scp傳輸是加密的。可能會稍微影響一下速度。兩臺主機之間複製文件必需得同時有兩臺主機的複製執行帳號和操作權限。
scp一般用法

1)本地複製遠程文件:(把遠程的文件複製到本地)
[email protected]:/val/test/test.tar.gz  /val/test/test.tar.gz
2)遠程複製本地文件:(把本地的文件複製到遠程主機上)
scp/val/test.tar.gz [email protected]:/val/test.tar.gz
3)本地複製遠程目錄:(把遠程的目錄複製到本地)
scp [email protected]:/val/test/ /val/test/
4)遠程複製本地目錄:(把本地的目錄複製到遠程主機上)
scp -r./ubuntu_env/ [email protected]:/home/pipi

SSH服務器配置

簡單案例

修改ssh服務端口號

#修改ssh服務的端口號,在一定程度上防止他人遠程登錄,如果不知道端口號就無法遠程登錄。
[root@localhost ~]# vi /etc/ssh/sshd_config
Port 2222 #17行
#保存退出後

如果在虛擬機測試,可直接關閉防火牆。
添加防火牆允許策略
[root@localhost ~]# firewall-cmd --permanent--add-port=2222/tcp
success
[root@localhost ~]# firewall-cmd --reload
#添加自定義端口到服務
[root@localhost ~]# semanage port -a -tssh_port_t -p tcp 2222
注意:如果執行該命令時出現以下提示,請換個端口再試:
ValueError: Port tcp/4444 alreadydefined

拒絕root用戶遠程登陸

#請保持服務器上至少有一個可以遠程登陸的普通遠程賬號,root權限無敵,除非保證絕對安全,否則不讓遠程登錄。
#修改配置文件如下:
#打開該選項並修改參數爲no
PermitRootLogin no
#重啓服務後生效,使用時使用普通用戶進行登陸,需要使用root用戶時再切換

允許特定用戶ssh登陸,其他用戶都無法登陸

指定用戶登錄這樣在內網中或互聯網中具有一定可靠性

#編輯配置文件,在最後添加如下內容:
AllowUsers USERNAME
USERNAME爲你允許登陸的賬號,如果是多個用戶,中間用空格隔開
#重啓ssh服務後生效

SSH免密設置

SSH數據傳輸時候基本上所有過程都是使用對稱密鑰來加密。只有在剛開始創建連接階段和身份認證握手階段才使用非對稱加密。

#創建密鑰對
[root@localhost ~]# ssh-keygen -t rsa
ssh-keygen - 生成、管理和轉換認證密鑰   -t制定類型    RSA

##全敲確定就好  分別是死否保存在指定目錄下,和添加密碼驗證
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:
SHA256:mSYMjvS7u9SPA6DpPc3E9tSMekWbLM+g8wP9Ims47ng [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|                 |
|  . .            |
| ..+ o   +       |
| o..+ + S o      |
|o   .B O B       |
|. . O.B B        |
| ..E X.B +       |
| .+oB+Bo+        |
+----[SHA256]-----+

#證書的目錄
/root/.ssh/id_rsa
#默認創建的公鑰文件,可以查看一下,都是加密過的。
/root/.ssh/id_rsa.pub

#複製該公鑰文件到對端的該目錄下:
[root@localhost ~]#ssh-copy-id-I id_dsa.pub  [email protected]
#在本地服務器上登陸對端服務器
[root@web~]# ssh 192.168.168.169



對端進行相同操作:
##創建密鑰對
[root@localhost redhat]# ssh-keygen -t rsa   #後加-b 再加密鑰長度默認爲4096
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  ##
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
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:
SHA256:izi8NwIwoMm3geMWT4yCjR/S2G3m5BrIfT6BHvlLnh4 [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|                 |
|.                |
|=B+.             |
|@*===            |
|+*BB=   S        |
|.++Oo+ . .       |
|. .+OEo .        |
|  ..+*=          |
|    oBo.         |
+----[SHA256]-----+

[root@localhost redhat]# ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]##拷貝
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/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
[email protected]'s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

##免密登錄測試
[root@localhost redhat]# ssh [email protected]
Last login: Thu Apr 16 04:10:35 2020 from 192.168.168.169
[root@localhost ~]# 
[root@localhost ~]# ssh [email protected]
Last login: Thu Apr 16 06:38:21 2020


[root@localhost ~]# ls /root/.ssh/     其中的known_hosts存放的是遠程連接的公鑰信息。
authorized_keys  id_rsa  id_rsa.pub  known_hosts
[root@localhost ~]#
[root@localhost ~]# cat /root/.ssh/known_hosts
192.168.168.169 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBOVZf8DVItj9san0Ktt99oFx4ozyUpKK1IzjqeE3rn32ciVP2xSzbw31q0LfXr/f6JK8KM4P5hnZXk982oD/PfQ=

通過xshell使用證書進行登陸

#使用以下命令創建證書:

[root@localhost ~]# ssh-keygen -t rsa -b 4096
[root@localhost ~]# cp id_rsa.pub authorized_keys
#然後將私鑰下載到本地系統,等下用
#如果sftp登陸的時候無法成功,請恢復之前修改的ssh服務配置
#在windows系統上使用xshell創建新會話,使用公鑰進行免密登陸
#取消使用密碼進行遠程登陸
PasswordAuthenticationno
#修改配置文件保存退出,重啓服務

ssh小結

1.ssh遠程的加密連接協議,相關軟件openssh,openssl
2.默認端口22
3.ssh版本協議 ssh2 sslv3
4.服務器ssh連接,ftp連接,sshd守護進程,開機啓動
5.ssh客戶端重要命令:ssh(用戶登錄&&遠程命令),scp,sftp,
6.安全驗證方式:口令,密鑰 學習原理
7.ssh服務優化:改端口,no root,no DNS,
8.ssh密鑰對,公鑰在服務器端,私鑰在客戶端

如何防止SSH登錄入侵

  1. 密鑰登錄,更改端口
  2. 監聽本地內網IP(ListenAddress192.168.25.*)
    修改ssh服務的啓動文件sshd的幾個點
修改 /etc/ssh/sshd_config      
UseDNS no  加快響應速度因爲在內網環境下      
PermitRootLogin no  不運行root用戶直接登錄     
Port 11544 更改訪問端口號      
ListenAddress  192.168.25.130  只監聽內網的IP      
Allow User anoncvs     當前環境允許登錄的用戶      
PermitRootLogin no      是否允許root用戶登錄,一般不允許開

關於後臺的ssh服務

#查詢openssl軟件     
rpm -qa openssh openssl 

# 查詢sshd進程     
ps -ef | grep ssh         
--> /usr/sbin/sshd
 
# 查看ssh端口     
netstat -lntup | grep ssh    
ss | grep ssh                (效果同上,同下,好用)     
netstat -a | grep ssh(記住這個)     
netstat -lnt | grep 22    ==>  查看22端口有沒有開/ssh服務有沒有開啓
技巧: netstat -lnt | grep ssh | wc -l -->只要大於2個這個ssh服務就是好的 

# 查看ssh的祕鑰目錄     
ll /root/.ssh/known_hosts  # 當前用戶家目錄的.ssh目錄下 

# ssh的配置文件     cat /etc/ssh/sshd_config    
# ssh服務的關閉     service sshd stop 
# ssh服務的開啓:     service sshd start 
# ssh服務的重啓     service sshd reload    [停止進程後重啓] ==> 推薦 
                   service sshd restart   [幹掉進程後重啓] ==> 不推薦 
    
# ssh遠程登錄     
ssh 192.168.1.100      # 默認利用當前宿主用戶的用戶名登錄     
ssh [email protected]  # 利用遠程機的用戶登錄     
ssh [email protected]  -o stricthostkeychecking=no # 首次登陸免輸yes登錄     
ssh [email protected] "ls /home/omd"  # 當前服務器A遠程登錄服務器B後執行某個命令     
ssh [email protected] -t "sh /home/omd/ftl.sh"  # 當前服務器A遠程登錄服務器B後執行某個腳本

SSH批量分發與管理方案小結

IT公司企業級批量分發\管理方案(分發,批量部署、執行命令、批量管理),在多用戶直接做ssh分發的一些注意點。

  1. 利用root做ssh key驗證
    優點:簡單,易用
    缺點:安全性能差,無法禁止root遠程連接
  2. 利用普通用戶omd -->推薦
思路:把要分發的文件拷貝到服務器用戶的家目錄,然後利用sudo提權拷貝分發的文件和對應目錄,修改權限
優點:安全
缺點:複雜,配置麻煩
1.sudo提權
echo 'omd     All=(All)     NOPASSWD:/usr/bin/rsync' >> /etc/sudoers
visudo -c
grep omd /etc/sudoers
2.ssh分發到服務器的家目錄
ssh -p22 -r /etc/hosts [email protected]:~
3.ssh使用sudo複製到目標服務器的/etc
ssh -t [email protected] sudo rsync hosts /etc/
  1. 拓展方案2,不用sudo,而是設置suid對固定命令授權
優點:相當安全
缺點:複雜,安全性較差,任何人都可以處理帶有suid權限的命令
1.which rsync
2.chmod 4755 /usr/bin/rsync

在行進時,也時時有人退伍,有人落荒,有人頹唐,有人叛變,然而只要無礙於進行,則越到後來,這隊伍也就越成爲純粹、精銳的隊伍了。

點個贊再走,給創作者一點動力吧!

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