1. 程式人生 > >linux下ssh服務、配置詳解

linux下ssh服務、配置詳解

實現原理
“公私鑰”認證的方式來進行ssh登入

“公私鑰”認證方式簡單的解釋是:
首先在客戶端上建立一對公私鑰 (公鑰檔案:~/.ssh/id_rsa.pub; 私鑰檔案:~/.ssh/id_rsa),然後把公鑰放到伺服器上(~/.ssh/authorized_keys), 自己保留好私鑰,當ssh登入時,ssh程式會發送私鑰去和伺服器上的公鑰做匹配.如果匹配成功就可以登入了。

許可權安全
.ssh目錄700要有執行許可權,authorized_keys 公鑰、私鑰設定600,這些檔案只需要root讀就可以了
drwx—— .ssh

-rwx—— authorized_keys
-rw-r–r– known_hosts
-rw——- xxxx_yw
-rw——- xxxx_yw.pub

**配置檔案/etc/ssh/ssh_config與/etc/ssh/sshd_config

在遠端管理linux系統基本上都要使用到ssh,原因很簡單:telnet、FTP等傳輸方式是‍以明文傳送使用者認證資訊,本質上是不安全的,存在被網路竊聽的危險。SSH(Secure Shell)目前較可靠,是專為遠端登入會話和其他網路服務提供安全性的協議。利用SSH協議可以有效防止遠端管理過程中的資訊洩露問題,透過SSH可以對所有傳輸的資料進行加密,也能夠防止DNS欺騙和IP欺騙。

ssh_config和sshd_config都是ssh伺服器的配置檔案,二者區別在於,前者是針對客戶端的配置檔案,後者則是針對服務端的配置檔案。兩個配置檔案都允許你通過設定不同的選項來改變客戶端程式的執行方式。下面列出來的是兩個配置檔案中最重要的一些關鍵詞,每一行為“關鍵詞&值”的形式,其中“關鍵詞”是忽略大小寫的。
‍‍編輯 /etc/ssh/ssh_config 檔案

# Site-wide defaults for various options
   Host *
        ForwardAgent no
        ForwardX11 no
        RhostsAuthentication no
        RhostsRSAAuthentication no
    ‍    RSAAuthentication yes
        PasswordAuthentication yes
        FallBackToRsh no
        UseRsh no
        BatchMode no
        CheckHostIP yes
StrictHostKeyChecking no IdentityFile ~/.ssh/identity Port 22 Cipher blowfish EscapeChar ~

下面對上述選項引數逐進行解釋:

  • Host *

    “Host”只對匹配後面字串的計算機有效,“”表示所有的計算機。從該項格式前置一些可以看出,這是一個類似於全域性的選項,表示下面縮排的選項都適用於該設定,可以指定某計算機替換號使下面選項只針對該算機器生效。

  • ForwardAgent no

    “ForwardAgent”設定連線是否經過驗證代理(如果存在)轉發給遠端計算機。

  • ForwardX11 no

    “ForwardX11”設定X11連線是否被自動重定向到安全的通道和顯示集(DISPLAY set)。

  • RhostsAuthentication no

    “RhostsAuthentication”設定是否使用基於rhosts的安全驗證。

  • RhostsRSAAuthentication no

    “RhostsRSAAuthentication”設定是否使用用RSA演算法的基於rhosts的安全驗證。

  • RSAAuthentication yes

    "RSAAuthentication"設定是否使用RSA演算法進行安全驗證。
    
  • PasswordAuthentication yes

    “PasswordAuthentication”設定是否使用口令驗證。

  • FallBackToRsh no

    “FallBackToRsh”設定如果用ssh連接出現錯誤是否自動使用rsh,由於rsh並不安全,所以此選項應當設定為”no”。

  • UseRsh no

    “UseRsh”設定是否在這臺計算機上使用”rlogin/rsh”,原因同上,設為”no”。

  • BatchMode no

    “BatchMode”:批處理模式,一般設為”no”;如果設為”yes”,互動式輸入口令的提示將被禁止,這個選項對指令碼檔案和批處理任務十分有用。

  • CheckHostIP yes

    “CheckHostIP”設定ssh是否檢視連線到伺服器的主機的IP地址以防止DNS欺騙。建議設定為”yes”。

  • StrictHostKeyChecking no

    “StrictHostKeyChecking”如果設為”yes”,ssh將不會自動把計算機的密匙加入”$HOME/.ssh/known_hosts”檔案,且一旦計算機的密匙發生了變化,就拒絕連線。

  • IdentityFile ~/.ssh/identity

“IdentityFile”設定讀取使用者的RSA安全驗證標識。

  • Port 22

“Port”設定連線到遠端主機的埠,ssh預設埠為22。

  • Cipher blowfish

“Cipher”設定加密用的金鑰,blowfish可以自己隨意設定。

  • EscapeChar ~

“EscapeChar”設定escape字元。

編輯 /etc/ssh/sshd_config 檔案:‍

          Port 22
          ListenAddress 192.168.1.1
          HostKey /etc/ssh/ssh_host_key
          ServerKeyBits 1024
          LoginGraceTime 600
          KeyRegenerationInterval 3600
          PermitRootLogin no
          IgnoreRhosts yes
          IgnoreUserKnownHosts yes
          StrictModes yes
          X11Forwarding no
          PrintMotd yes
          SyslogFacility AUTH
          LogLevel INFO
          RhostsAuthentication no
          RhostsRSAAuthentication no
          RSAAuthentication yes
          PasswordAuthentication yes
          PermitEmptyPasswords no
          AllowUsers admin

‍下面逐行說明上面的選項設定:

  • Port 22

    “Port”設定sshd監聽的埠號。

  • ListenAddress 192.168.1.1

    “ListenAddress”設定sshd伺服器繫結的IP地址。

  • HostKey /etc/ssh/ssh_host_key

    “HostKey”設定包含計算機私人密匙的檔案。

  • ServerKeyBits 1024

    “ServerKeyBits”定義伺服器密匙的位數。

  • LoginGraceTime 600

    “LoginGraceTime”設定如果使用者不能成功登入,在切斷連線之前伺服器需要等待的時間(以秒為單位)。

  • KeyRegenerationInterval 3600

    “KeyRegenerationInterval”設定在多少秒之後自動重新生成伺服器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的資訊。

  • PermitRootLogin no

    “PermitRootLogin”設定是否允許root通過ssh登入。這個選項從安全形度來講應設成”no”。

  • IgnoreRhosts yes

    “IgnoreRhosts”設定驗證的時候是否使用“rhosts”和“shosts”檔案。

  • IgnoreUserKnownHosts yes

    “IgnoreUserKnownHosts”設定ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略使用者的”$HOME/.ssh/known_hosts”

  • StrictModes yes

    “StrictModes”設定ssh在接收登入請求之前是否檢查使用者家目錄和rhosts檔案的許可權和所有權。這通常是必要的,因為新手經常會把自己的目錄和檔案設成任何人都有寫許可權。

  • X11Forwarding no

    “X11Forwarding”設定是否允許X11轉發。

  • PrintMotd yes

    “PrintMotd”設定sshd是否在使用者登入的時候顯示“/etc/motd”中的資訊。

  • SyslogFacility AUTH

    “SyslogFacility”設定在記錄來自sshd的訊息的時候,是否給出“facility code”。

  • LogLevel INFO

    “LogLevel”設定記錄sshd日誌訊息的層次。INFO是一個好的選擇。檢視sshd的man幫助頁,已獲取更多的資訊。

  • RhostsAuthentication no

    “RhostsAuthentication”設定只用rhosts或“/etc/hosts.equiv”進行安全驗證是否已經足夠了。

  • RhostsRSAAuthentication no

    “RhostsRSA”設定是否允許用rhosts或“/etc/hosts.equiv”加上RSA進行安全驗證。

  • RSAAuthentication yes

    “RSAAuthentication”設定是否允許只有RSA安全驗證。

  • PasswordAuthentication yes

    “PasswordAuthentication”設定是否允許口令驗證。

  • PermitEmptyPasswords no

    “PermitEmptyPasswords”設定是否允許用口令為空的帳號登入。

  • AllowUsers admin

       "AllowUsers”的後面可以跟任意的數量的使用者名稱的匹配串,這些字串用空格隔開。主機名可以是域名或IP地址。
    

通常情況下我們在連線 OpenSSH伺服器的時候假如 UseDNS選項是開啟的話,伺服器會先根據客戶端的 IP地址進行 DNS PTR反向查詢出客戶端的主機名,然後根據查詢出的客戶端主機名進行DNS正向A記錄查詢,並驗證是否與原始 IP地址一致,通過此種措施來防止客戶端欺騙。平時我們都是動態 IP不會有PTR記錄,所以開啟此選項也沒有太多作用。我們可以通過關閉此功能來提高連線 OpenSSH 伺服器的速度。