ssh 提供兩種級別的安全認證:git
知道用戶名和密碼便可登陸。鏈接是加密的,但客戶端不能確認目標主機是否爲「僞造的」,也不能保證口令安全。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
$ vim /etc/ssh/sshd_config # 是否容許root帳戶遠程登陸,爲了安全可關閉 PermitRootLogin no # 是否檢查用戶的文件系統權限,避免因目錄、文件的權限配置錯誤可能引發信息泄露 StrictModes no # 是否容許使用證書登陸,受權文件路徑 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys # 是否容許使用口令登陸,爲了安全可關閉 PasswordAuthentication no
默認會在每次使用私鑰時請求該口令,你也能夠將其加入本地密碼庫:
$ 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。