您好,歡迎來到網暖!
?
當前位置:網暖 » 站長資訊 » 建站基礎 » 網絡技術 » 文章詳細 訂閱RssFeed

SSH

來源:網絡整理 瀏覽:348次 時間:2019-12-13
簡介

SSH(安全外殼)是一個程序,用于在遠程計算機上登錄并執行命令。 SSH旨在代替rlogin和rsh,并通過不安全的網絡在兩個不受信任的主機之間提供安全的加密通信。 X11連接和任意TCP / IP端口也可以通過安全通道轉發。

具體的軟件實現:
  • openssh:ssh協議的開源實現,CentOS默認安裝;
  • dropbear:另一個開源實現
SSH協議版本

v1:基于CRC-32做MAC,不安全。(man-in-the-middle)
v2:雙方主機協議選擇安全的MAC方式

openssh簡介

OpenSSH是最新的SSH免費版本的OpenBSD版本,在安全性和功能方面使其保持最新。
該軟件包包括OpenSSH客戶端和服務器所需的核心文件。 為了使該軟件包有用,您還應該安裝openssh-clients,openssh-server或兩者。

相關包:
  • openssh
  • openssh-clients
  • openssh-server
工具

基于C/S結構
Linux Client:ssh,scp,sftp,slogin
Windows Client:xshell,putty,securecrt
Server:sshd

公鑰交換

SSH

  • 客戶端發起鏈接請求
  • 服務端返回自己的公鑰,以及一個會話ID(這一步客戶端得到服務端公鑰)
  • 客戶端生成密鑰對
  • 客戶端用自己的公鑰異或會話ID,計算出一個值Res,并用服務端的公鑰加密
  • 客戶端發送加密后的值到服務端,服務端用私鑰解密,得到Res
  • 服務端用解密后的值Res異或會話ID,計算出客戶端的公鑰(這一步服務端得到客戶端公鑰)
  • 最終:雙方各自持有三個秘鑰,分別為自己的一對公、私鑰,以及對方的公鑰,之后的所有通訊都會被加密
ssh加密通訊

SSH

ssh客戶端
  • 允許實現對遠程系統經驗證地加密安全訪問;
  • 當client遠程連接ssh server是,會復制ssh server中/etc/ssh/ssh_host*key.pub(CentOS6:/etc/ssh/ssh_host_rsa_key.pub,CentOS7:/etc/ssh/ssh_host_ecdsa_key.pub)文件中的公鑰到客戶機的~/.ssh/known_hosts文件中。下次連接時,會自動匹配相應的私鑰,如果不匹配,則拒絕連接。

客戶端組件:ssh
配置文件:/etc/ssh/ssh_config
StrictHostKeyChecking no 表示首次登陸不顯示檢查提示
SSH
SSH
格式

ssh [[email protected]]host [COMMAND]ssh [-l user] host [COMMAND]

常用選項:

-p port:遠程服務器監聽的端口-b:指定連接的源IP-v:調試模式-C:壓縮方式-X:支持x11轉發-t:強制偽tty分配ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3
ssh服務登錄驗證方式
  • 用戶/口令
  • 基于密鑰對
基于用戶名和口令的登錄驗證

SSH
1.客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶
2.用戶會根據服務器發來的公鑰對密碼進行加密
3.加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功

基于密鑰對的登錄驗證

SSH
1.首先在客戶端生成一對密鑰(ssh-keygen)
2.并將客戶端的公鑰ssh-copy-id 拷貝到服務端
3.當客戶端再次發送一個連接請求,包括ip、用戶名
4.服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:13579
5.服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
6.得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服務端
7.服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄

基于密鑰對認證的實現

1)在客戶端生成密鑰對

[[email protected] ~]# ssh-keygen -t rsa -P '' -f  ~/.ssh/id_rsaGenerating public/private rsa key pair.Created directory '/root/.ssh'.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:T/ApAu61soTHeELNlkMyPeMnbAT4eAE4wVqwQDSJYCc [email protected] key's randomart image is:+---[RSA 2048]----+|&Eo.             ||B+*o             ||o=o.B   .        ||o [email protected] =   o .     || .. % + S +      || . B = o +       ||  + B .   .      ||   = o           ||    .            |+----[SHA256]-----+

2)把公鑰傳輸到遠程服務器對應的家目錄

[[email protected] ~]# ssh-copy-id [email protected]/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"The authenticity of host '192.168.8.61 (192.168.8.61)' can't be established.RSA key fingerprint is SHA256:PEtn8a7YXM4I8wBJMOPIBFmkcJEA6IFiraXR6wNrUiE.RSA key fingerprint is MD5:5a:ad:21:76:fa:a4:16:01:1a:54:3b:4d:2d:9a:1c:5c.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 [email protected]'s password: Number of key(s) added: 1Now try logging into the machine, with:   "ssh '[email protected]'"and check to make sure that only the key(s) you wanted were added.

3)測試

[[email protected] ~]# ssh [email protected] login: Fri Nov  8 00:41:27 2019 from 192.168.8.129[[email protected] ~]#

4)在Xshell實現基于key驗證

首先在本機將公鑰重命名為authorized_keysmv id_rsa.pub authorized_keys然后使用sz命令將私鑰導出到本地[[email protected] .ssh]# sz id_rsa最后在xshell中設置使用key登錄即可,如下圖

SSH

5)重新設置私鑰口令

[[email protected] ~]# ssh-keygen -pEnter file in which the key is (/root/.ssh/id_rsa):           Enter old passphrase: Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.

6)當給私鑰設置了口令之后,每次連接到別的主機都需要輸入私鑰的口令,這樣太過繁瑣,于是,可以將私鑰身份添加到身份驗證代理ssh-agent,這樣就只要輸入一次私鑰口令就行了。

[[email protected] ~]# ssh-agent bash

7)密鑰通過命令添加給代理

[[email protected] ~]# ssh-add
ssh服務器

服務器端:sshd
配置文件:/etc/ssh/sshd_config
常用參數:

GatewayPorts 指定是否允許遠程主機連接到為客戶端轉發的端口。 默認情況下,sshd(8)將遠程端口轉發綁定到環回地址。 這樣可以防止其他遠程主機連接到轉發的端口。 可以使用GatewayPorts指定sshd應該允許遠程端口轉發綁定到非環回地址,從而允許其他主機進行連接。 該參數可以是“否”以強制遠程端口轉發僅對本地主機可用,“是”以強制遠程端口轉發綁定到通配符地址,或者可以是“ clientspecified”以允許客戶端選擇要向其發送地址的地址。 轉發是綁定的。 默認為“否”。GSSAPIAuthentication 指定是否允許基于GSSAPI的用戶身份驗證。 默認為“否”。 請注意,此選項僅適用于協議版本2。ClientAliveInterval 設置超時間隔(以秒為單位),如果沒有從客戶端接收到任何數據,則sshd(8)將通過加密的通道發送消息,以請求客戶端的響應。 默認值為0,表示這些消息將不會發送到客戶端。 此選項僅適用于協議版本2。ClientAliveCountMax 設置客戶端活動消息的數量,該消息可以在sshd(8)接收不到來自客戶端的任何消息的情況下發送。 如果在發送客戶端活動消息時達到此閾值,則sshd將斷開客戶端連接,從而終止會話。 重要的是要注意,客戶端活動消息的使用與TCPKeepAlive有很大不同。 客戶端活動消息是通過加密通道發送的,因此不會被欺騙。 由TCPKeepAlive啟用的TCP keepalive選項是可欺騙的。 當客戶端或服務器依賴于知道連接何時變為非活動狀態時,客戶端活動機制非常有用。默認值為3。如果ClientAliveInterval設置為15,并且ClientAliveCountMax保留默認值,則無響應的SSH客戶端將在大約45秒后斷開連接。 此選項僅適用于協議版本2。UseDNS 指定sshd(8)是否應查找遠程主機名,并檢查所解析的遠程IP地址的主機名是否映射回相同的IP地址。 默認值為“是”。改為no可以提高響應速度MaxStartups 指定到SSH守護程序的并發未認證連接的最大數量。 其他連接將被丟棄,直到身份驗證成功或該連接的LoginGraceTime過期為止。 默認值為10:30:100。Banner 在允許身份驗證之前,指定文件的內容將發送到遠程用戶。 如果參數為“ none”,則不會顯示任何橫幅。 此選項僅適用于協議版本2。默認情況下,不顯示橫幅。要顯示橫幅可以通過Banner /path/file格式來設置限制用戶連接AllowUsersAllowGroupsDenyUsersDenyGroups如果沒有這些關鍵詞,只需根據需要創建它們。必須只創建您需要的關鍵詞,以免出現不可靠的結果。AllowUsers 和 DenyUsers 列表是由空格分隔的有效用戶名,AllowGroups 和 DenyGroups 只能是現有的有效組。按以下次序匹配模式:DenyUsers,AllowUsers,DenyGroups,AllowGroups。對 sshd_config 文件的任何修改要到重新啟動 sshd 之后才會生效,如下CentOS6:service sshd restartCentOS7:systemctl restart sshd如果在 AllowUsers 列表中設置用戶 ID,那么只有這些用戶可以通過 SSH 連接。對于 DenyUsers 列表也是如此,只拒絕 DenyUsers 列表中包含的用戶訪問。同樣的規則也適用于組列表。如果同時使用允許列表和拒絕列表,就非常讓人迷惑,所以不要這樣做。應該根據自己的安全需求,只使用允許列表或拒絕列表之一。如果用戶在系統上有帳戶,但是在 AllowUsers 列表中沒有他們的用戶 ID,就拒絕他們訪問。同樣的規則也適用于 DenyUsers 列表。現在來看一個示例,假設 AllowUsers 列表包含以下內容:AllowUsers hechunping如果用戶 test 嘗試通過 SSH 訪問,那么該訪問會遭到拒絕,因為這個用戶名沒有出現在 AllowUsers 列表中。[[email protected] ~]# ssh [email protected]@192.168.8.61's password: Permission denied, please try [email protected]'s password: Permission denied, please try [email protected]'s password: Permission denied (publickey,password).通過查看 /var/log/secure文件確認這一點,這里的消息表明在 AllowUsers 列表中沒有列出用戶 test。Nov  8 14:16:49 CentOS6 sshd[3887]: User test from 192.168.8.129 not allowed because not listed in AllowUsersNov  8 14:16:49 CentOS6 sshd[3888]: input_userauth_request: invalid user testNov  8 14:16:51 CentOS6 sshd[3887]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.8.129  user=testNov  8 14:16:53 CentOS6 sshd[3887]: Failed password for invalid user test from 192.168.8.129 port 37042 ssh2Nov  8 14:16:58 CentOS6 sshd[3887]: Failed password for invalid user test from 192.168.8.129 port 37042 ssh2Nov  8 14:17:02 CentOS6 sshd[3887]: Failed password for invalid user test from 192.168.8.129 port 37042 ssh2Nov  8 14:17:02 CentOS6 sshd[3888]: Connection closed by 192.168.8.129Nov  8 14:17:02 CentOS6 sshd[3887]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.8.129  user=test
ssh服務的最佳實踐建議相關配置使用非默認端口Port,默認22禁止使用protocol version 1Protocol 2限制可登錄用戶AllowUsers,默認允許所有設置空閑會話超時時長ClientAliveInterval,默認為0利用防火墻設置ssh訪問策略iptables或者firewalld僅監聽特定的IP地址ListenAddress,默認0.0.0.0基于口令認證時,使用強密碼策略例如從/dev/urandom文件中讀取隨機字符生成密碼使用基于密鑰的認證PubkeyAuthentication,默認yes禁止使用空密碼PermitEmptyPasswords,默認no禁止root用戶直接登錄PermitRootLogin,默認yes限制ssh的訪問頻度和并發在線數MaxAuthTries:指定每個連接允許的最大身份驗證嘗試次數。 一旦故障數量達到該值的一半,就會記錄其他故障。 預設值為6。 MaxSessions:指定每個網絡連接允許的最大打開會話數。 預設值為10。經常分析日志/var/log/secure(安全日志),/var/log/btmp(登錄失敗的記錄,查看文件需要使用lastb -f file格式)scp命令

語法:

scp [options] SRC... DEST/

格式:

scp [options] [[email protected]]host:/sourcefile /destpathscp [options] /sourcefile [[email protected]]host:/destpath

常用選項:

-C 壓縮數據流-r 遞歸復制-p 保持原文件的屬性信息-q 靜默模式-P 指明遠程主機監聽的端口

【例1】將本機/data/name.txt文件發送到172.20.200.34主機的/data目錄下

[[email protected] ~]#scp -p /data/name.txt [email protected]:/data/name.txt                                       100%   21     0.0KB/s   00:00 

【例2】將172.20.200.34主機的/etc/fstab文件復制到本機的/data目錄下

[[email protected] ~]#scp -p [email protected]:/etc/fstab /data/fstab  
rsync命令

特點:

a.基于ssh和rsh服務實現高效率的遠程系統之間復制文件b.使用安全的shell連接做為傳輸方式c.比scp更快,只復制不同的文件

語法:

本地:  rsync [OPTION...] SRC... [DEST]通過遠程shell:Pull: rsync [OPTION...] [[email protected]]HOST:SRC... [DEST]Push: rsync [OPTION...] SRC... [[email protected]]HOST:DEST

常用選項:

-n 模擬復制過程-v 顯示詳細過程-r 遞歸復制目錄樹-p 保留權限-t 保留時間戳-g 保留組信息-o 保留所有者信息-l 將軟鏈接文件本身進行復制(默認)-L 將軟鏈接文件指向的文件復制-a 存檔,相當于–rlptgoD,但不保留ACL(-A)和SELinux屬性(-X)--delete 從目標目錄中刪除與源目錄無關的文件

【例1】在本地中,將/test/目錄下的文件復制到/aaa目錄下,并且刪除/aaa目錄下與/test目錄下無關的文件

[[email protected] ~]# tree /test//test/├── a├── b└── c0 directories, 3 files[[email protected] ~]# tree /aaa//aaa/├── a├── b├── c└── d0 directories, 4 files[[email protected] ~]# rsync -av --delete /test/ /aaa/sending incremental file listdeleting d./sent 83 bytes  received 20 bytes  206.00 bytes/sectotal size is 0  speedup is 0.00發現刪除了/aaa目錄下的d文件

【例2】通過遠程shell將本地/test目錄下的文件復制到遠程主機192.168.8.61的/test目錄下

[[email protected] ~]# rsync -av /test/ [email protected]:/test/
sftp命令
交互式的文件傳輸工具用法和傳統的ftp工具相似利用ssh服務實現安全的文件上傳和下載使用ls cd mkdir rmdir pwd get put等指令,可用?或help獲取幫助信息

語法:

sftp [[email protected]]host[:file ...]sftp [[email protected]]host[:dir[/]]

【例】:從192.168.8.61主機中的/data目錄下載ssh.txt文件到本機的/test目錄

[[email protected] ~]# sftp 192.168.8.61:/data/Enter passphrase for key '/root/.ssh/id_rsa': Connected to 192.168.8.61.Changing to: /data/sftp> get ssh.txt /testFetching /data/ssh.txt to /test/ssh.txt/data/ssh.txt                                  100%   21     5.0KB/s   00:00    sftp> bye[[email protected] ~]# ls /test/ssh.txt -l-rw-r--r-- 1 root root 21 Nov  9 16:02 /test/ssh.txt

推薦站點

  • 騰訊騰訊

    騰訊網(www.QQ.com)是中國瀏覽量最大的中文門戶網站,是騰訊公司推出的集新聞信息、互動社區、娛樂產品和基礎服務為一體的大型綜合門戶網站。騰訊網服務于全球華人用戶,致力成為最具傳播力和互動性,權威、主流、時尚的互聯網媒體平臺。通過強大的實時新聞和全面深入的信息資訊服務,為中國數以億計的互聯網用戶提供富有創意的網上新生活。

    www.qq.com
  • 搜狐搜狐

    搜狐網是全球最大的中文門戶網站,為用戶提供24小時不間斷的最新資訊,及搜索、郵件等網絡服務。內容包括全球熱點事件、突發新聞、時事評論、熱播影視劇、體育賽事、行業動態、生活服務信息,以及論壇、博客、微博、我的搜狐等互動空間。

    www.sohu.com
  • 網易網易

    網易是中國領先的互聯網技術公司,為用戶提供免費郵箱、游戲、搜索引擎服務,開設新聞、娛樂、體育等30多個內容頻道,及博客、視頻、論壇等互動交流,網聚人的力量。

    www.163.com
  • 新浪新浪

    新浪網為全球用戶24小時提供全面及時的中文資訊,內容覆蓋國內外突發新聞事件、體壇賽事、娛樂時尚、產業資訊、實用信息等,設有新聞、體育、娛樂、財經、科技、房產、汽車等30多個內容頻道,同時開設博客、視頻、論壇等自由互動交流空間。

    www.sina.com.cn
  • 百度一下百度一下

    百度一下,你就知道

    www.baidu.com
?
最牛一尾中特规律