SSH 教程-1 客戶端 服務器 配置 [MD]


博文地址

我的GitHub 我的博客 我的微信 我的郵箱
baiqiantao baiqiantao bqt20094 baiqiantao@sina.com

目錄

SSH 教程 -1

本文改編自 網道的 SSH 教程,主要為了精簡大量本人不感興趣的內容。

本教程約定,大寫的 SSH 表示協議,小寫的 ssh 表示客戶端軟件。

SSH 基本知識

SSH 是 Linux 系統的登錄工具,現在廣泛用於服務器登錄和各種加密通信。

SSH(Secure Shell)是一種網絡協議,用於加密兩台計算機之間的通信,並且支持各種身份驗證機制。

它主要用於保證遠程登錄和遠程通信的安全,任何網絡服務都可以用這個協議來加密。

它還能對操作者進行認證(authentication)和授權(authorization)。明文的網絡協議可以套用在它里面,從而實現加密。

SSH 發展歷史

  • 1995年,芬蘭赫爾辛基工業大學的研究員 Tatu Ylönen 設計了 SSH 協議的第一個版本 SSH 1,同時寫出了第一個實現 SSH1。
  • 1996年,又提出了 SSH 2 協議,這個協議與1.0版不兼容,1998年推出了軟件實現 SSH2。但是,官方的 SSH2 軟件是一個專有軟件,不能免費使用。
  • 1999年,OpenBSD 的開發人員寫了一個 SSH 2 協議的開源實現,這就是 OpenSSH 項目。目前,Linux 的所有發行版幾乎都自帶 OpenSSH。

SSH 軟件架構

SSH 的軟件架構是服務器-客戶端模式(Server - Client):

  • 向服務器發出請求的部分,稱為客戶端,OpenSSH 的實現為 ssh
  • 接收客戶端發出的請求的部分,稱為服務器,OpenSSH 的實現為 sshd

OpenSSH 還提供一些輔助工具軟件(比如 ssh-keygen 、ssh-agent)和專門的客戶端工具(比如 scp 和 sftp)。

SSH 客戶端

OpenSSH 的客戶端是二進制程序 ssh。Linux 系統一般都自帶 ssh,如果沒有就需要安裝。

where ssh   # 文件位置【C:\Windows\System32\OpenSSH\ssh.exe】
ssh -V      # 查看版本【OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2】

sudo apt install openssh-client   # 在 Ubuntu 和 Debian 上安裝 ssh 客戶端
sudo apt install openssh-server   # 在 Ubuntu 和 Debian 上安裝 ssh 服務端

連接流程

ssh 最常見的用途就是登錄服務器,這要求服務器安裝並正在運行 SSH 服務器軟件。

ssh -l user host  # 登錄服務器,host 可以是主機名、網站域名、IP 地址,等價於【ssh user@host】
ssh host          # 不指定用戶名時,將使用客戶端的當前用戶名($USER),作為遠程服務器的登錄用戶名
ssh -p 8821 host  # 指定服務器端口,不指定時默認連接服務器的22端口

首次連接確認

ssh 連接遠程服務器后,首先有一個驗證過程,驗證遠程服務器是否為陌生地址。

如果是第一次連接某一台服務器,命令行會顯示一段文字,表示不認識這台機器,提醒用戶確認是否需要連接。

ssh -T git@github.com   # 測試連接服務器

The authenticity of host 'github.com (20.205.243.166)' cannot be established 確定的.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

其中的 fingerprint 指的是 SSH 服務器公鑰的哈希值。每台 SSH 服務器都有唯一一對密鑰,用於跟客戶端通信,其中公鑰的哈希值就可以用來識別服務器。

查看公鑰的指紋

下面的命令可以查看某個公鑰的指紋。

ssh-keygen -l -f ~/.ssh/id_rsa.pub  # 查看公鑰的指紋

3072 SHA256:H28XXrWfd9GCnV8wpWI9p51SlgdaOnzS/kOJsrLIhpA baiqiantao@sina.com (RSA)

保存公鑰的指紋

ssh 會將本機成功連接過的所有服務器公鑰的指紋,都儲存在本機的~/.ssh/known_hosts文件中。每次連接服務器時,通過該文件判斷是否為陌生主機(陌生公鑰)。

在上面這段文字后面,輸入yes,就可以將當前服務器的指紋也儲存在本機~/.ssh/known_hosts文件中,並顯示下面的提示。以后再連接的時候,就不會再出現警告了。

Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Hi baiqiantao! You have successfully authenticated 認證, but GitHub does not provide shell access.

然后,客戶端就會跟服務器建立連接。接着,ssh 就會要求用戶輸入所要登錄賬戶的密碼。用戶輸入並驗證密碼正確以后,就能登錄遠程服務器的 Shell 了。

服務器密鑰變更

如果服務器的密鑰發生變更(比如重裝了 SSH 服務器),客戶端再次連接時,就會發生公鑰指紋不吻合的情況。這時,客戶端就會中斷連接,並顯示一段警告信息。

這時,你需要確認是什么原因使得公鑰指紋發生變更,到底是惡意劫持,還是管理員變更了 SSH 服務器公鑰。

如果新的公鑰確認可以信任,你可以執行下面的命令,將原來的公鑰指紋從~/.ssh/known_hosts文件刪除。

ssh-keygen -R github.com  # 刪除 known_hosts 中指定主機公鑰的指紋,也可以手動修改此文件

刪除了原來的公鑰指紋以后,重新執行 ssh 命令連接遠程服務器,將新的指紋加入known_hosts文件,就可以順利連接了。

執行遠程命令

SSH 登錄成功后,用戶就進入了遠程主機的命令行環境,所看到的提示符,就是遠程主機的提示符。這時,你就可以輸入想要在遠程主機執行的命令。

另一種執行遠程命令的方法,是將命令直接寫在ssh命令的后面。

采用這種語法執行命令時,ssh 客戶端不會提供互動式的 Shell 環境,而是直接將遠程命令的執行結果輸出在命令行。但是,有些命令需要互動式的 Shell 環境,這時就要使用-t參數。

ssh user@host command     # 登錄遠程主機成功后,立刻在遠程主機上執行命令
ssh -t user@host command  # 在 ssh 直接運行遠端命令時,提供一個互動式 Shell

加密參數集

SSH 連接的握手階段,客戶端必須跟服務端約定 加密參數集(cipher suite)。

加密參數集格式

加密參數集包含了若干不同的加密參數,它們之間使用下划線連接在一起,下面是一個例子。

例如:TLS_RSA_WITH_AES_128_CBC_SHA

  • TLS:加密通信協議
  • RSA:密鑰交換算法
  • AES:加密算法
  • 128:加密算法的強度
  • CBC:加密算法的模式
  • SHA:數字簽名的 Hash 函數

確認加密參數集

下面是一個例子,客戶端向服務器發出的握手信息。

Handshake protocol: ClientHello
    Version: TLS 1.2
    Random
        Client time: May 22, 2030 02:43:46 GMT
        Random bytes: b76b0e61829557eb4c611adfd2d36eb232dc1332fe29802e321ee871
    Session ID: (empty)
    Cipher Suites
        Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        Suite: TLS_RSA_WITH_AES_128_GCM_SHA256
        ...
    Compression methods ...
    Extensions ...

上面的握手信息(ClientHello)之中,Cipher Suites字段就是客戶端列出可選的加密參數集,服務器在其中選擇一個自己支持的參數集。

服務器選擇完畢之后,向客戶端發出回應。

Handshake protocol: ServerHello
    Version: TLS 1.2
    Random
        Server time: Mar 10, 2059 02:35:57 GMT
        Random bytes: 8469b09b480c1978182ce1b59290487609f41132312ca22aacaf5012
    Session ID: 4cae75c91cf5adf55f93c9fb5dd36d19903b1182029af3d527b7a42ef1c32c80
    Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
    Compression method: null
    Extensions ...

上面的回應信息(ServerHello)中,Cipher Suite字段就是服務器最終選定的加密參數。

ssh 配置文件 config

  • /etc/ssh/ssh_config:全局對 SSH 客戶端的配置文件
  • ~/.ssh/config:用戶個人對 SSH 客戶端的配置文件,優先級高於全局配置文件
  • ~/.ssh/known_hosts:用戶信任的 SSH 服務器的公鑰指紋
  • ~/.ssh/id_rsaxxx.pub:用於 SSH 2 協議默認的 RSA 私鑰/公鑰
  • ~/.ssh/id_dsaxxx.pub:用於 SSH 2 協議默認的 DSA 私鑰/公鑰
  • ~/.ssh/identityxxx.pub:用於 SSH 1 協議默認的 RSA 私鑰/公鑰
  • ~/.ssh/id_ecdsaxxx.pub:ECDSA 私鑰/公鑰

配置文件的語法

用戶個人的配置文件~/.ssh/config,可以按照不同服務器,列出各自的連接參數,從而不必每一次登錄都輸入重復的參數。下面是一個例子。

# 以 # 開頭的行表示注釋,空行等同於注釋,不允許行尾注釋
# Host 的值可以使用通配符,【*.edu】表示下面的設置只對一級域名為 .edu 的主機有效
# Host 命令后面的所有配置,都是針對該主機的,直到下一個 Host 命令為止

Host *                 # 表示下面的配置對所有的主機都有效,值可以被單個主機的設置覆蓋
  Port 8022            # 表示所有主機的默認連接端口都是8022,這里的縮進並不是必需的
  User = baiqiantao    # 配置命令與值之間,可以使用空格或等號(等號前后的空格是可選的)

Host github            # 表示下面的設置只對主機 github(這只是一個別名) 生效
  HostName github.com  # 具體的主機由 HostName 指定
  User git             # 像 github、gitlab、gitee 等 git 系統,用戶名都是 git
  Port 22              # 指定端口,會覆蓋上面的設置
  IdentityFile ~/.ssh/id_rsa_github   # 指定私鑰文件

以后,登錄github.com時,只要執行ssh github命令,就會自動套用 config 文件里面指定的參數。

ssh github   # 等同於【ssh -p 22 -i ~/.ssh/id_rsa_github git@github.com】

配置文件的配置項

以下是客戶端 ssh 配置文件 ~/.ssh/config 的一些主要配置命令,以及它們的范例值。

  • AddressFamily inet:表示只使用 IPv4 協議。如果設為inet6,表示只使用 IPv6 協議。
  • BindAddress 192.168.10.235:指定本機的 IP 地址(如果本機有多個 IP 地址)。
  • CheckHostIP yes:檢查 SSH 服務器的 IP 地址是否跟公鑰數據庫吻合。
  • Ciphers blowfish,3des:指定加密算法。
  • Compression yes:是否壓縮傳輸信號。
  • ConnectionAttempts 10:客戶端進行連接時,最大的嘗試次數。
  • ConnectTimeout 60:客戶端進行連接時,服務器在指定秒數內沒有回復,則中斷連接嘗試。
  • DynamicForward 1080:指定動態轉發端口。
  • GlobalKnownHostsFile /users/smith/.ssh/my_global_hosts_file:指定全局的公鑰數據庫文件的位置。
  • Host host:指定連接的域名或 IP 地址,也可以是別名,支持通配符。
  • HostKeyAlgorithms ssh-dss,ssh-rsa:指定密鑰算法,優先級從高到低排列。
  • HostName myhost:在Host命令使用別名的情況下,HostName指定域名或 IP 地址。
  • IdentityFile keyfile:指定私鑰文件。
  • LocalForward 2001 localhost:143:指定本地端口轉發。
  • LogLevel QUIET:指定日志詳細程度。如果設為QUIET,將不輸出大部分的警告和提示。
  • MACs hmac-sha1,hmac-md5:指定數據校驗算法。
  • NumberOfPasswordPrompts 2:密碼登錄時,用戶輸錯密碼的最大嘗試次數。
  • PasswordAuthentication no:指定是否支持密碼登錄。這里只是客戶端禁止,真正的禁止需要在 SSH 服務器設置。
  • Port 2035:指定客戶端連接的 SSH 服務器端口。
  • PreferredAuthentications publickey,hostbased,password:指定各種登錄方法的優先級。
  • Protocol 2:支持的 SSH 協議版本,多個版本之間使用逗號分隔。
  • PubKeyAuthentication yes:是否支持密鑰登錄。這里只是客戶端設置,還需要在 SSH 服務器進行相應設置。
  • RemoteForward 2001 server:143:指定遠程端口轉發。
  • SendEnv COLOR:SSH 客戶端向服務器發送的環境變量名,多個環境變量之間使用空格分隔。環境變量的值從客戶端當前環境中拷貝。
  • ServerAliveCountMax 3:如果沒有收到服務器的回應,客戶端連續發送多少次keepalive信號才斷開連接。默認值為3。
  • ServerAliveInterval 300:客戶端建立連接后,如果在給定秒數內,沒有收到服務器發來的消息,客戶端向服務器發送keepalive消息。如果不希望客戶端發送,這一項設為0
  • StrictHostKeyChecking yesyes表示嚴格檢查,服務器公鑰為未知或發生變化,則拒絕連接。no表示如果服務器公鑰未知,則加入客戶端公鑰數據庫,如果公鑰發生變化,不改變客戶端公鑰數據庫,輸出一條警告,依然允許連接繼續進行。ask(默認值)表示詢問用戶是否繼續進行。
  • TCPKeepAlive yes:客戶端是否定期向服務器發送keepalive信息。
  • User userName:指定遠程登錄的賬戶名。
  • UserKnownHostsFile /users/smith/.ssh/my_local_hosts_file:指定當前用戶的known_hosts文件(服務器公鑰指紋列表)的位置。
  • VerifyHostKeyDNS yes:是否通過檢查 SSH 服務器的 DNS 記錄,確認公鑰指紋是否與known_hosts文件保存的一致。

ssh 命令行配置項

ssh 命令有一些配置項。這些配置項在調用時指定,可以覆蓋配置文件的設置。

配置項解釋

-c:指定加密算法
-C:表示壓縮數據傳輸
-D:指定本機的 Socks 監聽端口,該端口收到的請求,都將轉發到遠程的 SSH 主機,又稱動態端口轉發
-f:表示 SSH 連接在后台運行
-F:指定配置文件
-i:指定私鑰,默認值為~/.ssh/id_dsa~/.ssh/id_rsa,對應的公鑰必須存放到服務器
-l:指定遠程登錄的賬戶名
-L:設置本地端口轉發
-m:指定校驗數據完整性的算法(MAC,message authentication code)
-N:表示建立的 SSH 只用於端口轉發,不能執行遠程命令,這樣可以提供安全性
-o:用來指定一個配置命令
-p:指定 SSH 客戶端連接的服務器端口
-q:表示安靜模式(quiet),不向用戶輸出任何警告信息
-R:指定遠程端口轉發
-t:在 ssh 直接運行遠端命令時,提供一個互動式 Shell
-v:顯示詳細信息
-V:輸出 ssh 客戶端的版本
-X:表示打開 X 窗口轉發

配置項案例

ssh -c xx,yy host   # 指定使用加密算法 xx 或 yy,等價於【ssh -c xx -c yy host】
ssh -C host         # 壓縮數據傳輸
ssh -F ~/.ssh/xx    # 使用指定的配置文件
ssh -i my-key host  # 指定私鑰
ssh -l user host    # 指定遠程登錄的賬戶名,等同於【ssh user@host】
ssh -m xx,yy host   # 指定數據校驗算法(MAC)為xx 或 yy
ssh -o "Key Value"  # 指定一個配置命令,等價於【ssh -o Key=Value】,等號前后不能有空格
ssh -p 2035 host    # 指定連接服務器的2035端口
ssh –q host         # 安靜模式,不向用戶輸出任何警告信息
ssh -t host cmd     # 在 ssh 直接運行遠端命令時,提供一個互動式 Shell
ssh -v host         # 可以重復多次,表示信息的詳細程度,比如【-vv】和【-vvv】
ssh -V              # 輸出 ssh 客戶端的版本:OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
ssh -X host         # 打開 X 窗口轉發
ssh -2 host         # -1 參數指定使用 SSH 1 協議,-2 參數指定使用 SSH 2 協議
ssh -4 host         # -4 指定使用 IPv4 協議(默認值),-6 指定使用 IPv6 協議

端口轉發相關

ssh -N host                     # 表示建立的 SSH 只用於端口轉發,不能執行遠程命令,這樣可以提供安全性
ssh -D 1080 host                # 動態端口轉發:將本機 1080 端口收到的請求,都轉發到服務器 host
ssh -L 9999:server:80 user@host # 本地端口轉發
# 所有發向本地 9999 端口的請求,都會經過 host 發往 server 的 80 端口,相當於直接連上了 server 的 80 端口
ssh -R 9999:server:902 local    # 遠程端口轉發,需在跳板服務器(即 local)執行此命令
# 指定本地計算機 local 監聽自己的 9999 端口,所有發向這個端口的請求,都會轉向 server 的 902 端口

SSH 服務器

SSH 的架構是服務器/客戶端模式,OpenSSH 的客戶端軟件是 ssh,服務器軟件是 sshd

sudo apt install openssh-client      # 在 Ubuntu 和 Debian 上安裝 ssh 客戶端
sudo apt install openssh-server      # 在 Ubuntu 和 Debian 上安裝 ssh 服務端
sudo service ssh restart/start/stop  # 重啟/啟動/停止 sshd 服務

sshd 密鑰 ssh_host_xx_key

sshd 有自己的一對或多對密鑰。它使用密鑰向客戶端證明自己的身份。所有密鑰都是公鑰和私鑰成對出現,公鑰的文件名一般是私鑰文件名加上后綴.pub

  • /etc/ssh/ssh_host_keyxxx.pub:用於 SSH 1 協議默認的 RSA 私鑰/公鑰
  • /etc/ssh/ssh_host_rsa_keyxxx.pub:用於 SSH 2 協議默認的 RSA 私鑰/公鑰
  • /etc/ssh/ssh_host_dsa_keyxxx.pub:用於 SSH 2 協議默認的 DSA 私鑰/公鑰
  • /etc/ssh/ssh_host_ecdsa_keyxxx.pub:ECDSA 私鑰/公鑰

注意,重裝 sshd 后,上面這些密鑰都會重新生成,導致客戶端重新連接 ssh 服務器時,會跳出警告,拒絕連接。為了避免這種情況,可以在重裝 sshd 時,先備份/etc/ssh目錄,重裝后再恢復這個目錄。

如果密鑰不是默認文件,那么可以通過配置文件sshd_configHostKey配置項指定。

## HostKey for protocol version 1
HostKey /etc/ssh/ssh_host_key

## HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key

sshd 配置文件 sshd_config

配置文件的語法

sshd 的配置文件為/etc/ssh/sshd_config,配置文件的語法如下:

  • 每個命令占據一行,每行都是配置項和對應的值
  • 配置項對大小寫不敏感
  • 配置項與值之間可以使用空格或等號分隔,等號前后的空格可選
  • # 開頭的行表示注釋,注釋只能放在一行的開頭
  • 空行等同於注釋

sshd 啟動時會自動讀取默認的配置文件,可以用-f參數使用指定的配置文件。

sshd -f /usr/local/ssh/my_config # 啟動 sshd 后使用指定的配置文件
sshd -t                          # 檢查配置文件有沒有語法錯誤
sudo systemctl restart sshd      # 修改配置文件以后,必須重啟 sshd 才會生效

配置文件的配置項

以下是服務端 sshd 配置文件 /etc/ssh/sshd_config 的一些主要配置命令,以及它們的范例值。

  • AcceptEnv PATH TERM:指定允許接受客戶端通過SendEnv命令發來的哪些環境變量,即允許客戶端設置服務器的環境變量清單。變量名之間使用空格分隔。
  • AllowGroups groupName:指定允許登錄的用戶組,多個組之間用空格分隔。如果不使用該項,則允許所有用戶組登錄。
  • AllowUsers user:指定允許登錄的用戶,用戶名之間使用空格分隔,也可以使用多行AllowUsers命令指定,用戶名支持使用通配符。如果不使用該項,則允許所有用戶登錄。也可以使用用戶名@域名的格式。
  • AllowTcpForwarding yes:指定是否允許端口轉發,默認值為yes,local表示只允許本地端口轉發,remote表示只允許遠程端口轉發。
  • AuthorizedKeysFile .ssh/authorized_keys:指定儲存用戶公鑰的目錄,默認是用戶主目錄的ssh/authorized_keys目錄。
  • Banner /usr/local/etc/warning.txt:指定用戶登錄后,sshd 向其展示的信息文件,默認不展示任何內容。
  • ChallengeResponseAuthentication yes:指定是否使用鍵盤交互身份驗證方案,默認值為yes。
  • Ciphers 3des-cbc:指定 sshd 可以接受的加密算法,多個算法之間使用逗號分隔。
  • ClientAliveCountMax 8:指定建立連接后,客戶端失去響應時,服務器嘗試連接的次數。
  • ClientAliveInterval 180:指定允許客戶端發呆的時間,單位為秒。如果這段時間里面,客戶端沒有發送任何信號,SSH 連接將關閉。
  • Compression yes:指定客戶端與服務器之間的數據傳輸是否壓縮。默認值為yes。
  • DenyGroups groupName:指定不允許登錄的用戶組。
  • DenyUsers user1:指定不允許登錄的用戶,用戶名之間使用空格分隔,也可以使用多行DenyUsers命令指定。
  • FascistLogging yes:指定日志輸出全部 Debug 信息。SSH 1 版本專用。
  • HostKey /etc/ssh/ssh_host_rsa_key:指定 sshd 服務器的密鑰,詳見前文。
  • KeyRegenerationInterval 3600:指定 SSH 1 版本的密鑰重新生成時間間隔,單位為秒,默認是3600秒。
  • ListenAddress 0.0.0.0:指定 sshd 監聽的本機 IP 地址,即 sshd 啟用的 IP 地址,默認是 0.0.0.0,表示在本機所有網絡接口啟用。可以改成只在某個網絡接口或某個域名啟用。如果要監聽多個指定的 IP 地址,可以使用多行ListenAddress命令。
  • LoginGraceTime 60:指定允許客戶端登錄時發呆的最長時間,比如用戶遲遲不輸入密碼,連接就會自動斷開,單位為秒。如果設為0,就表示沒有限制。
  • LogLevel INFO:指定日志的詳細程度,可能的值依次為QUIETFATALERRORINFOVERBOSEDEBUGDEBUG1DEBUG2DEBUG3,默認為INFO
  • MACs hmac-sha1:指定 sshd 可以接受的數據校驗算法,多個算法之間使用逗號分隔。
  • MaxAuthTries 3:指定允許 SSH 登錄的最大嘗試次數,如果密碼輸入錯誤達到指定次數,SSH 連接將關閉。
  • MaxStartups 0:指定允許同時並發的 SSH 連接數量。設為0表示沒有限制。
  • PasswordAuthentication yes:指定是否允許密碼登錄,默認值為yes,建議改成no,即禁止密碼登錄,只允許密鑰登錄。
  • PermitEmptyPasswords yes:指定是否允許空密碼登錄,即用戶的密碼是否可以為空,默認為yes,建議改成no,即禁止無密碼登錄。
  • PermitRootLogin yes:指定是否允許根用戶登錄,默認為yes,建議改成no,即禁止根用戶登錄。還有一種寫法是寫成PermitRootLogin prohibit-password,表示 root 用戶不能用密碼登錄,但是可以用密鑰登錄。
  • PermitUserEnvironment no:指定是否允許 sshd 加載客戶端的~/.ssh/environment文件和~/.ssh/authorized_keys文件里面的environment= options環境變量設置。默認值為no。
  • Port 22:指定 sshd 監聽的端口,即客戶端連接的端口,默認是22。配置文件可以使用多個Port命令,同時監聽多個端口。
  • PrintMotd yes:指定用戶登錄后,是否向其展示系統的 motd(Message of the day)的信息文件/etc/motd。默認值為yes。
  • PrintLastLog yes:指定是否打印上一次用戶登錄時間,默認值為yes。
  • Protocol 2:指定 sshd 使用的協議。1表示使用 SSH 1 協議,Protocol 2,1表示同時支持兩個版本的協議。
  • PubKeyAuthentication yes:指定是否允許公鑰登錄,默認值為yes。
  • QuietMode yes:指定日志只輸出致命的錯誤信息。SSH 1 版本專用。
  • RSAAuthentication yes:指定允許 RSA 認證,默認值為yes。
  • ServerKeyBits 768:指定 SSH 1 版本的密鑰重新生成時的位數,默認是768。
  • StrictModes yes:指定 sshd 是否檢查用戶的一些重要文件和目錄的權限。默認為yes,即對於用戶的 SSH 配置文件、密鑰文件和所在目錄,SSH 要求擁有者必須是根用戶或用戶本人,用戶組和其他人的寫權限必須關閉。
  • SyslogFacility AUTH:指定 Syslog 如何處理 sshd 的日志,默認是 Auth。
  • TCPKeepAlive yes:指定打開 sshd 跟客戶端 TCP 連接的 keepalive 參數。
  • UseDNS yes:指定用戶 SSH 登錄一個域名時,服務器是否使用 DNS,確認該域名對應的 IP 地址包含本機。建議關閉。
  • UseLogin no:指定用戶認證內部是否使用/usr/bin/login替代 SSH 工具,默認為no。
  • UsePrivilegeSeparation yes:指定用戶認證通過以后,使用另一個子線程處理用戶權限相關的操作,這樣有利於提高安全性。默認值為yes。
  • VerboseMode yes:指定日志輸出詳細的 Debug 信息。SSH 2 版本專用。
  • X11Forwarding no:指定是否打開 X window 的轉發,默認值為 no。

sshd 命令行配置項

sshd 命令有一些配置項。這些配置項在調用時指定,可以覆蓋配置文件的設置。

  • -d:顯示 debug 信息
  • -D:指定 sshd 不作為后台守護進程運行
  • -e:將 sshd 寫入 syslog 的內容,輸出到 standard error
  • -f:使用指定的配置文件
  • -h:使用指定的密鑰
  • -o:指定配置文件的一個配置項和對應的值,可以多個一起使用
  • -p:指定 sshd 的服務端口,可以指定多個端口
  • -t:檢查配置文件的語法是否正確
sshd -o "Port 2222" # 配置項和對應值之間,可以使用空格或等號
sshd -o Port=2222   # 如果省略等號前后的空格,也可以不使用引號
sshd -p 22 -p 2222  # 指定 sshd 的服務端口,可以指定多個端口

2021-12-11


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM