什么是SSH
SSH(Secure Shell)是一種提供網(wǎng)絡(luò)安全的傳輸協(xié)議。它保證了在網(wǎng)絡(luò)上的數(shù)據(jù)并非明文傳輸,目前使用SSH登錄遠程終端已經(jīng)是通用方式。
SSH登錄時有兩種驗證方式
- 基于密碼的安全驗證,它要求用戶在每次登錄服務(wù)器時輸入密碼,服務(wù)器端驗證通過后即登錄成功。
- 基于密鑰的安全驗證,客戶端的公鑰會預先保存在服務(wù)器端,當?shù)卿洉r,服務(wù)器端會使用該公鑰做驗證,如果驗證成功,用戶不需輸入密碼即完成登錄。
為了避免每次都輸入密碼這種重復性工作,我們選擇第二種方式進行遠程登錄。
基于密鑰登錄的配置步驟
- 在本地終端生成密鑰對。
ssh-keygen // 加密方式默認使用RSA,可以通過 “ssh-keygen -t 加密方式” 指定加密方式
生成過程中會詢問設(shè)置密鑰對的保存位置和打開密碼。按enter鍵使用默認設(shè)置即可。此時會在本地的"~/.ssh"目錄下生成名為id_rsa和id_rsa.pub的私鑰文件和公鑰文件。
- 將公鑰字符串copy到遠程服務(wù)器的"~/.ssh/authorized_keys"文件內(nèi)。
方法一:手動復制
// ssh登錄服務(wù)器之后,修改文件:
vi ~/.ssh/authorized_keys
// 將公鑰字符串拷貝到authorized_keys文件
// 如果.ssh目錄尚未建立,需要先創(chuàng)建并且添加權(quán)限
mkdir ~/.ssh
chmod 700 ~/.ssh
// 如果authorized_keys文件是新創(chuàng)建的,需增加讀寫權(quán)限
chmod 600 ~/.ssh/authorized_keys
方法二:通過命令復制(推薦)
ssh-copy-id user@host
- 驗證是否設(shè)置成功
ssh username@server-ip
此時應(yīng)該能夠跳過輸入密碼的提示,直接登錄到遠程終端。如果仍然需要輸入密碼,最有可能的原因是上面第三步文件權(quán)限配置的有問題。
配置服務(wù)器別名,使用別名代替ip地址
雖然經(jīng)過上面的配置,我們不用在每次登錄時都輸入密碼。當仍然需要我們輸入用戶名和服務(wù)器ip。有沒有可能把這一步驟也省略呢?答案是肯定的,通過配置服務(wù)器別名的方式,登錄時只需輸入別名即可。
- 打開~/.ssh/config文件,添加以下內(nèi)容:
Host server-alias # server-alias為SSH鏈接的服務(wù)器別名
HostName server-ip # 服務(wù)器地址
Port 22
User username # 服務(wù)器端用戶名
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa # 私鑰地址,默認為 ~/.ssh/id_rsa
- 驗證
以后即可通過以下命令登錄遠程服務(wù)器
ssh server-alias
如果登錄未成功,請仔細檢查每項的配置是否正確。
總結(jié)
經(jīng)過上述配置,有效的簡化了登錄操作,會為我們節(jié)省不少時間。更重要的是,所有底層使用SSH的程序,都因此而簡化了操作步驟。比如:
- 用于傳輸文件的scp和rsync命令。只需輸入:
scp file server-alias:/dir
- 如果服務(wù)器端上配置了git遠程倉庫,只需輸入:
git clone server-alias:/git-repo
你會發(fā)現(xiàn)除了使用簡易的別名代替了ip地址外,輸入密碼的步驟也被省略掉了!