2020年1月6日 星期一

如何使用金鑰驗證的方式登入SSH

情境
client -> ssh登入 -> server

首先要再client端上建立ssh金鑰(私鑰+公鑰 一對)
然後再把建立好的ssh公開金鑰丟到server端



#---------------------------------------------------------------------------------------------------------
在client建立金鑰之前,先確認home目錄底下有沒有 .ssh 這個隱藏目錄,並權限通常是0600
並且確認~/.ssh底下有沒有id_rsa跟id_rsa.pub檔案

如果沒有可以用以下指令建立.ssh資料夾
mkdir -p ~/.ssh
chmod 700 ~/.ssh

如果有的話,表示先前已經建立過金鑰了,可以省略ssh-keygen這個步驟,直接把id_rsa.pub上傳到要登入的server上

#---------------------------------------------------------------------------------------------------------
使用 ssh-keygen 指令產生金鑰:
ssh-keygen

ssh-keygen過程中,會詢問一些問題,對於一般的使用者而言,全部都使用預設值(直接按下 Enter 鍵)即可。

首先指定金鑰儲存的位置,使用預設值,直接按下 Enter 鍵。
Generating public/private rsa key pair.
Enter file in which to save the key (/home/seal/.ssh/id_rsa):

指定金鑰保護密碼,如果有設定密碼的話,以後每次使用都要輸入密碼,直接按下 Enter 鍵即可。
Enter passphrase (empty for no passphrase):

再次輸入密碼,直接按下 Enter 鍵,接著就會產生一對金鑰了。
Enter same passphrase again:

完成之後再~/.ssh底下就會看到一對金鑰
id_rsa.pub:公開金鑰(public key),這是可以對外公開的金鑰,之後要將它放在遠端的 Linux 伺服器上作認證使用。
id_rsa:私密金鑰(private key),這是要保護好的金鑰,它等同於你的 Linux 密碼,放在自己的電腦中。

#---------------------------------------------------------------------------------------------------------
接著可以用以下三種方式將id_rsa.pub(公開金鑰public key),複製到遠端server主機上的~/.ssh/authorized_keys
同樣的也是要先確認遠端server上,home目錄底下是不是也有.ssh 這個隱藏目錄,並且底下要有authorized_keys這個檔案

建議使用第二種方式

第一種方式:
ssh USER@HOST 'mkdir -p ~/.ssh;cat >> ~/.ssh/authorized_keys' < ~/.ssh/id_rsa.pub

第二種方式:
ssh-copy-id USER@HOST
使用 -i 參數,可以指定金鑰
ssh-copy-id -i ~/.ssh/id_rsa.pub USER@HOST

第三種方式:
把id_rsa.pub內容複製起來,然後登入到遠端server後,貼在~/.ssh/authorized_keys底下
[root@localhost .ssh]# cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrEw9Zxvie+Uevw8rGArAYNuPF4GwwiHZ1m66XAAzp+jS09ATU/mlTUg91zJc8cSX8JwfJcBLCiY+hSuN/8rxQejLgXB9DFVJatz1/mOQs5QWGfgLUq4ml3hxhiBJxyE7k6r9yjrvf1cd9HS64CnpzENdcoR18gnlJdr+5xTm5nQyxlh7zv6Iel1ckU5I5vi/JuTYawKwVCTygSbXmnM7RR9VMHcca/n1HMS63c5xleylDl1XhjUQXahB3Xnd9YORlbTjYHPi6Dl9ZUpbuMefCPyoTI9aRVcFykxPUjLHsVFdUGo9fYLiLMWvjubMw9fjwDHomWNP2WJ6av9sy/Vjp root@localhost.localdomain

#---------------------------------------------------------------------------------------------------------
之後使用 ssh 帳號@主機 登入就可以不用輸入密碼了