引言 程式員或者伺服器運維人員在日常工作中,經常會遇到很多台伺服器需要管理的情況,如果伺服器多了,一般的做法都是通過一個ssh客戶端工具來管理,例如:securityCRT、Xshell、putty等遠程工具,這類工具有兩個特點:1.可以將伺服器存儲成一個列表,配置一次伺服器信息之後,下次直接雙擊就 ...
引言
------------------
程式員或者伺服器運維人員在日常工作中,經常會遇到很多台伺服器需要管理的情況,如果伺服器多了,一般的做法都是通過一個ssh客戶端工具來管理,例如:securityCRT、Xshell、putty等遠程工具,這類工具有兩個特點:
1.可以將伺服器存儲成一個列表,配置一次伺服器信息之後,下次直接雙擊就可以使用;
2.可以保存賬號密碼,埠,ip地址等信息,備註一個簡單易記的名字之後,還可以分組管理,實現多台機器的管理;
那麼對於linux的使用者或者沒有工具的人員,如何使用系統自帶的ssh客戶端去實現和遠程伺服器的免密碼登陸呢?本文基於Ubuntu18.04系統,自帶的命令行ssh客戶端測試通過。
一、什麼是SSH?
------------------
簡單說,SSH是一種網路協議,用於電腦之間的加密登錄。
如果一個用戶從本地電腦,使用SSH協議登錄另一臺遠程電腦,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。
最早的時候,互聯網通信都是明文通信,一旦被截獲,內容就暴露無疑。1995年,芬蘭學者Tatu Ylonen設計了SSH協議,將登錄信息全部加密,成為互聯網安全的一個基本解決方案,迅速在全世界獲得推廣,目前已經成為Linux系統的標準配置。
需要指出的是,SSH只是一種協議,存在多種實現,既有商業實現,也有開源實現。本文針對的實現是OpenSSH,它是自由軟體,應用非常廣泛。
二、SSH應用的場景
------------------
常見的SSH應用場景有:
1. Git、SVN等CVS(版本控制系統,System Version System)的身份認證,都需要本機生成ssh密鑰對,然後和代碼倉庫進行交換鑒權;
2. 遠程連接伺服器的時候,需要通過ssh客戶端和遠程伺服器互認;
3. 其他需要電腦之間互相認可時候的場景
三、如何通過ssh keys實現免驗證登陸遠程伺服器(基於Ubuntu18.04)
-----------------
1. 檢查自己本地是否已經生成了ssh的密鑰對,在~/.ssh下有對應的id_rsa(密鑰)、id_rsa.pub(公鑰)文件,如果沒有,可以通過命令
ssh-keygen
生成,直接回車即可,預設生成在 /home/<username>/.ssh 目錄下
確認.ssh存在並且存在公鑰、密鑰之後進行下一步操作;
2. ssh-copy-id是一個ssh公鑰拷貝工具,在很多系統多都有預裝,通過命令
ssh-copy-id <username>@<remote_host>
輸入密碼之後,會提示 # Are you sure you want to continue connecting (yes/no)? # 鍵入yes回車即可,這裡的操作是將ssh的公鑰複製到遠程伺服器的可信名單中,下次通過該認證名單即可免驗證登陸伺服器。ssh-copy-id的預設連接埠是22,如果是其他的埠,可以使用命令
ssh-copy-id -p <port> <username>@<remote_host>
配置。
3. 如果配置完成,通過ssh連接登陸命令
ssh [-p <port>] <username>@<remote_host>
即可實現免驗證登陸遠程伺服器;
4. 如果希望遠程伺服器只能通過ssh密鑰認證登陸,那麼可以關閉遠程伺服器的密碼登陸功能:
I. 登陸遠程伺服器:
ssh [-p <port>] <username>@<remote_host>
II. 編輯ssh服務端配置文件
vim /etc/ssh/sshd_config
III. 搜索修改 PasswordAuthentication <config> ===> PasswordAuthentication no
IV. 重新啟動ssh服務端程式
V. 即可禁止通過ssh密碼遠程登陸遠程伺服器
註:第2步可以通過手動將本機的公鑰複製到遠程伺服器的認證密鑰文件中實現相同功能,操作如下:
cat ~/.ssh/id_rsa.pub | ssh [-p <port>] <username>@<remote_host> "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
該命令主要是將本機的ssh公鑰複製到遠程伺服器的用戶目錄下的.ssh/authorized_keys,實現遠程伺服器對各個客戶端的辨別感知能力