你可以在本機端產生金鑰, 然後將公鑰 (public key) 上傳到 server.
或者也可倒著做, 在 server 產生金鑰, 將私鑰 (private key) 下載下來, 並刪掉 server 上的私鑰.
下面是在本機產生金鑰. 在主機產生金鑰請自行腦補.
先在本機端使用 ssh-keygen
指令建立金鑰 (open-ssh
套件, win10 裡應該有):
ssh-keygen
請依照指令提示輸入要建立的金鑰檔名 (ssh-keygen
會將金鑰建立在當前目前目錄下. 或直接按 Enter 也行, 檔名及位置則如提示):
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\user001/.ssh/id_rsa):
輸入保護私鑰用的密碼, 直接按 Enter 表示私鑰檔不加密.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
完成建立出現的訊息:
Your identification has been saved in svr_xxx.
Your public key has been saved in svr_xxx.pub.
The key fingerprint is:
SHA256:3UJS9bgwPVqoIsRajmRUTcL6YOWFmapzJvDDR/JAcow user001@myWin10
The key's randomart image is:
+---[RSA 2048]----+
| o.oo*. ... |
|E.+.*.o . o o |
| +o=+. . = = . |
|.oB*o = * o |
|.=oBo . S + o |
|+ * +. . . |
| = o |
| |
| |
+----[SHA256]-----+
此時會產生二個檔案, 一個公鑰 ("svr_xxx.pub"
) 另一個是私鑰 ("svr_xxx"
), 如果輸入的檔名是 svr_xxx
.
可以使用下列指令一氣呵成: 登入 linux 主機, 並將自己的公鑰上傳到主機上的正確位置上. (請將 svr_xxx.pub
, host_name
以及 user_name
改成自己的公鑰檔名, linux 主機名稱 (或者是 ip) 及登入的帳號):
cat svr_xxx.pub | ssh user_name@host_name "mkdir ~/.ssh && cat >> ~/.ssh/authorized_keys"
第一次設定也可以用 scp
指令, (上面的作法用於 authorized_keys
裡已經有其他內容了, 使用 scp
指令會把原有的內容覆蓋掉了)
scp svr_xxx.pub user_name@host_name:~/.ssh/authorized_keys
確認遠端 linux 主機的 sshd 設定:
$ sudo vi /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
sshd
. 等確定可以用私鑰連線之後再進行.sshd_config
的設定, 就不需要重啟 sshd
.我們甚至也可以設定關閉密碼認證登入, 只允許金鑰認證
PasswordAuthentication no
PubkeyAuthentication yes
上面關閉密碼認證登入的動作請在確認可以用私鑰成功登入主機之後再進行.
設定修改完成之後, 重啟 sshd.
$ sudo sysemctl restart sshd
$ sudo sysemctl restart ssh
ssh 連線時指定私鑰檔.
ssh -i "svr_xxx" user_name@host_name
此時應該可以不必輸入密碼就直接連上主機.
連線測試成功之後, 可修改家目錄下的 .ssh/config
將使用私鑰的設定加到設定裡.
Host 192.168.33.10
User user_name
IdentityFile ".ssh/private_key/svr_xxx"
Host host_name
HostName 192.168.33.10
User user_name
IdentityFile ".ssh/private_key/svr_xxx"
.ssh/config
檔裡面是遠端主機的相關設定, 如: ip 地址, 使用哪一個帳號…等等
Host
: 輸入的是我們在 ssh
指令輸入的主機代號 (不一定是主機域名, ip 也可以, 甚至同一部主機我們需要以不同的帳號連進去時, 也可以自己取一個代號)User
: 則指定連線這部主機時用什麼用戶帳號Port
: 指定這部主機的 SSH port 號碼.HostName
: 則是輸入 DNS 域名, 或者直接輸入 ip 地址 (如果沒有 DNS 可以幫你 name 轉 ip 時. 例如: 區域網路 (LAN) 中的主機或者自己肚子裡的 VM).IdentityFile
: 指定私鑰檔 (private key) 的位置.設定二組代號是方便我們用主機名字 (host_name) 或 ip address (192.168.33.10) 都可以自動使用私鑰
使用 putty
或者其他軟體 mobaXterm
都有類似的設定, 請自行類推.
ssh
, private key
, ssh server settings
, ssh 主機設定
, 使用私鑰連線 ssh