產生 key-pair
$ ssh-keygenGenerating public/private rsa key pair.
Enter file in which to save the key (/home/<my_home>/.ssh/id_rsa): <= 按enter
Enter passphrase (empty for no passphrase): <= 按enter
Enter same passphrase again: <= 按enter
Your identification has been saved in /home/<my_home>/.ssh/id_rsa.
Your public key has been saved in /home/<my_home>/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:hRybtdk8kAYPTGWRA6lz9lW/uWhM+Vzzex939UJgp64 cykuo@ubuntu
The key's randomart image is:
+---[RSA 2048]----+
| s-x-f |
| .kk.* . |
| .=.=.d.f. |
| = =. ..* .|
| +R. s. . -|
| ---** * -+|
| --++ * = +.+|
| s =*. *==+|
| E - ++|
+----[SHA256]-----+
※ 此動作將在家目錄的 .ssh 目錄底下(即~/.ssh)產生兩個檔:
| 私鑰(private key): | id_rsa | 
| 公鑰(public key): | id_rsa.pub | 
當然是私鑰保存在己方,公鑰丟到你想要連線的地方進行註冊囉!
要產生更高位元的 key,並加入註解,指令如下:
ssh-keygen -t rsa -b 4096 -C "my workstation"
使用 putty 產生私鑰
若要在 Windows 使用 SSH 登入,常常使用 putty。要免密碼登入比較麻煩,需要用 puttygen 先產生私鑰,然後轉換成 OpenSSH 格式的檔案(轉換時使用force new file format,這裡假設產生的檔名為 id_rsa.putty),然後將這個檔案 傳上 Linux 機器,再以下列指令進行轉換:
ssh-keygen -e -f id_rsa.putty > id_rsa_com.pub
ssh-keygen -i -f id_rsa_com.pub > id_rsa.pub
然後再以下面方式註冊即可。
註冊公鑰
複製公鑰檔案內容到對方的家目錄底下的 .ssh/authorized_keys,即完成註冊。例如:你要連線到 192.168.1.1 的 peer_account 帳號,即註冊到對方機器的 /home/peer_account/.ssh/authorized_keys ;若是要連線到 root 帳號,就註冊到 /root/.ssh/authorized_keys。
通常我使用 scp 將 id_rsa.pub ,然後在對方機器下以下的指令以完成註冊。
cat id_rsa.pub >> ~/.ssh/authorized_keys
通常 id_rsa.pub 與 authorized_keys 長的像這樣:
ssh-rsa AAAAB3NzsC1yc2EAGFFGFGDFGDFFJAC4idfDIh714g7GCssas4gpt714kgJ0wgIDIBBijY592BSasda4XSDaafFasQg0/yvjQSEnKKFq+sVQutpFX9dHI2HadadasdSDAsdasAaFAqTMgo1n+sObhIgSqOZSyASDAZasdaDASDASDAxasdTna+S4SDASD6tyuhfgaASDASDKasaasdasdASDASDAasdASDsDASDADasdsASDasdASDasdAsdAssp42pXiqw9YbpOf1zNqpASDsdASDaSFfzdFASDfdfdsdsd2u+wHJ8CzuASDQN8/PzCCASDQdAsDAS/XB8asdasDASDSDAsdasdaSDyl9F/EM+hXgDDws4r <my_home>@<my_server>
當然在 authorized_keys 檔可能會有更多行像這個東東,特別是公用的機器,所以記住,不要蓋掉或毀損別人註冊的公鑰哦!
另外,可用簡單的 ssh-copy-id 指令,簡單完成以上動作,範例如下:
另外,可用簡單的 ssh-copy-id 指令,簡單完成以上動作,範例如下:
ssh-copy-id peer_account@192.168.1.1
安全設定
有時候你會發現以上步驟做完了還是無法免密碼登入,可以檢查下面的設定:
1、改變 .ssh 下面檔案的屬性設定:
  chmod 700 ~/.ssh
  chmod 600 ~/.ssh/authorized_keys
2、檢查 selinux, /etc/sshd_config。
2、檢查 selinux, /etc/sshd_config。
  這些情況我還沒遇上過,有遇到再來補充吧!
轉換 putty 所產生的 public keys
在 Windows 環境下可使用 puttygen.exe 產生 ssh key,分別存入 private(ppk檔)與 public key 檔之後,public 檔需要做轉換才能在匯入到 authorized_keys 中。指令如下,其中 my.pub 是 puttygen.exe 所存入的 public key 檔名(舉例)。
ssh-keygen -i -f my.pub > ~/.ssh/authorized_keys
轉換 putty 所產生的 private keys
在 Lunux 環境底下要轉換 puttygen.exe 產生ppk檔,有一點麻煩,還需要另外裝 putty-tools 才行,然後用下列的指令產生:
puttygen putty.ppk -O private-openssh -o id_rsa
注意!產生的檔案名稱要根據相關的演算法命名,上例是用 RSA 產生的私鑰,所以命名為 id_rsa,若命名為其他檔名有可能會出錯。