SSH 與 SSH-Key

ssh 提供兩種級別的安全認證:git

  1. 基於口令的安全認證
  2. 基於證書的安全認證

基於口令的安全認證

知道用戶名和密碼便可登陸。鏈接是加密的,但客戶端不能確認目標主機是否爲「僞造的」,也不能保證口令安全。github

開啓口令認證須要在遠程主機的配置文件 /etc/ssh/sshd_config 添加:算法

PasswordAuthentication yes

重啓 sshd 使改動生效:vim

$ /etc/init.d/sshd reload

基於證書的安全認證

這須要用戶持有「公鑰/私鑰對」證書。具體是用戶在遠程主機存有公鑰,本地持有私鑰和公鑰。緩存

客戶端向服務器發出請求。服務器收到請求以後,在用戶的主目錄下找到該用戶的公鑰(公鑰存放在遠程主機的 ~/.ssh/authorized_keys 中,一行一條),對比用戶發送過來的公鑰。若是一致,服務器用公鑰加密「質詢」併發送給客戶端。客戶端收到「質詢」後用私鑰解密,再發還給服務器。認證結束。安全

須要生成密鑰,使用 ssh-keygen,選加密算法(rsa、dsa),給祕鑰命名(可選):bash

$ ssh-keygen -t rsa -C "name"

而後會提示你輸入 passphrase,即私鑰密碼。這能夠增強安全性,避免證書被惡意複製。服務器

完成後,會在 ~.ssh 下生成 id_rsa, id_rsa.pub 兩個文件,分別是 私鑰/公鑰。併發

公鑰需複製一份到遠程服務器 ~/.ssh/authorized_keys 文件裏。ssh

要保證 ~/.ssh/authorized_keys 都只有用戶本身有寫權限。不然驗證無效。

$ chmod -R 700 ~/.ssh/
$ chmod 600 ~/.ssh/authorized_keys

sshd_config 配置實踐

$ vim /etc/ssh/sshd_config

# 是否容許root帳戶遠程登陸,爲了安全可關閉
PermitRootLogin no

# 是否檢查用戶的文件系統權限,避免因目錄、文件的權限配置錯誤可能引發信息泄露
StrictModes no

# 是否容許使用證書登陸,受權文件路徑
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

# 是否容許使用口令登陸,爲了安全可關閉
PasswordAuthentication no

使用 SSH-Agent 緩存保存密鑰口令

默認會在每次使用私鑰時請求該口令,你也能夠將其加入本地密碼庫:

$ ssh-add ~/.ssh/id_rsa

這樣在本機使用就不會每次輸入密碼了,減弱了安全性,但增長了便利。

持有多個證書時的使用方法

簡單狀況下,經過手動指定私鑰文件登陸

$ ssh -i ~/.ssh/my_id_rsa username@hostname

以爲麻煩能夠配置客戶端的 /etc/ssh/ssh_config

# 其實默認 id_rsa 已經加入私鑰路徑了,這裏只是示範
IdentityFile ~/.ssh/id_rsa
# 若是有其餘的私鑰,再加入其餘私鑰的路徑
IdentityFile ~/.ssh/my_id_rsa

你也可使用 SSH Agent,下面以使用 GitHub 爲場景簡單介紹。

# 建立證書
$ ssh-keygen -t rsa -C 'second@mail.com'
# 將證書加入 SSH Agent 緩存
$ ssh-add ~/.ssh/id_rsa_second

建立 ~/.ssh/config

# default github user(first@mail.com)
Host github.com
HostName github.com
User git
IdentityFile C:/Users/username/.ssh/id_rsa

# second user(second@mail.com)
Host github-second
HostName github.com
User git
IdentityFile C:/Users/username/.ssh/id_rsa_second

配置完成後,在鏈接非默認帳號的倉庫時,遠端地址要修改成:

git remote add test git@github-second:second/test.git
# 原來是 git@github.com:second/test.git
# git 根據配置的 user.email 來獲取 github 賬號來顯示 author 信息,記得將 user.email 改成相應的 email 如例中的 second@mail.com。
相關文章
相關標籤/搜索