【08-02、03】ssh的常用參數、用法和sshd的常用參數


ssh的常用參數,用法和sshd的常用參數

ssh和sshd的區別:

  ssh是ssh的客戶端,在遠程系統時進行可驗證的加密安全訪問。

  sshd是服務端

1.ssh常用參數、用法

1.1 ssh使用方法

#使用格式
ssh [user@]host [COMMAND]       #ssh root@10.0.1.10 -p 9527
ssh [-l user] host [COMMAND]    #ssh -l root 10.0.1.11 -p 9527

#選項參數
-p #遠程服務器監聽的端口
-b #指定連接的源IP
-v #調試模式
-C #壓縮方式
-X #支持x11轉發
-t #強制偽tty分配,如:ssh -t 10.0.0.5 ssh -t 10.0.0.6 ssh 10.0.0.7 這個可以實現多跳中的逐級登陸,最后達到可以登錄最后一個服務器的目的
-o #option 如:-o StrictHostKeyChecking=no
-i #指定私鑰路徑,實現基於key驗證,默認為: ~/.ssh/id_dsa,~/.ssh/id_ecdsa, ~/.ssh/id_ed25519,~/.ssh/id_rsa

1.2 ssh連接類型

簡單來說:區別是公鑰誰先發,密碼方式服務器發公鑰。公鑰連接則是客戶端發起公鑰

1.2.1 使用密碼進行連接
連接過程:
1
. 客戶端發起ssh請求,服務器會把自己的公鑰發送給用戶 2. 用戶會根據服務器發來的公鑰對密碼進行加密 3. 加密后的信息回傳給服務器,服務器用自己的私鑰解密,如果密碼正確,則用戶登錄成功

1.2.2 使用秘鑰進行連接
1. 首先在客戶端生成一對密鑰(ssh-keygen2. 並將客戶端的公鑰ssh-copy-id 拷貝到服務端
3. 當客戶端再次發送一個連接請求,包括ip、用戶名
4. 服務端得到客戶端的請求后,會到authorized_keys中查找,如果有響應的IP和用戶,就會隨機生成一個字符串,例如:magedu
5. 服務端將使用客戶端拷貝過來的公鑰進行加密,然后發送給客戶端
6. 得到服務端發來的消息后,客戶端會使用私鑰進行解密,然后將解密后的字符串發送給服務端
7. 服務端接受到客戶端發來的字符串后,跟之前的字符串進行對比,如果一致,就允許免密碼登錄

1.3 ssh客戶端配置文件

# Host *
#   ForwardAgent no                #轉發代理
#   ForwardX11 no                  #X11轉發 慎用
#   PasswordAuthentication yes     #密碼認證
#   HostbasedAuthentication no     #yes的話開啟主機認證
#   GSSAPIAuthentication no        #yes的時候登錄速度會慢,可能因為GSS-API認證有問題
#   GSSAPIDelegateCredentials no   #yes的時候登錄速度慢,GSS-API問題
#   GSSAPIKeyExchange no           #如果不啟用GSSAPIDelegateCredentials的話可以啟用該選項保證安全
#   GSSAPITrustDNS no              #似乎可以欺騙GSSAPI反向解析正確的主機名
#   BatchMode no                   #yes的話密碼查詢被禁用
#   CheckHostIP yes                #yes的話會檢查known_hosts文件中的IP地址
#   AddressFamily any              #連接時使用指定的地址,'any','inet','inet6'
#   ConnectTimeout 0               #連接超時時間單位'' 關閉或卻是無法使用時候生效,而不是拒絕連接的
#   StrictHostKeyChecking ask      #如果為yes 不會自動將主機秘鑰添加到~/.ssh/known_hosts文件,相對安全 [yes|no|ask] ask為詢問
#   IdentityFile ~/.ssh/id_rsa     #1. 讀取驗證身份的文件位置protocol version 1(協議版本1)默認為~/.ssh/identity
#   IdentityFile ~/.ssh/id_dsa     #2. protocol version 2(協議版本2) ~/.ssh/id_rsa和~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa   #3. 目錄轉義: %d(本地用戶主目錄) %u(本地用戶名) %I(本地主機名) %h(遠程主機名) %r(遠程用戶名)
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22                        #指定要在遠程主機上連接的端口號
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,umac-64@openssh.com
#   EscapeChar ~                   #設置轉義字符 默認為~
#   Tunnel no                      #客戶端與服務器之間的設備轉發 參數
#   TunnelDevice any:any           #指定要在客戶端(local_tun)和服務器(remote_tun) 上打開tun4設備
#   PermitLocalCommand no          #允許通過LocalCommand選項使用ssh中的命令轉義序列
#   VisualHostKey no               #如果為yes登錄時還會輸出主機秘鑰的ASCII碼
#   ProxyCommand ssh -q -W %h:%p gateway.example.com     #用於鏈接服務器的命令 %h替換要連接主機名 %p為端口
#   RekeyLimit 1G 1h               #指定在重新協商會話密鑰之前可以傳輸的最大數據量
參考文件:客戶端配置文件

2.sshd服務常用參數

2.1 sshd常用參數及使用方式
#修改配置后需要重啟服務
systemctl restart sshd
systemctl reload sshd 重新加載配置文件

vim  /etc/ssh/sshd_config
Port 9527                    #默認端口,建議修改為10000<=65535重啟sshd后生效
PasswordAuthentication no    #建議關閉 使用公鑰登錄 關閉前先創建好公鑰登錄方式
PermitRootLogin no           #建議關閉 不要使用root用戶來登錄服務器
StrictModes yes              #檢查.ssh/文件的所有者,權限等
MaxAuthTries 6               #指定每個連接允許的最大嘗試次數,失敗次數超過一般則記錄進日志,默認為6
MaxSessions 10               #指定每個網絡連接允許的最大打開會話數 默認為10
PubkeyAuthentication yes     #是否允許公鑰認證 默認為yes
PermitEmptyPasswords no      #是否允許空密碼的用戶登錄 默認為no
GatewayPorts no              #指定是否允許遠程主機連接到為客戶端轉發的端口
ClientAliveInterval 10       #當幾秒沒收到客戶端數據則向客戶端發送alive消息並等候應答 0為不發送
ClientAliveCountMax 3        #發送alive的次數,發送到上限后會強制斷開連接 alive比TCPKeepAlive更加安全,如果值為15 則會在45秒后強制斷開
UseDNS no                    #不使用DNS查詢客戶端 關閉可提高速度
GSSAPIAuthentication no      #是否允許使用基於 GSSAPI 的用戶認證。默認值為"no" 關閉可提高鏈接速度
MaxStartups 10:30:100        #未驗證機器連接數,后續丟棄,直到驗證成功或斷開



#用戶黑白名單
Denyusers user1                     #設定用戶黑名單,添加后無法使用ssh進行登錄
Allowusers user2 user3              #設定用戶白名單,默認不在白名單的用戶無法登錄

 

SSH服務注意事項

  1. 建議使用非默認端口
  2. 禁止使用protocol version 1
  3. 限制可登錄用戶
  4. 設定空閑會話超時時長
  5. 利用防火牆設置ssh訪問策略
  6. 僅監聽特定的IP地址
  7. 基於口令認證時,使用強密碼策略,比如:tr -dc A-Za-z0-9_ < /dev/urandom | head -c 12|xargs
  8. 使用基於密鑰的認證
  9. 禁止使用空密碼
  10. 禁止root用戶直接登錄
  11. 限制ssh的訪問頻度和並發在線數
  12. 經常分析日志

 

2.2 sshd默認配置文件詳解
[root@rhel011 ~]# vim /etc/ssh/sshd_config 
#Port 22 #默認端口,建議修改為10000<=65535重啟sshd后生效 #AddressFamily any #指定使用地址[any|inet|inet6] #ListenAddress 0.0.0.0 #監聽本機IPv4地址 #ListenAddress :: #監聽本機IPv6地址 HostKey /etc/ssh/ssh_host_rsa_key #設置包含私人秘鑰的文件 HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key # Ciphers and keying 密碼和秘鑰↓ #RekeyLimit default none # Logging #SyslogFacility AUTH #有人登錄ssh登錄系統 記錄的信息類型[AUTH|AUTHPRIV] SyslogFacility AUTHPRIV #LogLevel INFO #日志信息級別[QUIET|FATAL|ERROR|INFO|VERBOSE|DEBUG|DEBUG1|DEBUG2|DEBUG3] DEBUG級別會侵犯隱私 # Authentication: #LoginGraceTime 2m #如果沒有登錄成功,將會斷開連接 默認為120秒 PermitRootLogin yes #是否允許root登錄 默認允許 建議為no 使用秘鑰登錄 #StrictModes yes #ssh在接受登錄前是否檢查home和rhosts文件的權限和所有權,建議為yes 因為新手會把自己的目錄和文件設置成任何人都有權限 #MaxAuthTries 6 #指定每個連接允許的最大嘗試次數,失敗次數超過一般則記錄進日志,默認為6 #MaxSessions 10 #指定每個網絡連接允許的最大打開會話數 默認為10 #PubkeyAuthentication yes #是否允許公鑰認證 默認為yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys #用戶身份驗證默認存儲位置 #AuthorizedPrincipalsFile none #AuthorizedKeysCommand none #指定腳本查找用戶的公鑰文件做認證,登錄認證層面調用,可以調用指定參數進行認證 通過相關配置 AuthorizedKeysCommandUser 指定腳本的執行用戶 #在 8.x 之前的版本,優先使用 AuthorizedKeysCommand 進行認證,如果認證失敗,繼續使用 AuthorizedKeysFile 認證 #AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #HostbasedAuthentication no #指定是否允許 rhosts 或 /etc/hosts.equiv 身份驗證以及公鑰客戶端主機身份驗證(基於主機的身份驗證) # Change to yes if you don't trust ~/.ssh/known_hosts for  # HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes #指定.rhosts和.shosts文件不會在RhostsRSAAuthentication或HostbasedAuthentication中使用 # To disable tunneled clear text passwords, change to no here! #要禁用隧道明文密碼,請在此處更改為 no #PasswordAuthentication yes #PermitEmptyPasswords no #是否允許空密碼的用戶登錄 默認為no PasswordAuthentication yes #是否使用密碼驗證。設置為no后會轉而使用秘鑰登錄 # Change to no to disable s/key passwords #ChallengeResponseAuthentication yes ChallengeResponseAuthentication no #是否允許質疑 應答(challenge-response)認證 # Kerberos options #KerberosAuthentication no #是否允許Kerberos(秘鑰)認證登錄 #KerberosOrLocalPasswd yes #如果Kerberos驗證失敗,那么還會通過其他機制認證比如(/etc/passwd) #KerberosTicketCleanup yes #如果用戶在退出登錄后會自動銷戶 #KerberosGetAFSToken no #如果使用了 AFS 並且該用戶有一個 Kerberos 5 TGT,那么開啟該指令后,將會在訪問用戶的家目錄前嘗試獲取一個 AFS token #KerberosUseKuserok yes #是否查看.k5login文件中的用戶別名 # GSSAPI options GSSAPIAuthentication yes #是否允許使用基於 GSSAPI 的用戶認證。默認值為"no" GSSAPICleanupCredentials no #是否在用戶退出登錄后自動銷毀用戶憑證緩存。默認值是"yes" #GSSAPIStrictAcceptorCheck yes #是否對客戶端進行嚴格的身份認證.若為”yes”,則客戶端會在服務端被驗證主機名 #GSSAPIKeyExchange no #指定是否允許基於 GSSAPI的密鑰交換 #GSSAPIEnablek5users no # Set this to 'yes' to enable PAM authentication, account processing, # and session processing. If this is enabled, PAM authentication will # be allowed through the ChallengeResponseAuthentication and # PasswordAuthentication. Depending on your PAM configuration, # PAM authentication via ChallengeResponseAuthentication may bypass # the setting of "PermitRootLogin without-password". # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. # WARNING: 'UsePAM no' is not supported in Fedora and may cause several # problems. UsePAM yes #AllowAgentForwarding yes #指定是否允許ssh-agent轉發 #AllowTcpForwarding yes #指定是否允許 TCP 轉發 #GatewayPorts no #指定是否允許遠程主機連接到為客戶端轉發的端口 X11Forwarding yes #指定是否允許 X11 轉發 #X11DisplayOffset 10 #指定X11轉發的第一個可用的顯示區(display)數字。默認值是10.這個可以用於防止sshd占用了真實的X11服務器顯示區,從而發生混淆 #X11UseLocalhost yes #是否應當將X11轉發服務器綁定到本地loopback地址。默認值是"yes"。 #PermitTTY yes #指定是否允許設備轉發 # It is recommended to use pam_motd in /etc/pam.d/sshd instead of PrintMotd, # as it is more configurable and versatile than the built-in version. PrintMotd no #PrintLastLog yes #指定 sshd(8) 是否在每一次交互式登錄時打印最后一位用戶的登錄時間。默認值是"yes" #TCPKeepAlive yes #指定系統是否向客戶端發送 TCP keepalive 消息。默認值是"yes"。可以檢測到死連接、連接不當關閉、客戶端崩潰等異常 #PermitUserEnvironment no #指定是否允許 sshd(8) 處理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 選項。 #默認值是"no"。如果設為"yes"可能會導致用戶有機會使用某些機制(比如 LD_PRELOAD)繞過訪問控制,造成安全漏洞。 #Compression delayed #是否對通信數據進行加密,還是延遲到認證成功之后再對通信數據加密。[yes|delayed] #ClientAliveInterval 0 #當幾秒沒收到客戶端數據則向客戶端發送alive消息並等候應答 0為不發送 #ClientAliveCountMax 3 #發送alive的次數,發送到上限后會強制斷開連接 alive比TCPKeepAlive更加安全,如果值為15 則會在45秒后強制斷開 #UseDNS no #指定 sshd(8) 是否應該對遠程主機名進行反向解析,以檢查此主機名是否與其IP地址真實對應。默認值為"yes"。 #PidFile /var/run/sshd.pid #指定在哪個文件中存放SSH守護進程的進程號,默認為 /var/run/sshd.pid 文件 #MaxStartups 10:30:100 #未驗證機器連接數,后續丟棄,直到驗證成功或斷開 #PermitTunnel no #指定是否允許設備轉發 #ChrootDirectory none #指定認證后chroot(2)的路徑。此路徑及其所有組件必須是任何其他用戶或組不可寫的根目錄。在chroot之后sshd(8) 將工作目錄更改為用戶的主目錄。 #VersionAddendum none # no default banner path #Banner none #將這個指令指定的文件中的內容在用戶進行認證前顯示給遠程用戶。 # Accept locale-related environment variables #語言環境變量 AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server #sfpt的目錄 # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no #指定是否允許 X11 轉發 # AllowTcpForwarding no #指定是否允許 TCP 轉發 # PermitTTY no #指定是否允許tun (4)設備轉發 # ForceCommand cvs server #強制執行這里指定的命令而忽略客戶端提供的任何命令。

 

參考文件:https://www.cnblogs.com/zqifa/p/ssh-2.html2.2 Linux下SSHD各配置項解釋

 


免責聲明!

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



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