設置 SSH Key 登錄服務器
通過 ssh 登錄服務器,一直都是用的賬號和密碼,今天看到一篇文章說這樣不安全,使用 ssh key 的方式登錄則是更好的選擇,因此,研究實踐了一下,並記錄在這里。
Ssh key 的基本原理是這樣的:在你的本機上創建兩個Key文件,一個是私鑰,一個是公鑰,私鑰放在本地,公鑰放在遠程服務器。當你通過ssh key登錄到遠程服務器時,遠程服務器使用公鑰創建了一個加密的隨機消息,然后發送到本地機器,本地機器使用私鑰解密消息,發送解密的消息到遠程服務器。遠程服務器驗證這個解密后的消息,然后授權訪問。實際過程比這個復雜,但我們這里理解大概就可以了。
使用下面的命令創建Key文件:
ssh-keygen
按照界面上的提示操作,最終生成了兩個文件:~/.ssh/id_rsa.pub
(公鑰) 和 ~/.ssh/id_rsa
(私鑰)。私鑰文件放在本地機器,並且要保密,不能讓別人知道。公鑰要復制一份放到遠程服務器上面。
我們使用scp命令來復制公鑰文件到服務器:
scp ~/.ssh/id_rsa.pub <your username>@<your servername/ip>:
'''注意:末尾有一個:冒號!'''這個命令把公鑰文件上傳到了服務器
下一步,使用該用戶名登錄服務器,檢查 ~/.ssh
目錄是否存在,不存在則創建之:
mkdir ~/.ssh
下一步,創建 ~/.ssh/authorized_keys
文件:
touch ~/.ssh/autorized_keys
這個文件將包含一系列允許登錄本機的公鑰。
然后將公鑰的內容加到 ~/.ssh/authorized_keys
文件中:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
最后,我們修改相關目錄的權限,只允許
chown -R feiffy:feiffy ~/.ssh
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
大功告成,現在可以直接 ssh 登錄遠程服務器,而不需要輸入密碼了。
另外,使用 scp 命令傳輸文件到遠程服務器也不需要密碼了。
設置 SSH Key 登錄 Git 服務器
有了上面的操作基礎之后,就會發現,設置 SSH Key 登錄 Git 服務器其實原理是一樣。
這里先講我個人的 Git 遠程庫的設置,這與 Github 有所不同。
我自己的遠程服務器上面的 Git 倉庫是用 git init --bare
命令建立的,是這樣建立的:
# 登錄遠程服務器
cd /home/git
mkdir repo.git
cd repo.git
git init --bare
可以看到我使用的是 Git 用戶創建的遠程倉庫,在本機上克隆該倉庫只需運行下列命令即可
git clone git@example.com/repo.git
然后需要輸入Git用戶的密碼。現在的目的是設置使用 ssh key 登錄,而不需要輸入密碼。
既然原理與上一篇中的一樣,那就不贅述了,為了方便這里直接使用上面生成的兩個Key文件:id_rsa,id_rsa.pub,把公鑰id_rsa.pub復制到遠程服務器的 /home/git/ 目錄下面,注意與上文的區別只是不同用戶名的區別,其他操作都是一樣的。
然后本地連接使用下面的命令,就不需要密碼了。
git clone ssh://git@example.com/home/git/repo.git
PS - 個人博客原文:設置 SSH Key 登錄服務器和 Git 服務器
參考:
- 《Modern PHP》 7.Procisioning - Server Setup - SSH Key-Pair Autherntication
- Git on the Server - The Protocols
- 2 Simple Steps to Set up Passwordless SSH Login on Ubuntu