SSH 服務(wù)器

簡介

SSH 的架構(gòu)是服務(wù)器/客戶端模式,兩端運(yùn)行的軟件是不一樣的。OpenSSH 的客戶端軟件是 ssh,服務(wù)器軟件是 sshd。本章介紹 sshd 的各種知識。

如果沒有安裝 sshd,可以用下面的命令安裝。

# Debian

$ sudo aptitude install openssh-server 

# Red Hat 

$ sudo yum install openssh-server

一般來說,sshd 安裝后會跟著系統(tǒng)一起啟動。如果當(dāng)前 sshd 沒有啟動,可以用下面的命令啟動。

$ sshd 

上面的命令運(yùn)行后,如果提示“sshd re-exec requires execution with an absolute path”,就需要使用絕對路徑來啟動。這是為了防止有人出于各種目的,放置同名軟件在$PATH變量指向的目錄中,代替真正的 sshd。

# Centos、Ubuntu、OS X $ /usr/sbin/sshd 

上面的命令運(yùn)行以后,sshd 自動進(jìn)入后臺,所以命令后面不需要加上&。

除了直接運(yùn)行可執(zhí)行文件,也可以通過 Systemd 啟動 sshd。

# 啟動 

$ sudo systemctl start sshd.service 

# 停止 

$ sudo systemctl stop sshd.service 

# 重啟 

$ sudo systemctl restart sshd.service

下面的命令讓 sshd 在計(jì)算機(jī)下次啟動時自動運(yùn)行。

$ sudo systemctl enable sshd.service 

sshd 配置文件

sshd 的配置文件在/etc/ssh目錄,主配置文件是sshd_config,此外還有一些安裝時生成的密鑰。

  • /etc/ssh/sshd_config:配置文件
  • /etc/ssh/ssh_host_ecdsa_key:ECDSA 私鑰。
  • /etc/ssh/ssh_host_ecdsa_key.pub:ECDSA 公鑰。
  • /etc/ssh/ssh_host_key:用于 SSH 1 協(xié)議版本的 RSA 私鑰。
  • /etc/ssh/ssh_host_key.pub:用于 SSH 1 協(xié)議版本的 RSA 公鑰。
  • /etc/ssh/ssh_host_rsa_key:用于 SSH 2 協(xié)議版本的 RSA 私鑰。
  • /etc/ssh/ssh_host_rsa_key.pub:用于 SSH 2 協(xié)議版本的 RSA 公鑰。
  • /etc/pam.d/sshd:PAM 配置文件。

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

配置文件sshd_config的格式是,每個命令占據(jù)一行。每行都是配置項(xiàng)和對應(yīng)的值,配置項(xiàng)的大小寫不敏感,與值之間使用空格分隔。

Port 2034 

上面的配置命令指定,配置項(xiàng)Port的值是2034。Port寫成port也可。

配置文件還有另一種格式,就是配置項(xiàng)與值之間有一個等號,等號前后的空格可選。

Port = 2034 

配置文件里面,#開頭的行表示注釋。

# 這是一行注釋 

注意,注釋只能放在一行的開頭,不能放在一行的結(jié)尾。

Port 2034 # 此處不允許注釋 

上面的寫法是錯誤的。

另外,空行等同于注釋。

sshd 啟動時會自動讀取默認(rèn)的配置文件。如果希望使用其他的配置文件,可以用 sshd 命令的-f參數(shù)指定。

$ sshd -f /usr/local/ssh/my_config 

上面的命令指定 sshd 使用另一個配置文件my_config。

修改配置文件以后,可以用 sshd 命令的-t(test)檢查有沒有語法錯誤。

$ sshd -t 

配置文件修改以后,并不會自動生效,必須重新啟動 sshd。

$ sudo systemctl restart sshd.service 

sshd 密鑰

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

DSA 格式的密鑰文件默認(rèn)為/etc/ssh/ssh_host_dsa_key(公鑰為ssh_host_dsa_key.pub),RSA 格式的密鑰為/etc/ssh/ssh_host_rsa_key(公鑰為ssh_host_rsa_key.pub)。如果需要支持 SSH 1 協(xié)議,則必須有密鑰/etc/ssh/ssh_host_key。

如果密鑰不是默認(rèn)文件,那么可以通過配置文件sshd_configHostKey配置項(xiàng)指定。默認(rèn)密鑰的HostKey設(shè)置如下。


# 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_ke


上面命令前面的#表示這些行都是注釋,因?yàn)檫@是默認(rèn)值,有沒有這幾行都一樣。

如果要修改密鑰,就要去掉行首的#,指定其他密鑰。

HostKey /usr/local/ssh/my_dsa_key
HostKey /usr/local/ssh/my_rsa_key
HostKey /usr/local/ssh/my_old_ssh1_key 

sshd 配置項(xiàng)

以下是/etc/ssh/sshd_config文件里面的配置項(xiàng)。

AcceptEnv

AcceptEnv指定允許接受客戶端通過SendEnv命令發(fā)來的哪些環(huán)境變量,即允許客戶端設(shè)置服務(wù)器的環(huán)境變量清單,變量名之間使用空格分隔(AcceptEnv PATH TERM)。

AllowGroups

AllowGroups指定允許登錄的用戶組(AllowGroups groupName,多個組之間用空格分隔。如果不使用該項(xiàng),則允許所有用戶組登錄。

AllowUsers

AllowUsers指定允許登錄的用戶,用戶名之間使用空格分隔(AllowUsers user1 user2),也可以使用多行AllowUsers命令指定,用戶名支持使用通配符。如果不使用該項(xiàng),則允許所有用戶登錄。該項(xiàng)也可以使用用戶名@域名的格式(比如AllowUsers jones@example.com)。

AllowTcpForwarding

AllowTcpForwarding指定是否允許端口轉(zhuǎn)發(fā),默認(rèn)值為yesAllowTcpForwarding yes),local表示只允許本地端口轉(zhuǎn)發(fā),remote表示只允許遠(yuǎn)程端口轉(zhuǎn)發(fā)。

AuthorizedKeysFile

AuthorizedKeysFile指定儲存用戶公鑰的目錄,默認(rèn)是用戶主目錄的ssh/authorized_keys目錄(AuthorizedKeysFile .ssh/authorized_keys)。

Banner

Banner指定用戶登錄后,sshd 向其展示的信息文件(Banner /usr/local/etc/warning.txt),默認(rèn)不展示任何內(nèi)容。

ChallengeResponseAuthentication

ChallengeResponseAuthentication指定是否使用“鍵盤交互”身份驗(yàn)證方案,默認(rèn)值為yesChallengeResponseAuthentication yes)。

從理論上講,“鍵盤交互”身份驗(yàn)證方案可以向用戶詢問多重問題,但是實(shí)踐中,通常僅詢問用戶密碼。如果要完全禁用基于密碼的身份驗(yàn)證,請將PasswordAuthenticationChallengeResponseAuthentication都設(shè)置為no

Ciphers

Ciphers指定 sshd 可以接受的加密算法(Ciphers 3des-cbc),多個算法之間使用逗號分隔。

ClientAliveCountMax

ClientAliveCountMax指定建立連接后,客戶端失去響應(yīng)時,服務(wù)器嘗試連接的次數(shù)(ClientAliveCountMax 8)。

ClientAliveInterval

ClientAliveInterval指定允許客戶端發(fā)呆的時間,單位為秒(ClientAliveInterval 180)。如果這段時間里面,客戶端沒有發(fā)送任何信號,SSH 連接將關(guān)閉。

Compression

Compression指定客戶端與服務(wù)器之間的數(shù)據(jù)傳輸是否壓縮。默認(rèn)值為yesCompression yes

DenyGroups

DenyGroups指定不允許登錄的用戶組(DenyGroups groupName)。

DenyUsers

DenyUsers指定不允許登錄的用戶(DenyUsers user1),用戶名之間使用空格分隔,也可以使用多行DenyUsers命令指定。

FascistLogging

SSH 1 版本專用,指定日志輸出全部 Debug 信息(FascistLogging yes)。

HostKey

HostKey指定 sshd 服務(wù)器的密鑰,詳見前文。

KeyRegenerationInterval

KeyRegenerationInterval指定 SSH 1 版本的密鑰重新生成時間間隔,單位為秒,默認(rèn)是3600秒(KeyRegenerationInterval 3600)。

ListenAddress

ListenAddress指定 sshd 監(jiān)聽的本機(jī) IP 地址,即 sshd 啟用的 IP 地址,默認(rèn)是 0.0.0.0(ListenAddress 0.0.0.0)表示在本機(jī)所有網(wǎng)絡(luò)接口啟用??梢愿某芍辉谀硞€網(wǎng)絡(luò)接口啟用(比如ListenAddress 192.168.10.23),也可以指定某個域名啟用(比如ListenAddress server.example.com)。

如果要監(jiān)聽多個指定的 IP 地址,可以使用多行ListenAddress命令。

ListenAddress 172.16.1.1
ListenAddress 192.168.0.1 

LoginGraceTime

LoginGraceTime指定允許客戶端登錄時發(fā)呆的最長時間,比如用戶遲遲不輸入密碼,連接就會自動斷開,單位為秒(LoginGraceTime 60)。如果設(shè)為0,就表示沒有限制。

LogLevel

LogLevel指定日志的詳細(xì)程度,可能的值依次為QUIET、FATAL、ERROR、INFO、VERBOSE、DEBUGDEBUG1、DEBUG2、DEBUG3,默認(rèn)為INFOLogLevel INFO)。

MACs

MACs指定sshd 可以接受的數(shù)據(jù)校驗(yàn)算法(MACs hmac-sha1),多個算法之間使用逗號分隔。

MaxAuthTries

MaxAuthTries指定允許 SSH 登錄的最大嘗試次數(shù)(MaxAuthTries 3),如果密碼輸入錯誤達(dá)到指定次數(shù),SSH 連接將關(guān)閉。

MaxStartups

MaxStartups指定允許同時并發(fā)的 SSH 連接數(shù)量(MaxStartups)。如果設(shè)為0,就表示沒有限制。

這個屬性也可以設(shè)為A:B:C的形式,比如MaxStartups 10:50:20,表示如果達(dá)到10個并發(fā)連接,后面的連接將有50%的概率被拒絕;如果達(dá)到20個并發(fā)連接,則后面的連接將100%被拒絕。

PasswordAuthentication

PasswordAuthentication指定是否允許密碼登錄,默認(rèn)值為yesPasswordAuthentication yes),建議改成no(禁止密碼登錄,只允許密鑰登錄)。

PermitEmptyPasswords

PermitEmptyPasswords指定是否允許空密碼登錄,即用戶的密碼是否可以為空,默認(rèn)為yesPermitEmptyPasswords yes),建議改成no(禁止無密碼登錄)。

PermitRootLogin

PermitRootLogin指定是否允許根用戶登錄,默認(rèn)為yesPermitRootLogin yes),建議改成no(禁止根用戶登錄)。

還有一種寫法是寫成prohibit-password,表示 root 用戶不能用密碼登錄,但是可以用密鑰登錄。

PermitRootLogin prohibit-password 

PermitUserEnvironment

PermitUserEnvironment指定是否允許 sshd 加載客戶端的~/.ssh/environment文件和~/.ssh/authorized_keys文件里面的environment= options環(huán)境變量設(shè)置。默認(rèn)值為noPermitUserEnvironment no)。

Port

Port指定 sshd 監(jiān)聽的端口,即客戶端連接的端口,默認(rèn)是22(Port 22)。出于安全考慮,可以改掉這個端口(比如Port 8822)。

配置文件可以使用多個Port命令,同時監(jiān)聽多個端口。

Port 22
Port 80
Port 443
Port 8080 

上面的示例表示同時監(jiān)聽4個端口。

PrintMotd

PrintMotd指定用戶登錄后,是否向其展示系統(tǒng)的 motd(Message of the day)的信息文件/etc/motd。該文件用于通知所有用戶一些重要事項(xiàng),比如系統(tǒng)維護(hù)時間、安全問題等等。默認(rèn)值為yesPrintMotd yes),由于 Shell 一般會展示這個信息文件,所以這里可以改為no。

PrintLastLog

PrintLastLog指定是否打印上一次用戶登錄時間,默認(rèn)值為yesPrintLastLog yes)。

Protocol

Protocol指定 sshd 使用的協(xié)議。Protocol 1表示使用 SSH 1 協(xié)議,建議改成Protocol 2(使用 SSH 2 協(xié)議)。Protocol 2,1表示同時支持兩個版本的協(xié)議。

PubKeyAuthentication

PubKeyAuthentication指定是否允許公鑰登錄,默認(rèn)值為yesPubKeyAuthentication yes)。

QuietMode

SSH 1 版本專用,指定日志只輸出致命的錯誤信息(QuietMode yes)。

RSAAuthentication

RSAAuthentication指定允許 RSA 認(rèn)證,默認(rèn)值為yesRSAAuthentication yes)。

ServerKeyBits

ServerKeyBits指定 SSH 1 版本的密鑰重新生成時的位數(shù),默認(rèn)是768(ServerKeyBits 768)。

StrictModes

StrictModes指定 sshd 是否檢查用戶的一些重要文件和目錄的權(quán)限。默認(rèn)為yesStrictModes yes),即對于用戶的 SSH 配置文件、密鑰文件和所在目錄,SSH 要求擁有者必須是根用戶或用戶本人,用戶組和其他人的寫權(quán)限必須關(guān)閉。

SyslogFacility

SyslogFacility指定 Syslog 如何處理 sshd 的日志,默認(rèn)是 Auth(SyslogFacility AUTH)。

TCPKeepAlive

TCPKeepAlive指定打開 sshd 跟客戶端 TCP 連接的 keepalive 參數(shù)(TCPKeepAlive yes)。

UseDNS

UseDNS指定用戶 SSH 登錄一個域名時,服務(wù)器是否使用 DNS,確認(rèn)該域名對應(yīng)的 IP 地址包含本機(jī)(UseDNS yes)。打開該選項(xiàng)意義不大,而且如果 DNS 更新不及時,還有可能誤判,建議關(guān)閉。

UseLogin

UseLogin指定用戶認(rèn)證內(nèi)部是否使用/usr/bin/login替代 SSH 工具,默認(rèn)為noUseLogin no)。

UserPrivilegeSeparation

UserPrivilegeSeparation指定用戶認(rèn)證通過以后,使用另一個子線程處理用戶權(quán)限相關(guān)的操作,這樣有利于提高安全性。默認(rèn)值為yesUsePrivilegeSeparation yes)。

VerboseMode

SSH 2 版本專用,指定日志輸出詳細(xì)的 Debug 信息(VerboseMode yes)。

X11Forwarding

X11Forwarding指定是否打開 X window 的轉(zhuǎn)發(fā),默認(rèn)值為 no(X11Forwarding no)。

修改配置文件以后,可以使用下面的命令驗(yàn)證,配置文件是否有語法錯誤。

$ sshd -t 

新的配置文件生效,必須重啟 sshd。

$ sudo systemctl restart sshd 

sshd 的命令行配置項(xiàng)

sshd 命令有一些配置項(xiàng)。這些配置項(xiàng)在調(diào)用時指定,可以覆蓋配置文件的設(shè)置。

(1)-d

-d參數(shù)用于顯示 debug 信息。

$ sshd -d 

(2)-D

-D參數(shù)指定 sshd 不作為后臺守護(hù)進(jìn)程運(yùn)行。

$ sshd -D 

(3)-e

-e參數(shù)將 sshd 寫入系統(tǒng)日志 syslog 的內(nèi)容導(dǎo)向標(biāo)準(zhǔn)錯誤(standard error)。

(4)-f

-f參數(shù)指定配置文件的位置。

(5)-h

-h參數(shù)用于指定密鑰。

$ sshd -h /usr/local/ssh/my_rsa_key 

(6)-o

-o參數(shù)指定配置文件的一個配置項(xiàng)和對應(yīng)的值。

$ sshd -o "Port 2034" 

配置項(xiàng)和對應(yīng)值之間,可以使用等號。

$ sshd -o "Port = 2034" 

如果省略等號前后的空格,也可以不使用引號。

$ sshd -o Port=2034 

-o參數(shù)可以多個一起使用,用來指定多個配置關(guān)鍵字。

(7)-p

-p參數(shù)指定 sshd 的服務(wù)端口。

$ sshd -p 2034 

上面命令指定 sshd 在2034端口啟動。

-p參數(shù)可以指定多個端口。

$ sshd -p 2222 -p 3333 

(8)-t

-t參數(shù)檢查配置文件的語法是否正確。

丰满人妻一级特黄a大片,午夜无码免费福利一级,欧美亚洲精品在线,国产婷婷成人久久Av免费高清