ssh


SSH是一套網絡協議,目的在於安全的網絡服務與加密遠程登錄。

實現SSH協議的最主流的開源軟件是OpenSSH

Secure Shell是Linux系統首選的登錄方式,數據加密,安全傳輸,主要方式有兩種:

對稱加密(秘鑰加密)只有一個秘鑰
非對稱加密(公鑰加密)有一對秘鑰

非對稱加密分為:公鑰(Public Key)與私鑰(Private Key)
使用公鑰加密后的密文,只能使用對應的私鑰才能解開,破解的可能性很低

此種方式是公鑰私鑰放在Server端,即使client在登錄的時候,傳輸數據被竊取,黑客也沒有私鑰進行解密,因此保證了數據安全。

 

公鑰理解為一把鎖,私鑰是其對應的鑰匙,公鑰針對密碼加密,私鑰放在Server端
登錄Linux服務器的形式
①基於口令,賬號密碼的登錄形式
②基於公鑰,實現免密登錄

一、【基於口令驗證】

在用xshell初次登錄某虛擬機時:ssh root@192.168.178.110(可以直接輸密碼登錄,也可以如下步驟驗證遠程秘鑰之后再輸入密碼登錄)

會提示

The authenticity of host 'pyyuc (192.168.178.110)' can't be established. ECDSA key fingerprint is SHA256:CVwhwfUiD53HpLPrretR4pGltYRL6QB+5lyI. Are you sure you want to continue connecting (yes/no)? yes

這一段ssh連接的信息,表述的是無法確認192.168.178.110這台機器的真實性,但是知道了這台機器的指紋,SHA256:CVwhwfUiD53HpLPrretR4pGltYRL6QB+5lyI,讓用戶自行確認是否登錄

這時候就要驗證遠程 主機指紋是否正確

遠程掃描server指紋信息

$ssh-keyscan -t ecdsa 192.168.178.110 | ssh-keygen -lf - #192.168.178.110 SSH-2.0-OpenSSH_7.4 256 
SHA256:CVwhwfUkaLPrretR4pGltYRL6QB+5lyI 123.206.16.61 (ECDSA)

系統此時應該會返回一句信息

Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.178.110' (ECDSA) to the list of known hosts. root@192.168.178.110's password:

此時表示Client已經確認Server的身份,准備開始連接,輸入Server機器的密碼,如果密碼正確,則可以登錄。

二、【基於公鑰認證】--免密登錄

公鑰登錄流程如下

  • client發送自己的公鑰給server,寫入server的authorized_keys
  • server端接收到client的連接請求后,在自己的authorized_keys文件中匹配client的公鑰信息pubkey,並且生成一個隨機數R,使用client的公鑰pibkey針對該隨機數R進行加密,得到一個加密后的隨機數pubkey(R)
  • client通過私鑰進行解密得到隨機數R,再對隨機數R和當前會話的sessionkey采用MD5生成摘要Digest1,再發送給server端
  • server端會對隨機數R和當前client的sessionkey用同樣摘要算法生成Digest2
  • 結果比較client發來的Digest1與Digest2是否一致,正確則完成認證

 

配置SSH公鑰認證

1.client本地生成公私鑰

[root@linux .ssh]# ssh-keygen -t rsa #指定rsa密鑰類型,默認一路回車 #會生成如下的公私鑰 Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub.

2.client發送自己的公私鑰到server中

#發送自己的公鑰,寫入到遠端server的authorized_keys中 $ssh-copy-id root@192.168.178.110 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/yuchao/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@192.168.178.1101's password:  Number of key(s) added: 1  Now try logging into the machine, with: "ssh 'root@192.168.178.110'" and check to make sure that only the key(s) you wanted were added.

3.此時可以免密登錄了

$ssh root@192.168.178.110 #直接輸入登錄命令即可 Last failed login: Fri Jan 3 16:54:46 CST 2020 from 189.39.13.1 on ssh:notty There were 3 failed login attempts since the last successful login. Last login: Fri Jan 3 16:14:59 2020 from 222.35.146.118 [root@linux ~]# [root@linux ~]# cat ~/.ssh/authorized_keys #檢查server中的秘鑰 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbkHjqnRe31HCteHc0BSfovvs9GqutyBfWvAJQy51Std1Ir3qBnHs29aKjwPL/jm/xH
[root@linux ~]# exit    #登出
linux$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbkHjqnRe31HCteHc0BSfovvs9GqutyBfWvAJQy51Std1Ir3qBnHs29aKjwPL/jm/xH
 
 

【ssh配置文件】

和Linux用戶有關ssh的配置文件,存放在此路徑:$HOME/.ssh/

   (沒有/root/.ssh的話配置一次免密登錄就可以

[root@ .ssh]# pwd
/root/.ssh
[root@ .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
  • Known_hosts:當Client接收Server的公鑰以后,Server的公鑰信息會放在Client$HOME/.ssh/known_hosts文件中,下次再次連接的時候,系統能夠識別出Server的公鑰已經存在了本地,因此可以跳過警告部分,直接提示輸入密碼了
  • authorized_keys:Server遠程主機將用戶的公鑰,保存在已登錄用戶的$HOME/.ssh/authorized_keys文件中。(用於客戶端免密登錄使用)
  • id_rsa:私鑰文件
  • id_rsa.pub:公鑰文件

三、ssh與服務器安全實戰

和Linux用戶有關ssh的配置文件,存放在此路徑:$HOME/.ssh/
ssh服務的配置文件存放於/etc/ssh/sshd_config
# grep -Ev '^$|^[# ]' /etc/ssh/sshd_config(config內容太多,用grep過濾一下)

在生產服務器下,運維人員一般會禁止root用戶登錄服務器,最大程度的保證服務器的安全,被黑客攻擊的幾率,以及修改ssh的遠程連接端口

修改ssh的端口 ,Port 23354
禁止root登錄,PermitRootLogin no
禁止用密碼登錄,只能用被信任的機器,用公私鑰進行登錄,PasswordAuthentication no

1、vim 編輯sshd_config文件以下內容

Port 23354
AddressFamily any
ListenAddress 0.0.0.0
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin no
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
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
Subsystem sftp /usr/libexec/openssh/sftp-server

注意了,此時別立即重啟服務

2、配置一個普通用戶的賬號,且支持公鑰登錄的形式

①登錄服務器,創建普通用戶,設置登錄密碼
useradd yu
passwd yu

②在自己本地機器,生成一個普通用戶的公私鑰對
ssh-keygen -t rsa
③發送公鑰給服務器,配置公鑰登錄
ssh-copy-id yu@192.168.178.110

④在正確配置了公私鑰登錄之后,yu這個用戶就可以免密登錄linux服務器了
ssh yu@192.168.178.110

3、在linux機器上配置yu用戶支持sudo命令

①使用root登錄服務器,配置yu用戶支持sudo命令
vim /etc/sudoers文件
添加如下行
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
yu ALL=(ALL) ALL

②此時嘗試用yu用戶登錄,是否能夠使用sudo命令

sudu ls /root

4、使用root賬號,重啟linux的sshd服務器

以后root用戶就無法使用密碼登錄了,只能用yuchao這個用戶進行免密登錄,最大程度保證服務器的安全了

①使用root用戶重啟sshd服務
ssh root@192.168.178.142

②重啟sshd服務
systemctl restart sshd

③此時機器已經禁止root登錄,禁止密碼登錄,且修改了ssh端口為23354

④此時只能使用配置好的yu用戶進行免密登錄了
ssh yu@192.168.178.142 -p 23354


免責聲明!

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



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