1. 程式人生 > 其它 >Linux之SSH詳解

Linux之SSH詳解

SSH(遠端連線工具)連線原理

ssh服務是一個守護程序(demon),系統後臺監聽客戶端的連線,ssh服務端的程序名為sshd,負責實時監聽客戶端的請求(IP 22埠),包括公共祕鑰等交換等資訊。

ssh服務端由2部分組成: openssh(提供ssh服務) openssl(提供加密的程式)

ssh的客戶端可以用 XSHELL,Securecrt, Mobaxterm等工具進行連線。

SSH的工作機制

伺服器啟動的時候自己產生一個金鑰(768bit公鑰),本地的ssh客戶端傳送連線請求到ssh伺服器,伺服器檢查連線點客戶端傳送的資料和IP地址,確認合法後傳送金鑰(768bits)給客戶端,此時客戶端將本地私鑰(256bit)和伺服器的公鑰(768bit)結合成金鑰對key(1024bit),發回給伺服器端,建立連線通過key-pair資料傳輸。

  • 1.遠端Server收到Client端使用者TopGun的登入請求,Server把自己的公鑰發給使用者。
  • 2.Client使用這個公鑰,將密碼進行加密。
  • 3.Client將加密的密碼傳送給Server端。
  • 4.遠端Server用自己的私鑰,解密登入密碼,然後驗證其合法性。
  • 5.若驗證結果,給Client相應的響應

Client端如何保證接受到的公鑰就是目標Server端的?

  • 1.Client將自己的公鑰存放在Server上,追加在檔案authorized_keys中。
  • 2.Server端接收到Client的連線請求後,會在authorized_keys中匹配到Client的公鑰pubKey,並生成隨機數R,用Client的公鑰對該隨機數進行加密得到pubKey(R),然後將加密後資訊傳送給Client。
  • 3.Client端通過私鑰進行解密得到隨機數R,然後對隨機數R和本次會話的SessionKey利用MD5生成摘要Digest1,傳送給Server端。
  • 4.Server端會也會對R和SessionKey利用同樣摘要演算法生成Digest2。
  • 5.Server端會最後比較Digest1和Digest2是否相同,完成認證過程。

更多學習...

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伺服器
4.SSH客戶端包含ssh連線命令和遠端拷貝scp命令等

如何防止SSH登入入侵?

1.金鑰登入,更改埠
2.牤牛陣法
3.監聽本地內網IP(ListenAddress 192.168.25.*)

SSH功能大全

1.登入                   
       ssh -p22 [email protected]               
   2.直接執行命令  -->最好全路徑                   
       ssh [email protected] ls -ltr /backup/data                       
           ==>ssh [email protected] /bin/ls -ltr /backup/data               
   3.檢視已知主機                    
        cat /root/.ssh/known_hosts
   4.ssh遠端執行sudo命令
       ssh -t [email protected] sudo rsync hosts /etc/
 
   5.scp               
             1.功能   -->遠端檔案的安全(加密)拷貝                   
                 scp -P22 -r -p /home/omd/h.txt [email protected]:/home/omd/               
             2.scp知識小結                   
                 scp是加密遠端拷貝,cp為本地拷貝                   
                 可以推送過去,也可以拉過來                   
                 每次都是全量拷貝(效率不高,適合第一次),增量拷貝用rsync
 
   6.ssh自帶的sftp功能               
             1.Window和Linux的傳輸工具                   
                  wincp   filezip                   
               sftp  -->基於ssh的安全加密傳輸                   
               samba   
             2.sftp客戶端連線                   
                sftp -oPort=22 [email protected]                   
                put /etc/hosts /tmp                   
                get /etc/hosts /home/omd   
            3.sftp小結:                   
                1.linux下使用命令: sftp -oPort=22 [email protected]                   
                2.put加客戶端本地路徑上傳                  
                3.get下載伺服器端內容到本地                   
                4.遠端連線預設連線使用者的家目錄

  

SSH命令常見引數

usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-e escape_char] [-F configfile]
           [-i identity_file] [-L [bind_address:]port:host:hostport]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-R [bind_address:]port:host:hostport] [-S ctl_path]
           [-W host:port] [-w local_tun[:remote_tun]]
           [user@]hostname [command]

  

關於後臺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的免密登入

詳見本人的另一篇部落格

SSH問題排查

1.判斷物理鏈路是否通  ping 192.168.25.130     線路 | 防火牆 | 是否同一個網的
            ping   本身是icmp協議
2.判斷服務是否正常

telnet 192.168.25.130 22

3.Linux防火牆

service iptables status ==>  /etc/init.d/iptables status  

4.開啟ssh的調測進行觀察

ssh -vvv [email protected]

  

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/

3.拓展方案2,不用sudo,而是設定suid對固定命令提權

優點:相當安全
       缺點:複雜,安全性較差,任何人都可以處理帶有suid許可權的命令
       1.which rsync
       2.chmod 4755 /usr/bin/rsync

  

SSH章節小結

 1.ssh遠端的加密連線協議,相關軟體openssh,openssl
2.預設埠22
3.ssh版本協議
4.伺服器ssh連線,ftp連線,sshd守護程序,開機啟動
5.ssh客戶端重要命令:ssh(使用者登入&&遠端命令),scp,sftp,
6.安全驗證方式:口令,金鑰 學習原理
7.ssh服務優化:改埠,改監聽,no root,no empty,no DNS,
8.ssh金鑰對,公鑰在伺服器端,私鑰在客戶端

關於ssh啟動檔案sshd的幾個點

1-1修改 /etc/ssh/sshd_config<br>        GSSAPIAuthentication yes    解決一臺伺服器管理多個ssh服務
    UseDNS no  加快響應速度因為在內網環境下
    PermitRootLogin no  不執行root使用者直接登入
    Port 11544 更改訪問埠號
    ListenAddress  192.168.25.130  只監聽內網的IP
    Match User anoncvs     當前環境允許登入的使用者
    PermitRootLogin no      是否允許root使用者登入,一般不允許開
1-2重啟服務
    service sshd restart       寫入命令進記憶體
    service sshd reload(優先)  reload是一個平滑的訪問,不影響使用者使用
1-3檢視連線埠
    netstat -an | grep EST

  

SSH跳過HostKeyChecking,不用輸入yes

SSH跳過輸入ssh跳過RSA key fingerprint輸入yes/no

在配置大量的節點之間需要ssh連通的時候,如果自動複製很多節點,都需要輸入yes,兩兩節點之間都要互通一次,這樣會造成很大的麻煩

解決1;修改配置檔案/etc/ssh/ssh_config

找  到  # StrictHostKeyChecking ask  
修改為:StrictHostKeyChecking no 

解決2:新增引數–o 【o=option】

ssh [email protected] -o "StrictHostKeyChecking no"

  

本文引用自https://www.cnblogs.com/ftl1012/p/ssh.html