使用linux有一段時間了,最近在伺服器上假設了一個git倉庫,每次提交時都使用密碼實在是比較反人類,因此就特意研究了一下如何使用ssh金鑰來登入伺服器。

公鑰和私鑰的生成

ssh-keygen命令專門是用來生成金鑰的。該命令有很多選項,這裡列出了最基本的四個:

  • -t 用來指定金鑰型別(dsa | ecdsa | ed25519 | rsa | rsa1);

  • -P 用來指定密語

  • -f 用來指定生成的金鑰檔名

  • -C 用來添加註釋

ssh-keygen -t rsa -P 123456 -f host -C 'my host key'意思就是新建了密語為123456註釋為my host key檔名為host的金鑰。此命令會生成hosthost.pub兩個檔案,前者為私鑰檔案,後者為公鑰檔案。如果你想免密登入的話,請將密語設定為空。

將公鑰部署到伺服器

上一步生成了公鑰和私鑰後,需要將公鑰部署到伺服器並用私鑰登入。因此首先需要將建立的公鑰上傳到伺服器。使用scp或者你的工具將公鑰上傳到伺服器並將檔案內容追加到~/.ssh/authorized_keys中。例如:

#在本機上執行此命令,上傳公鑰
scp -P your_port host.pub [email protected]:/tmp
#在伺服器上執行此命令,追加到authorized_keys
cd /tmp && cat host.pub >> ~/.ssh/authorized_keys
#更改許可權
chmod 600 ~/.ssh/authorized_keys

更改伺服器配置

開啟/etc/ssd/sshd_config檔案,將如下的配置開啟:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

重啟sshdservice sshd restart或者systemctl restart sshd.service。重啟之後,伺服器已經支援遠端ssh連線了

連線伺服器

本人是通過ssh命令來遠端連線伺服器的,通過ssh -p your_port [email protected] -i your_private_certification命令,就可以連線到伺服器了。如果你是通過xshell或者putty來連線的話,匯入你的私鑰並連線就可以了。

其他

如果你想只允許伺服器通過公鑰和私鑰的方式來連線伺服器的話,可以將伺服器配置檔案/etc/ssh/sshd_config中的PasswordAuthentication yes改為PasswordAuthentication No,不過在重啟sshd時不要關閉當前的連線,確認通過私鑰能連線到伺服器才可以關閉。否則,一旦私鑰連不上,密碼連線方式又被禁用了,恐怕你就要告別你的伺服器了。

.