如果你管理一台Linux伺服器,那麼你就會知道每次SSH登入時或是使用scp複製檔案時都要輸入密碼是一個多麼繁瑣的過程.這篇教學介紹使用SSH Key來實現SSH無密碼登錄,而且使用scp複製檔案時也不需要再輸入密碼.除了方便SSH登錄,scp複製檔案外,SSH無密碼登入也為Linux伺服器增加了又一道安全防線.
SSH無密碼登入的設定步驟
- 首先我們在自己的Linux系統上產生一對SSH Key:SSH金鑰與SSH公鑰.密鑰保存在自己的Linux系統上。
- 然後公鑰上傳到Linux伺服器.之後我們就能無密碼SSH登入了. SSH金鑰就好比是你的身分證明.
1在自己的Linux系統上產生SSH金鑰和公鑰
打開終端,使用下面的ssh-keygen來產生RSA金鑰和公鑰. -t表示type,就是說要產生RSA加密的鑰匙.
ssh-keygen -t rsa
RSA也是預設的加密類型.所以你也可以只輸入ssh-keygen.預設的RSA長度是2048位元.如果你非常注重安全,那麼可以指定4096位的長度.
ssh-keygen -b 4096 -t rsa
產生SSH Key的過程中會要求你指定一個檔案來儲存金鑰,按Enter鍵使用預設的檔案就行了.然後需要輸入一個密碼來加密你的SSH Key.密碼至少要20位長度. SSH金鑰會保存在home目錄下的.ssh/id_rsa檔案中. SSH公鑰保存在.ssh/id_rsa.pub檔案中.
Generating public/private rsa key pair. Enter file in which to save the key (/home/matrix/.ssh/id_rsa): 按Enter键 Enter passphrase (empty for no passphrase): 输入一个密码 Enter same passphrase again: 再次输入密码 Your identification has been saved in /home/matrix/.ssh/id_rsa. Your public key has been saved in /home/matrix/.ssh/id_rsa.pub. The key fingerprint is: e1:dc:ab:ae:b6:19:b0:19:74:d5:fe:57:3f:32:b4:d0 matrix@vivid The key's randomart image is: +---[RSA 4096]----+ | .. | | . . | | . . .. . | | . . o o.. E .| | o S ..o ...| | = ..+...| | o . . .o .| | .o . | | .++o | +-----------------+
查看.ssh/id_rsa檔案就會看到,這個檔案是經過加密的(encrypted).也就是用你輸入的密碼來加密.
less .ssh/id_rsa
2將SSH公鑰上傳到Linux伺服器
可以使用ssh-copy-id指令來完成.
ssh-copy-id username@remote-server
輸入遠端使用者的密碼後,SSH公鑰就會自動上傳了. SSH公鑰保存在遠端Linux伺服器的.ssh/authorized_keys檔案中.
上傳完成後,SSH登入就不需要再輸入密碼了.但是首次使用SSH Key登入時需要輸入一次SSH密鑰的加密密碼. (只需要輸入一次,將來會自動登錄,不再需要輸入金鑰的密碼.)
使用scp指令來傳送檔案時也不需要輸入密碼.
SSH Key的知識
Linux系統有一個鑰匙圈(keyring)的管理程式.鑰匙圈受到使用者登入密碼的保護.當你登入Linux系統時,會自動解開鑰匙圈的密碼,從而可存取鑰匙圈. SSH金鑰的密碼也可儲存在鑰匙圈.所以初次使用SSH密鑰登入遠端Linux伺服器時需要輸入一次SSH密鑰的密碼.而將來使用SSH密鑰登入時不再輸入密碼. Ubuntu的鑰匙圈程式是seahorse.
SSH金鑰就好比是你的身分證明.遠端Linux伺服器用你產生的SSH公鑰來加密一則訊息,而只有你的SSH金鑰可以解開這則訊息.所以其他人如果沒有你的SSH金鑰,是無法解開加密訊息的,從而也就無法登入你的Linux伺服器.
SSH無密碼登入的設定就是這麼簡單。