Linux / Unix命令:sshd

名稱

sshd - OpenSSH SSH守護進程

概要

sshd [ - deiqtD46 ] [ - b bits ] [ - f config_file ] [ - g login_grace_time ] [ - h host_key_file ] [ - k key_gen_time ] [ - o option ] [ - p port ] [ - u len ]

描述

sshd (SSH Daemon)是ssh(1)的守護程序 。 這些程序一起取代rlogin rsh ,並通過不安全的網絡提供兩台不可信主機之間的安全加密通信 。 這些程序旨在盡可能方便地安裝和使用。

sshd是監聽來自客戶端的連接的守護進程。 它通常在從/ etc / rc啟動時啟動,它為每個傳入連接分配一個新的守護程序。 分叉的守護進程處理密鑰交換,加密,認證,命令執行和數據交換。 這個sshd的實現同時支持SSH協議版本1和2。

SSH協議版本1

每個主機都有一個用於識別主機的特定於主機的RSA密鑰(通常為1024位)。 另外,當守護進程啟動時,它會生成服務器RSA密鑰(通常為768位)。 如果已經使用該密鑰,則該密鑰通常每小時重新生成一次,並且永遠不會存儲在磁盤上。

每當客戶端連接守護進程響應其公共主機和服務器密鑰。 客戶端將RSA主機密鑰與其自己的數據庫進行比較,以驗證它沒有更改。 客戶端然後生成一個256位隨機數。 它使用主機密鑰和服務器密鑰對該隨機數進行加密,並將加密號碼發送給服務器。 雙方然後使用此隨機數作為會話密鑰,用於加密會話中的所有進一步通信。 會話的其餘部分使用傳統密碼進行加密,目前是Blowfish或3DES,默認情況下使用3DES。 客戶端選擇使用服務器提供的加密算法

接下來,服務器和客戶端進入認證對話框。 客戶端嘗試使用.rhosts身份驗證,.rhosts身份驗證和RSA主機身份驗證,RSA質詢 - 響應身份驗證或基於密碼的身份驗證進行身份驗證

Rhosts身份驗證通常被禁用,因為它基本上不安全,但可以根據需要在服務器配置文件中啟用。 除非禁用rshd rlogind和rexecd(因此完全禁用rlogin和rsh進入機器),否則係統安全性不會提高。

SSH協議版本2

版本2的工作原理類似:每台主機都有一個用於識別主機的主機特定密鑰(RSA或DSA)。 但是,守護進程啟動時,它不會生成服務器密鑰。 通過Diffie-Hellman密鑰協議提供前向安全性。 該密鑰協議產生共享會話密鑰。

會話的其餘部分使用對稱密碼進行加密,該密碼使用128位AES,Blowfish,3DES,CAST128,Arcfour,192位AES或256位AES。 客戶端選擇使用服務器提供的加密算法。 此外,會話完整性通過加密消息認證代碼(hmac-sha1或hmac-md5)提供。

協議版本2提供基於公共密鑰的用戶(PubkeyAuthentication)或客戶端主機(HostbasedAuthentication)認證方法,常規密碼認證和基於挑戰 - 響應的方法。

命令執行和數據轉發

如果客戶端自己成功進行身份驗證,則會輸入用於準備會話的對話框。 此時客戶端可能會要求分配偽tty,轉發X11連接,轉發TCP / IP連接或通過安全通道轉發身份驗證代理連接等。

最後,客戶端請求一個shell或者執行一個命令。 雙方然後進入會話模式。 在這種模式下,任何一方都可以隨時發送數據,並且這些數據被轉發到服務器端的shell或命令以及客戶端的用戶終端。

當用戶程序終止並且所有轉發的X11和其他連接已關閉時,服務器向客戶端發送命令退出狀態,並且雙方退出。

可以使用命令行選項或配置文件來配置sshd 。 命令行選項覆蓋配置文件中指定的值。

sshd在接收到掛斷信號時重新讀取其配置文件, SIGHUP通過執行它自己的名稱來啟動它,即/ usr / sbin / sshd

選項如下:

-b

指定臨時協議版本1服務器密鑰中的位數(默認值768)。

-d

調試模式。 服務器將詳細的調試輸出發送到系統日誌,並且不會將其自身置於後台。 服務器也不能工作,只會處理一個連接。 該選項僅用於調試服務器。 多個-d選項增加了調試級別。 最大值是3。

-e

當指定這個選項時, sshd會將輸出發送到標準錯誤而不是系統日誌。

-f 配置文件

指定配置文件的名稱。 如果沒有配置文件,默認是/ etc / ssh / sshd_config sshd拒絕啟動。

-g login_grace_time

為客戶端提供寬限期進行身份驗證(默認為120秒)。 如果客戶端在這幾秒鐘內未能對用戶進行身份驗證,則服務器將斷開連接並退出。 值為零表示沒有限制。

-h host_key_file

指定從中讀取主機密鑰的文件。 如果sshd不是以超級用戶身份運行,則必須給出該選項(因為普通主機密鑰文件通常不能被除root以外的任何人讀取)。 協議版本1的缺省值是/ etc / ssh / ssh_host_key,協議版本2的缺省值是/ etc / ssh / ssh_host_rsa_key和/ etc / ssh / ssh_host_dsa_key。不同協議版本和主機密鑰可能有多個主機密鑰文件算法。

-一世

指定從inetd運行sshdsshd通常不會從inetd運行,因為它需要在響應客戶端之前生成服務器密鑰,這可能需要幾十秒。 如果密鑰每次都重新生成,客戶端必須等待太久。 但是,使用inetd使用sshd的小密鑰大小(例如512)可能是可行的。

-k key_gen_time

指定短暫協議版本1服務器密鑰重新生成的頻率(默認為3600秒或1小時)。 經常重新生成密鑰的動機是密鑰沒有存儲在任何地方,大約一個小時後,即使機器被破解或被物理佔用,也無法恢復解密被攔截通信的密鑰。 值為零表示密鑰永遠不會被重新生成。

-o 選項

可用於以配置文件中使用的格式提供選項。 這對於指定沒有單獨的命令行標誌的選項很有用。

-p 端口

指定服務器偵聽連接的端口(缺省值為22)。 多個端口選項是允許的。 當指定命令行端口時,忽略配置文件中指定的端口。

-q

靜音模式。 什麼都不會發送到系統日誌。 通常記錄每個連接的開始,認證和終止。

-t

測試模式。 只檢查配置文件的有效性和密鑰的完整性。 這對於可靠地更新sshd非常有用,因為配置選項可能會更改。

-u len

該選項用於指定保存遠程主機名的utmp結構中字段的大小。 如果解析的主機名比len長,則將使用帶點的十進制值。 這允許具有很長主機名的主機溢出該字段仍然被唯一標識。 指定 - u0表示只應將點分十進制地址放入utmp文件。 - u0也用於防止sshd發出DNS請求,除非認證機製或配置需要它。 可能需要DNS的身份驗證機制包括RhostsAuthentication RhostsRSAAuthentication HostbasedAuthentication並在密鑰文件中使用from = pattern-list選項。 需要DNS的配置選項包括在AllowUsersDenyUsers中使用USER @ HOST模式

-D

當指定此選項時, sshd不會分離,並且不會成為守護進程。 這允許輕鬆監視sshd

-4

強制sshd僅使用IPv4地址。

-6

強制sshd僅使用IPv6地址。

配置文件

sshd從/ etc / ssh / sshd_config(或在命令行中用-f指定的文件)讀取配置數據。 文件格式和配置選項在sshd_config5中描述。

登錄過程

當用戶成功登錄時, sshd執行以下操作:

  1. 如果登錄名在tty上,並且沒有指定任何命令,則輸出最後的登錄時間和/ etc / motd(除非在配置文件或$ HOME / .hushlogin中禁止,請參閱Sx FILES部分)。
  2. 如果登錄名在tty上,則記錄登錄時間。
  3. 檢查/ etc / nologin是否存在,打印內容並退出(除非root)。
  4. 更改以普通用戶權限運行。
  5. 建立基本的環境。
  6. 讀取$ HOME / .ssh / environment(如果它存在並允許用戶更改其環境)。 請參閱sshd_config5中的PermitUserEnvironment選項。
  7. 更改用戶的主目錄。
  8. 如果$ HOME / .ssh / rc存在,則運行它; 否則,如果/ etc / ssh / sshrc存在,運行它; 否則運行xauth。 標準輸入中給出了``rc''文件的X11認證協議和cookie。
  9. 運行用戶的外殼或命令。

Authorized_Keys文件格式

$ HOME / .ssh / authorized_keys是默認文件,它列出了允許在協議版本1中進行RSA身份驗證以及在協議版本2中進行公共密鑰身份驗證(PubkeyAuthentication)的公鑰。AuthorizedKeysFile可用於指定替代文件。

文件的每一行都包含一個鍵(以'#'開始的空行和行被忽略為註釋)。 每個RSA公鑰由以下字段組成,用空格分隔:選項,位,指數,模數,註釋。 每個協議版本2公鑰包含:選項,密鑰類型,base64編碼密鑰,註釋。 選項字段是可選的; 它的存在取決於該行是否以數字開頭(選項字段從不以數字開頭)。 位,指數,模數和註釋字段給出協議版本1的RSA密鑰; 註釋字段不用於任何內容(但可能方便用戶識別密鑰)。 對於協議版本2,keytype是“ssh-dss”或“ssh-rsa”

請注意,此文件中的行通常是幾百個字節 (因為公鑰編碼的大小)。 你不想輸入它們; 相反,請複制identity.pub id_dsa.pub或id_rsa.pub文件並對其進行編輯。

sshd為協議1和協議2密鑰的768位強制執行最小RSA密鑰模數大小。

選項(如果存在)由逗號分隔的選項規範組成。 除雙引號外,不允許有空格。 支持以下選項規範(請注意,選項關鍵字不區分大小寫):

從=模式列表

指定除公鑰認證之外,遠程主機的規範名稱必須存在於逗號分隔的模式列表中(“*”和“?”用作通配符)。 該列表還可能包含通過用'!'作為前綴而取消的模式。 ; 如果規範主機名匹配否定模式,則不接受密鑰。 此選項的目的是可選地增加安全性:公鑰身份驗證本身不信任網絡或名稱服務器或任何東西(但密鑰); 然而,如果某人以某種方式竊取了密鑰,該密鑰允許入侵者從世界任何地方登錄。 這個附加選項使得使用被盜密鑰更加困難(名稱服務器和/或路由器除了密鑰之外還必須被破壞)。

命令=命令

指定只要使用此密鑰進行身份驗證就執行該命令。 用戶提供的命令(如果有)將被忽略。 如果客戶端請求一個pty,該命令在一個pty上運行; 否則它會在沒有tty的情況下運行。 如果需要8位乾淨通道,則不得請求pty或應指定no-pty 。引號可以通過引用反斜杠引用。 此選項可能會限制某些公鑰只執行特定操作。 一個例子可能是允許遠程備份的密鑰,但沒有別的。 請注意,客戶端可能會指定TCP / IP和/或X11轉發,除非它們被明確禁止。 請注意,該選項適用於shell,命令或子系統執行。

環境= NAME =值

指定在使用此密鑰登錄時要將字符串添加到環境中。 以此方式設置的環境變量覆蓋其他默認環境值。 這種類型的多個選項是允許的。 環境處理在默認情況下處於禁用狀態,並且通過PermitUserEnvironment選項進行控制。 如果啟用UseLogin,則此選項會自動禁用。

無端口轉發

使用此密鑰進行身份驗證時,禁止TCP / IP轉發。 客戶端的任何端口轉發請求都會返回錯誤。 這可以用於,例如,與命令選項相關聯。

沒有X11轉發

使用此密鑰進行身份驗證時禁止X11轉發。 客戶端的任何X11轉發請求都會返回錯誤。

無代理轉發

使用此密鑰進行身份驗證時,禁止身份驗證代理轉發。

無終端

防止tty分配(分配pty的請求將失敗)。

permitopen =主機:端口

限製本地``ssh -L''端口轉發,使其只能連接到指定的主機和端口。 IPv6地址可以用另一種語法指定: 主機/端口多個permitopen選項可以用逗號分隔。 在指定的主機名上不執行模式匹配,它們必須是文字域或地址。

例子

1024 33 12121 ... 312314325 ylo@foo.bar

from =“*。niksula.hut.fi,!pc.niksula.hut.fi”1024 35 23 ... 2334 ylo @ niksula

命令=“dump / home”,no-pty,no-port-forwarding 1024 33 23 ... 2323 backup.hut.fi

permitopen =“10.2.1.55:80”,permitopen =“10.2.1.56:25”1024 33 23 ... 2323

Ssh_Known_Hosts文件格式

/ etc / ssh / ssh_known_hosts和$ HOME / .ssh / known_hosts文件包含所有已知主機的主機公鑰。 全局文件應該由管理員(可選)準備,每個用戶文件會自動維護:每當用戶從未知主機連接時,其密鑰將添加到每個用戶文件中。

這些文件中的每行包含以下字段:主機名,位,指數,模數,註釋。 這些字段由空格分隔。

主機名是逗號分隔的模式列表('*'和'?'充當通配符); 每個模式依次與規範主機名(在對客戶端進行身份驗證時)或用戶提供的名稱(在對服務器進行身份驗證時)進行匹配。 一個模式也可以以`!'開頭 以表明否定:如果主機名稱與否定模式相匹配,即使它與線路上的另一模式匹配,也不會被該線路接受。

位,指數和模數直接來自RSA主機密鑰; 它們可以從/etc/ssh/ssh_host_key.pub中獲得,可選的註釋字段會持續到該行的末尾,並且不會被使用。

作為註釋忽略以'#'開始的行和空行。

當執行主機認證時,如果任何匹配的線路具有正確的密鑰,則接受認證。 因此,允許(但不推薦)為同一名稱設置多行或不同的主機密鑰。 當來自不同域的簡短形式的主機名被放入文件時,這將不可避免地發生。 這些文件可能包含衝突的信息; 如果可以從兩個文件中找到有效信息,則驗證將被接受。

請注意,這些文件中的行通常長達數百個字符,並且您絕對不希望手動輸入主機密鑰。 相反,可以通過腳本或採用/etc/ssh/ssh_host_key.pub並在前面添加主機名來生成它們。

例子

closenet,...,130.233.208.41 1024 37 159 ... 93 closenet.hut.fi cvs.openbsd.org,199.185.137.3 ssh-rsa AAAA1234 ..... =

也可以看看

scp(1),sftp(1),ssh(1),ssh-add1,ssh-agent1,ssh-keygen1,login.conf5,模數(5),sshd_config5,sftp-server8

T. Ylonen T. Kivinen M. Saarinen T. Rinne S. Lehtinen “SSH協議體系結構” draft-ietf-secsh-architecture-12.txt 2002年1月工作進展資料

M. Friedl N. Provos WA Simpson “用於SSH傳輸層協議的Diffie-Hellman組交換” draft-ietf-secsh-dh-group-exchange-02.txt 2002年1月工作進度資料

重要提示:使用man命令( %man )查看特定計算機上的命令使用方式。