關(guān)于ssh
ssh概述
SSH基本
SSH 是 Linux 系統(tǒng)的登錄工具,現(xiàn)在廣泛用于服務(wù)器登錄和各種加密通信。
SSH(Secure Shell)是一種網(wǎng)絡(luò)協(xié)議,用于加密兩臺計算機(jī)之間的通信,并且支持各種身份驗證機(jī)制。
它主要用于保證遠(yuǎn)程登錄和遠(yuǎn)程通信的安全,任何網(wǎng)絡(luò)服務(wù)都可以用這個協(xié)議來加密。
它還能對操作者進(jìn)行認(rèn)證(authentication)和授權(quán)(authorization)。明文的網(wǎng)絡(luò)協(xié)議可以套用在它里面,從而實現(xiàn)加密。
SSH 的軟件架構(gòu)是服務(wù)器-客戶端模式(Server - Client):
向服務(wù)器發(fā)出請求的部分稱為客戶端,OpenSSH 的實現(xiàn)為ssh
接收客戶端發(fā)出的請求的部分稱為服務(wù)器,OpenSSH 的實現(xiàn)為sshd
OpenSSH 還提供一些輔助工具軟件(比如 ssh-keygen 、ssh-agent)和專門的客戶端工具(比如 scp 和 sftp)
SSH發(fā)展進(jìn)程
1995年,芬蘭赫爾辛基工業(yè)大學(xué)的研究員 Tatu Yl?nen 設(shè)計了 SSH 協(xié)議的第一個版本 SSH 1,同時寫出了第一個實現(xiàn) SSH1。
1996年,又提出了 SSH 2 協(xié)議,這個協(xié)議與1.0版不兼容,1998年推出了軟件實現(xiàn) SSH2。但是,官方的 SSH2 軟件是一個專有軟件,不能免費使用。
1999年,OpenBSD 的開發(fā)人員寫了一個 SSH 2 協(xié)議的開源實現(xiàn),這就是 OpenSSH 項目。目前,Linux 的所有發(fā)行版幾乎都自帶 OpenSSH。
SSH 客戶端
OpenSSH的客戶端是二進(jìn)制程序ssh。Linux一般都自帶ssh,如果沒有就需要安裝
# 在 Ubuntu 或 Debian 上安裝 ssh 客戶端
~]# sudo apt install openssh-client
# 在 Ubuntu 或 Debian 上安裝 ssh 服務(wù)端
~]# sudo apt install openssh-server
~]# sudo systemctl enable ssh --now
# 在 CentOS 或 RedHat 上安裝 ssh 服務(wù)端/客戶端
~]# sudo yum -y install openssh-server openssh-clients
~]# sudo systemctl enable ssh --now
ssh連接流程
~]# ssh host ? ? ? ? ? ? ?# 不指定用戶名時則將使用客戶端的當(dāng)前用戶名($USER)作為遠(yuǎn)程服務(wù)器的登錄用戶名
~]# ssh -p 8821 host ? ? ? ?# 指定服務(wù)器端口,不指定時默認(rèn)連接服務(wù)器的22端口
~]# ssh -T git@github.com ? # 測試連接服務(wù)器
ssh 連接遠(yuǎn)程服務(wù)器后,首先有一個驗證過程,驗證遠(yuǎn)程服務(wù)器是否為陌生地址
如果是第一次連接某一臺服務(wù)器,命令行會顯示一段文字,表示不認(rèn)識這臺機(jī)器,提醒用戶確認(rèn)是否需要連接
The authenticity of host 'github.com (20.205.243.166)' cannot be established 確定的.
ECDSA key fingerprint is SHA256:p2QAMCFYO1TJYWeIOtKOPG98/R1DMMQu3/LiFFTUQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
注1:上述中20.205.243.166是github.com的IP
注2:其中的 fingerprint 指的是 SSH 服務(wù)器公鑰的哈希值。每臺 SSH 服務(wù)器都有唯一一對密鑰,用于跟客戶端通信,其中公鑰的哈希值就可以用來識別服務(wù)器
在上面這段文字后面輸入yes,就可以將當(dāng)前服務(wù)器的指紋也儲存在本機(jī)~/.ssh/known_hosts文件中,每次連接服務(wù)器時,通過該文件判斷是否為陌生主機(jī)(陌生公鑰),并顯示下面的提示。以后再連接的時候就不會再出現(xiàn)警告
Warning: Permanently added 'github.com,20.205.243.166' (ECDSA) to the list of known hosts.
Hi baiqiantao! You have successfully authenticated 認(rèn)證, but GitHub does not provide shell access.
# 查看公鑰的指紋
~]# ssh-keygen -l -f ~/.ssh/id_rsa.pub ? ? ? ? ? # 查看公鑰的指紋
服務(wù)器密鑰變更
如果服務(wù)器的密鑰發(fā)生變更(比如重裝了SSH服務(wù)器),客戶端再次連接時,就會發(fā)生公鑰指紋不吻合的情況。此時客戶端就會中斷連接并顯示一段警告信息
這時你需要確認(rèn)是什么原因使得公鑰指紋發(fā)生變更,到底是惡意劫持還是管理員變更了 SSH 服務(wù)器公鑰
如果新的公鑰確認(rèn)可以信任,你可以執(zhí)行下面的命令,將原來的公鑰指紋從~/.ssh/known_hosts文件刪除
~]# ssh-keygen -R github.com ? ? ? ? # 刪除 known_hosts 中指定主機(jī)公鑰的指紋,也可以手動修改此文件
# 查看-R的釋義
~]# man ssh-keygen
? ? -R hostname
? ? ? ? ? ? Removes all keys belonging to hostname from a known_hosts file. ?This
? ? ? ? ? ? option is useful to delete hashed hosts (see the -H option above).
釋義:從known_hosts文件中刪除屬于主機(jī)名的所有密鑰。 此選項對于刪除散列主機(jī)很有用(請參閱上面的 -H 選項)
刪除了原來的公鑰指紋以后,重新執(zhí)行ssh連接遠(yuǎn)程服務(wù)器,將新的指紋加入known_hosts文件即可順利連接
參數(shù)集
SSH 連接的握手階段,客戶端必須跟服務(wù)端約定 加密參數(shù)集(cipher suite)
加密參數(shù)集格式
加密參數(shù)集包含了若干不同的加密參數(shù),它們之間使用下劃線連接在一起
例如:TLS_RSA_WITH_AES_128_CBC_SHA
TLS:加密通信協(xié)議
RSA:密鑰交換算法
AES:加密算法
128:加密算法的強(qiáng)度
CBC:加密算法的模式
SHA:數(shù)字簽名的 Hash 函數(shù)
ssh配置文件config
/etc/ssh/ssh_config:全局對 SSH 客戶端的配置文件
~/.ssh/config:用戶個人對 SSH 客戶端的配置文件,優(yōu)先級高于全局配置文件
~/.ssh/known_hosts:用戶信任的 SSH 服務(wù)器的公鑰指紋
~/.ssh/id_rsa 和 xxx.pub:用于 SSH 2 協(xié)議默認(rèn)的 RSA 私鑰/公鑰
~/.ssh/id_dsa 和 xxx.pub:用于 SSH 2 協(xié)議默認(rèn)的 DSA 私鑰/公鑰
~/.ssh/identity 和 xxx.pub:用于 SSH 1 協(xié)議默認(rèn)的 RSA 私鑰/公鑰
~/.ssh/id_ecdsa 和 xxx.pub:ECDSA 私鑰/公鑰
配置文件的語法
用戶個人的配置文件~/.ssh/config,可以按照不同服務(wù)器,列出各自的連接參數(shù),從而不必每一次登錄都輸入重復(fù)的參數(shù)
# Host 的值可以使用通配符,【*.edu】表示下面的設(shè)置只對一級域名為 .edu 的主機(jī)有效
# Host 命令后面的所有配置都是針對該主機(jī)的,直到下一個Host命令為止
~]# vim ~/.ssh/config
....
? ?....
Host * ? ? ? ? ? ? ? ? # 表示下面的配置對所有的主機(jī)都有效,值可以被單個主機(jī)的設(shè)置覆蓋
?Port 7022 ? ? ? ? ? ?# 表示所有主機(jī)的默認(rèn)連接端口都是8022,這里的縮進(jìn)并不是必需的
?User = zhangsan ? ? ?# 配置命令與值之間,可以使用空格或等號(等號前后的空格是可選的)
Host github ? ? ? ? ? ?# 表示下面的設(shè)置只對主機(jī) github(這只是一個別名) 生效
?HostName github.com ?# 具體的主機(jī)由 HostName 指定
?User git ? ? ? ? ? ? # 像 github、gitlab、gitee 等 git 系統(tǒng),用戶名都是 git
?Port 22 ? ? ? ? ? ? ?# 指定端口,會覆蓋上面的設(shè)置
?IdentityFile ~/.ssh/id_rsa_github ? # 指定私鑰文件
以后登錄github.com時,只要執(zhí)行ssh github命令就會自動套用 config 文件里面指定的參數(shù)。
~]# ssh github ? ? ?# 等同于ssh -p 22 -i ~/.ssh/id_rsa_github git@github.com
配置文件的配置項
以下是客戶端 ssh 配置文件 ~/.ssh/config 的一些主要配置命令,及它們的范例值
AddressFamily inet:表示只使用 IPv4 協(xié)議。如果設(shè)為inet6,表示只使用 IPv6 協(xié)議
BindAddress 192.168.1.25:指定本機(jī)的 IP 地址(如果本機(jī)有多個 IP 地址)
CheckHostIP yes:檢查 SSH 服務(wù)器的 IP 地址是否跟公鑰數(shù)據(jù)庫吻合
Ciphers blowfish,3des:指定加密算法
Compression yes:是否壓縮傳輸信號
ConnectionAttempts 10:客戶端進(jìn)行連接時,最大的嘗試次數(shù)
ConnectTimeout 60:客戶端進(jìn)行連接時,服務(wù)器在指定秒數(shù)內(nèi)沒有回復(fù),則中斷連接嘗試
DynamicForward 1080:指定動態(tài)轉(zhuǎn)發(fā)端口
GlobalKnownHostsFile /users/smith/.ssh/my_global_hosts_file:指定全局的公鑰數(shù)據(jù)庫文件的位置
Host host:指定連接的域名或 IP 地址,也可以是別名,支持通配符
HostKeyAlgorithms ssh-dss,ssh-rsa:指定密鑰算法,優(yōu)先級從高到低排列。
HostName myhost:在Host命令使用別名的情況下,HostName指定域名或 IP 地址
IdentityFile keyfile:指定私鑰文件
LocalForward 2001 localhost:143:指定本地端口轉(zhuǎn)發(fā)
LogLevel QUIET:指定日志詳細(xì)程度。如果設(shè)為QUIET,將不輸出大部分的警告和提示
MACs hmac-sha1,hmac-md5:指定數(shù)據(jù)校驗算法
NumberOfPasswordPrompts 2:密碼登錄時,用戶輸錯密碼的最大嘗試次數(shù)。
PasswordAuthentication no:指定是否支持密碼登錄。這里只是客戶端禁止,真正的禁止需要在 SSH 服務(wù)器設(shè)置
Port 2035:指定客戶端連接的 SSH 服務(wù)器端口
PreferredAuthentications publickey,hostbased,password:指定各種登錄方法的優(yōu)先級
Protocol 2:支持的 SSH 協(xié)議版本,多個版本之間使用逗號分隔
PubKeyAuthentication yes:是否支持密鑰登錄。這里只是客戶端設(shè)置,還需要在 SSH 服務(wù)器進(jìn)行相應(yīng)設(shè)置
RemoteForward 2001 server:143:指定遠(yuǎn)程端口轉(zhuǎn)發(fā)
SendEnv COLOR:SSH 客戶端向服務(wù)器發(fā)送的環(huán)境變量名,多個環(huán)境變量之間使用空格分隔。環(huán)境變量的值從客戶端當(dāng)前環(huán)境中拷貝
ServerAliveCountMax 3:如果沒有收到服務(wù)器的回應(yīng),客戶端連續(xù)發(fā)送多少次keepalive信號才斷開連接。默認(rèn)值為3
ServerAliveInterval 300:客戶端建立連接后,如果在給定秒數(shù)內(nèi),沒有收到服務(wù)器發(fā)來的消息,客戶端向服務(wù)器發(fā)送keepalive消息。如果不希望客戶端發(fā)送,這一項設(shè)為0
StrictHostKeyChecking yes:yes表示嚴(yán)格檢查,服務(wù)器公鑰為未知或發(fā)生變化,則拒絕連接。no表示如果服務(wù)器公鑰未知,則加入客戶端公鑰數(shù)據(jù)庫,如果公鑰發(fā)生變化,不改變客戶端公鑰數(shù)據(jù)庫,輸出一條警告,依然允許連接繼續(xù)進(jìn)行。ask(默認(rèn)值)表示詢問用戶是否繼續(xù)進(jìn)行
TCPKeepAlive yes:客戶端是否定期向服務(wù)器發(fā)送keepalive信息
User userName:指定遠(yuǎn)程登錄的賬戶名
UserKnownHostsFile /users/smith/.ssh/my_local_hosts_file:指定當(dāng)前用戶的known_hosts文件(服務(wù)器公鑰指紋列表)的位置。
VerifyHostKeyDNS yes:是否通過檢查 SSH 服務(wù)器的 DNS 記錄,確認(rèn)公鑰指紋是否與known_hosts文件保存的一致
ssh 命令行配置項
ssh 命令有一些配置項。這些配置項在調(diào)用時指定,可以覆蓋配置文件的設(shè)置
# 配置項解釋
-c:指定加密算法
-C:表示壓縮數(shù)據(jù)傳輸
-D:指定本機(jī)的 Socks 監(jiān)聽端口,該端口收到的請求,都將轉(zhuǎn)發(fā)到遠(yuǎn)程的 SSH 主機(jī),又稱動態(tài)端口轉(zhuǎn)發(fā)
-f:表示 SSH 連接在后臺運行
-F:指定配置文件
-i:指定私鑰,默認(rèn)值為~/.ssh/id_dsa和~/.ssh/id_rsa,對應(yīng)的公鑰必須存放到服務(wù)器
-l:指定遠(yuǎn)程登錄的賬戶名
-L:設(shè)置本地端口轉(zhuǎn)發(fā)
-m:指定校驗數(shù)據(jù)完整性的算法(MAC,message authentication code)
-N:表示建立的 SSH 只用于端口轉(zhuǎn)發(fā),不能執(zhí)行遠(yuǎn)程命令,這樣可以提供安全性
-o:用來指定一個配置命令
-p:指定 SSH 客戶端連接的服務(wù)器端口
-q:表示安靜模式(quiet),不向用戶輸出任何警告信息
-R:指定遠(yuǎn)程端口轉(zhuǎn)發(fā)
-t:在 ssh 直接運行遠(yuǎn)端命令時,提供一個互動式 Shell
-v:顯示詳細(xì)信息
-V:輸出 ssh 客戶端的版本
-X:表示打開 X 窗口轉(zhuǎn)發(fā)
配置項示例
ssh -c xx,yy host ? # 指定使用加密算法 xx 或 yy,等同于ssh -c xx -c yy host
ssh -C host ? ? ? ? # 壓縮數(shù)據(jù)傳輸
ssh -F ~/.ssh/xx ? ?# 使用指定的配置文件
ssh -i my-key host ?# 指定私鑰
ssh -l user host ? ?# 指定遠(yuǎn)程登錄的賬戶名,等同于ssh user@host
ssh -m xx,yy host ? # 指定數(shù)據(jù)校驗算法(MAC)為xx 或 yy
ssh -o "Key Value" ?# 指定一個配置命令,等同于ssh -o Key=Value,等號前后不能有空格
ssh -p 2035 host ? ?# 指定連接服務(wù)器的2035端口
ssh –q host ? ? ? ? # 安靜模式,不向用戶輸出任何警告信息
ssh -t host cmd ? ? # 在 ssh 直接運行遠(yuǎn)端命令時,提供一個互動式 Shell
ssh -v host ? ? ? ? # 可以重復(fù)多次,表示信息的詳細(xì)程度,比如【-vv】和【-vvv】
ssh -V ? ? ? ? ? ? ?# 輸出 ssh 客戶端的版本:OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
ssh -X host ? ? ? ? # 打開 X 窗口轉(zhuǎn)發(fā)
ssh -2 host ? ? ? ? # -1 參數(shù)指定使用 SSH 1 協(xié)議,-2 參數(shù)指定使用 SSH 2 協(xié)議
ssh -4 host ? ? ? ? # -4 指定使用 IPv4 協(xié)議(默認(rèn)值),-6 指定使用 IPv6 協(xié)議
端口轉(zhuǎn)發(fā)相關(guān)
ssh -N host ? ? ? ? ? ? ? ? ? ? # 表示建立的 SSH 只用于端口轉(zhuǎn)發(fā),不能執(zhí)行遠(yuǎn)程命令,這樣可以提供安全性
ssh -D 1080 host ? ? ? ? ? ? ? ?# 動態(tài)端口轉(zhuǎn)發(fā):將本機(jī) 1080 端口收到的請求,都轉(zhuǎn)發(fā)到服務(wù)器 host
ssh -L 9639:server:80 user@host # 本地端口轉(zhuǎn)發(fā)所有發(fā)向本地 9639 端口的請求,都會經(jīng)過 host 發(fā)往 server 的 80 端口,相當(dāng)于直接連上了 server 的 80 端口
ssh -R 9639:server:605 local ? ?# 遠(yuǎn)程端口轉(zhuǎn)發(fā),需在跳板服務(wù)器(即 local)執(zhí)行此命令指定本地計算機(jī) local 監(jiān)聽自己的 9639 端口,所有發(fā)向這個端口的請求,都會轉(zhuǎn)向 server 的 9605 端口
SSH 服務(wù)器
OpenSSH 的客戶端軟件是 ssh,服務(wù)器軟件是 sshd
# 在 Ubuntu 或 Debian 上安裝 ssh 客戶端
~]# sudo apt install openssh-client ? ? ? ? ? ? ? ? ? ? ? ?
# 在 Ubuntu 或 Debian 上安裝 ssh 服務(wù)端
~]# sudo apt install openssh-server ? ? ? ? ? ? ? ? ? ? ? ?
~]# sudo systemctl enable ssh --now
# 在 CentOS 或 RedHat 上安裝 ssh 服務(wù)端/客戶端
~]# sudo yum -y install openssh-server openssh-clients ? ?
~]# sudo systemctl enable ssh --now
sshd 密鑰 ssh_host_xx_key
sshd 有自己的一對或多對密鑰。它使用密鑰向客戶端證明自己的身份。所有密鑰都是公鑰和私鑰成對出現(xiàn),公鑰的文件名一般是私鑰文件名加上后綴.pub。
/etc/ssh/ssh_host_key 和 xxx.pub:用于 SSH 1 協(xié)議默認(rèn)的 RSA 私鑰/公鑰
/etc/ssh/ssh_host_rsa_key 和 xxx.pub:用于 SSH 2 協(xié)議默認(rèn)的 RSA 私鑰/公鑰
/etc/ssh/ssh_host_dsa_key 和 xxx.pub:用于 SSH 2 協(xié)議默認(rèn)的 DSA 私鑰/公鑰
/etc/ssh/ssh_host_ecdsa_key 和 xxx.pub:ECDSA 私鑰/公鑰
注:
重裝sshd后上面這些密鑰都會重新生成,導(dǎo)致客戶端重新連接ssh服務(wù)器時跳出警告,拒絕連接。為了避免這種情況可在重裝sshd前先備份/etc/ssh目錄,重裝后再恢復(fù)這個目錄
如密鑰不是默認(rèn)文件可通過配置文件sshd_config的HostKey配置項指定
~]# vim /etc/ssh/sshd_config
## 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
配置文件的語法
配置文件的語法如下:
~]# vim /etc/ssh/sshd_config
每個命令占據(jù)一行,每行都是配置項和對應(yīng)的值
配置項對大小寫不敏感
配置項與值之間可以使用空格或等號分隔,等號前后的空格可選
以 # 開頭的行表示注釋,注釋只能放在一行的開頭
空行等同于注釋
sshd 啟動時會自動讀取默認(rèn)的配置文件,可以用-f參數(shù)使用指定的配置文件
sshd -f /usr/local/ssh/my_config # 啟動 sshd 后使用指定的配置文件
sshd -t ? ? ? ? ? ? ? ? ? ? ? ? ?# 檢查配置文件有沒有語法錯誤
sudo systemctl restart sshd ? ? ?# 修改配置文件以后,必須重啟 sshd 才會生效
配置文件的配置項
服務(wù)端 sshd 配置文件 /etc/ssh/sshd_config 的一些主要配置命令及它們的范例值
~]# vim /etc/ssh/sshd_config
AcceptEnv PATH TERM:指定允許接受客戶端通過SendEnv命令發(fā)來的哪些環(huán)境變量,即允許客戶端設(shè)置服務(wù)器的環(huán)境變量清單。變量名之間使用空格分隔
AllowGroups groupName:指定允許登錄的用戶組,多個組之間用空格分隔。如果不使用該項,則允許所有用戶組登錄
AllowUsers user:指定允許登錄的用戶,用戶名之間使用空格分隔,也可以使用多行AllowUsers命令指定,用戶名支持使用通配符。如果不使用該項,則允許所有用戶登錄。也可以使用用戶名@域名的格式。
AllowTcpForwarding yes:指定是否允許端口轉(zhuǎn)發(fā),默認(rèn)值為yes,local表示只允許本地端口轉(zhuǎn)發(fā),remote表示只允許遠(yuǎn)程端口轉(zhuǎn)發(fā)
AuthorizedKeysFile .ssh/authorized_keys:指定儲存用戶公鑰的目錄,默認(rèn)是用戶主目錄的ssh/authorized_keys目錄
Banner /usr/local/etc/warning.txt:指定用戶登錄后,sshd 向其展示的信息文件,默認(rèn)不展示任何內(nèi)容
ChallengeResponseAuthentication yes:指定是否使用鍵盤交互身份驗證方案,默認(rèn)值為yes
Ciphers 3des-cbc:指定 sshd 可以接受的加密算法,多個算法之間使用逗號分隔。
ClientAliveCountMax 8:指定建立連接后,客戶端失去響應(yīng)時,服務(wù)器嘗試連接的次數(shù)
ClientAliveInterval 180:指定允許客戶端發(fā)呆的時間,單位為秒。如果這段時間里面,客戶端沒有發(fā)送任何信號,SSH 連接將關(guān)閉
Compression yes:指定客戶端與服務(wù)器之間的數(shù)據(jù)傳輸是否壓縮。默認(rèn)值為yes
DenyGroups groupName:指定不允許登錄的用戶組
DenyUsers user1:指定不允許登錄的用戶,用戶名之間使用空格分隔,也可以使用多行DenyUsers命令指定
FascistLogging yes:指定日志輸出全部 Debug 信息。SSH 1 版本專用
HostKey /etc/ssh/ssh_host_rsa_key:指定 sshd 服務(wù)器的密鑰,詳見前文
KeyRegenerationInterval 3600:指定 SSH 1 版本的密鑰重新生成時間間隔,單位為秒,默認(rèn)是3600秒
ListenAddress 0.0.0.0:指定 sshd 監(jiān)聽的本機(jī) IP 地址,即 sshd 啟用的 IP 地址,默認(rèn)是 0.0.0.0,表示在本機(jī)所有網(wǎng)絡(luò)接口啟用??梢愿某芍辉谀硞€網(wǎng)絡(luò)接口或某個域名啟用。如果要監(jiān)聽多個指定的 IP 地址,可以使用多行ListenAddress命令
LoginGraceTime 60:指定允許客戶端登錄時發(fā)呆的最長時間,比如用戶遲遲不輸入密碼,連接就會自動斷開,單位為秒。如果設(shè)為0,就表示沒有限制
LogLevel INFO:指定日志的詳細(xì)程度,可能的值依次為QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUG、DEBUG1、DEBUG2、DEBUG3,默認(rèn)為INFO
MACs hmac-sha1:指定 sshd 可以接受的數(shù)據(jù)校驗算法,多個算法之間使用逗號分隔
MaxAuthTries 3:指定允許 SSH 登錄的最大嘗試次數(shù),如果密碼輸入錯誤達(dá)到指定次數(shù),SSH 連接將關(guān)閉
MaxStartups 0:指定允許同時并發(fā)的 SSH 連接數(shù)量。設(shè)為0表示沒有限制。
PasswordAuthentication yes:指定是否允許密碼登錄,默認(rèn)值為yes,建議改成no,即禁止密碼登錄,只允許密鑰登錄
PermitEmptyPasswords yes:指定是否允許空密碼登錄,即用戶的密碼是否可以為空,默認(rèn)為yes,建議改成no,即禁止無密碼登錄
PermitRootLogin yes:指定是否允許根用戶登錄,默認(rèn)為yes,建議改成no,即禁止根用戶登錄。還有一種寫法是寫成PermitRootLogin prohibit-password,表示 root 用戶不能用密碼登錄,但是可以用密鑰登錄
PermitUserEnvironment no:指定是否允許 sshd 加載客戶端的~/.ssh/environment文件和~/.ssh/authorized_keys文件里面的environment= options環(huán)境變量設(shè)置。默認(rèn)值為no。
Port 22:指定 sshd 監(jiān)聽的端口,即客戶端連接的端口,默認(rèn)是22。配置文件可以使用多個Port命令,同時監(jiān)聽多個端口
PrintMotd yes:指定用戶登錄后,是否向其展示系統(tǒng)的 motd(Message of the day)的信息文件/etc/motd。默認(rèn)值為yes
PrintLastLog yes:指定是否打印上一次用戶登錄時間,默認(rèn)值為yes
Protocol 2:指定 sshd 使用的協(xié)議。1表示使用 SSH 1 協(xié)議,Protocol 2,1表示同時支持兩個版本的協(xié)議
PubKeyAuthentication yes:指定是否允許公鑰登錄,默認(rèn)值為yes
QuietMode yes:指定日志只輸出致命的錯誤信息。SSH 1 版本專用
RSAAuthentication yes:指定允許 RSA 認(rèn)證,默認(rèn)值為yes
ServerKeyBits 768:指定 SSH 1 版本的密鑰重新生成時的位數(shù),默認(rèn)是768
StrictModes yes:指定 sshd 是否檢查用戶的一些重要文件和目錄的權(quán)限。默認(rèn)為yes,即對于用戶的 SSH 配置文件、密鑰文件和所在目錄,SSH 要求擁有者必須是根用戶或用戶本人,用戶組和其他人的寫權(quán)限必須關(guān)閉
SyslogFacility AUTH:指定 Syslog 如何處理 sshd 的日志,默認(rèn)是 Auth
TCPKeepAlive yes:指定打開 sshd 跟客戶端 TCP 連接的 keepalive 參數(shù)
UseDNS yes:指定用戶 SSH 登錄一個域名時,服務(wù)器是否使用 DNS,確認(rèn)該域名對應(yīng)的 IP 地址包含本機(jī)。建議關(guān)閉
UseLogin no:指定用戶認(rèn)證內(nèi)部是否使用/usr/bin/login替代 SSH 工具,默認(rèn)為no
UsePrivilegeSeparation yes:指定用戶認(rèn)證通過以后,使用另一個子線程處理用戶權(quán)限相關(guān)的操作,這樣有利于提高安全性。默認(rèn)值為yes
VerboseMode yes:指定日志輸出詳細(xì)的 Debug 信息。SSH 2 版本專用
X11Forwarding no:指定是否打開 X window 的轉(zhuǎn)發(fā),默認(rèn)值為 no
sshd 命令行配置項
sshd 命令有一些配置項。這些配置項在調(diào)用時指定,可以覆蓋配置文件的設(shè)置
-d:顯示 debug 信息
-D:指定 sshd 不作為后臺守護(hù)進(jìn)程運行
-e:將 sshd 寫入 syslog 的內(nèi)容,輸出到 standard error
-f:使用指定的配置文件
-h:使用指定的密鑰
-o:指定配置文件的一個配置項和對應(yīng)的值,可以多個一起使用
-p:指定 sshd 的服務(wù)端口,可以指定多個端口
-t:檢查配置文件的語法是否正確
sshd -o "Port 2222" ? ?# 配置項和對應(yīng)值之間,可以使用空格或等號
sshd -o Port=2222 ? ? ?# 如果省略等號前后的空格,也可以不使用引號
sshd -p 22 -p 2222 ? ? # 指定 sshd 的服務(wù)端口,可以指定多個端口
只講對的? ??不講廢的? ??
點關(guān)注不迷路? ? 我們下期見~
標(biāo)簽: