Arch Linux 入門系列-ssh配置(xshell + 虛擬機的arch linux)

經過ssh,能夠相對很安全的操做遠程服務器。使用的軟件包 openssh 是該協議的開源實現。php

安裝 openssh

虛擬機arch linux 執行: #sudo pacman -S opensshlinux

ssh 認證方式

詳細說下這部分。 我操做的兩種認證過程: 用戶名+密碼認證和公鑰認證算法

關於公鑰和密鑰: 他們是成對出現的,信息通過公鑰加密, 只有配對的密鑰才能解密。公鑰是能夠任意分發的,私鑰必須本身持有,確保本身能惟一解密信息。shell

1. 用戶名+密碼:

  • 訪問步驟:緩存

  1. 用戶第一次訪問遠程服務器的時候,服務器把本身 public key 發送到客戶端安全

  2. 客戶端用服務器的 public key 加密本身的密碼,併發送到服務器服務器

  3. 服務器用本身的 private key 解密信息。而後進行驗證信息是否有錯。
    這個過程當中,只涉及到了服務器端的公私密鑰對。併發

優勢:密碼是安全的,由於只有服務器端的私鑰才能解密。這點比傳統的 telnet、ftp用的明文傳遞安全。ssh

缺點:不能避免中間人攻擊。把上述過程當中的服務器替換成攻擊者的服務器,流程也是沒有問題的。攻擊者欺騙客戶端,把本身的 public key發給客戶端。攻擊者再用本身的私鑰解密密碼,垂手可得的拿到客戶端的密碼。而後再僞裝成客戶端請求真正的服務器ide

2. 公鑰認證

這種方式用到了兩組密鑰對。客戶端和服務端都有本身的公私密鑰對。

  • 提早準備:

    1. 將客戶端的公鑰上傳到服務器。(這步必須確保安全傳到正確的服務器,能夠用 usb、#ssh-copy-id user@host命令)

    2. 服務器將該公鑰寫入到 ~/.ssh/authorized_keys 文件。該文件一行存放一個 public key。

  • 訪問步驟:

  1. 客戶端請求訪問服務器

  2. 服務器生成一個會話用的公私密鑰對,並將會話公鑰用該客戶端對應的 public key 加密,返回給客戶端

  3. 客戶端用private key 解密會話公鑰。並用該會話公鑰加密發給服務器的信息

  4. 服務器用會話私鑰解密客戶端的信息

接下來的客戶端-服務器的通訊,都經過對方的公鑰加密信息,發給對方的消息,只有對方的私鑰能解密。這個過程涉及到了兩組公私密鑰對。

優勢:不須要使用密碼,提升了安全性。即便有中間人攻擊,中間人也沒法拿到客戶端的私鑰解密信息,也不能拿到會話私鑰解密服務端的消息。確保了信息安全。

  • 具體涉及的命令:

  1. 生成密鑰對。xshell中能夠生成的密鑰對,只是公鑰格式好像有問題,不能直接使用。在虛擬機裏執行
    #ssh-keygen -t rsa

生成一組公私密鑰對,該指令默認生成 2048位的 rsa 算法類型的密鑰對。命令執行過程以下

Generating public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa): 
/home/test/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
f2:75:41:ad:c7:4d:38:0c:d2:aa:d5:aa:9a:f5:84:86 test@hostname.com

第一步是提示輸入保存密鑰文件的路徑,輸入enter默認便可。(測試機生成過一次覆蓋便可)。

第二步提示提示輸入 passphrase,這個至關於給密鑰加了個密碼。建議在要求更加安全的狀況下使用, 通常輸入 enter 默認爲空便可。
id_rsa 文件保存的是私鑰, 公鑰的文件命名是private_key_filename.pub

生成完畢後,將公鑰copy到服務器~/.ssh/authorized_keys。我是虛擬機,直接複製粘貼了 :),你也可使用命令:#cat yourpubkeyfile >> ~/.ssh/authorized_keys
客戶端是 xshell,經過 工具->用戶私鑰管理,導入該私鑰。便可創建對服務端的訪問。對於遠程服務器初次安裝 key 能夠經過 ssh-copy-id -i ~/.ssh/your_key root@remote_ip 命令,執行命令後會提示輸入密碼,輸入完畢後,便公鑰導入成功。

基本配置介紹

/etc/ssh/sshd_config 是ssh服務端配置文件
/etc/ssh/ssh_config 是ssh客戶端的配置文件。 在個人環境中,使用xhell,使用不到這個文件。

  1. /etc/ssh/sshd_config中添加 AllowUsers userA userB 該指令限制僅userA、userB 能夠經過ssh鏈接。新添加用戶經過空格分隔,每次修改後 sudo systemctl restart sshd 重啓 sshd守護進程

  2. ~/.ssh/known_hosts~/.ssh/authorized_keys 分別是客戶端和服務端管理公鑰的文件。

  • 服務端每增長一個客戶端的公鑰,都要寫入服務端~/.ssh/authorized_keys文件

  • 客戶端也常常須要鏈接多個服務端,每一個服務端的host與對應的 public key關係保存在客戶端 know_hosts

他們的詳細格式請查閱手冊 #man sshd;
當遠程主機IP變化、重裝系統等, 會致使known_hosts 緩存的信息失效,更新便可

參考

  1. IBM ssh安全性和配置入門

  2. Arch Linux Wiki:SSH 配置#.E8.BF.9E.E6.8E.A5.E5.88.B0.E6.9C.8D.E5.8A.A1.E5.99.A8)

相關文章
相關標籤/搜索