今天要來簡短介紹一下 SSH 日常的使用情境,
說一些個人經驗
在學校和公司都有 Linux cluster 的機器,
偶爾都會有需要使用別人帳號的需求 網管最討厭這種人,出事很難釐清責任
但有時候你需要做一些 quota 綁帳號的事,
或是你跟同事需要 share 某個特權帳號來做事,
這時候你就不只需要能開該帳號的家目錄,
還需要就是該家目錄的 owner
扯遠了,
往往這時候你的同學或同事就會說,
某某帳號的密碼幾號,
你就用那個密碼登入就好
這時候我就會很好奇,
你交換 public key 不好嗎…
不然對方還要告訴我他的密碼我也是很尷尬
進入正題,
其實使用 SSH key 就兩個重點
~/.ssh/
-> 這個 dir 權限要開 0700、~/.ssh/config
-> 這個 config file 權限要開 0600這一步應該大部分的觀眾都很熟,
我自己是常用 -t -b -C
這三個參數,
分別代表 加密要用的算法、bit 數(越長越安全)與該 key pair 的註解
例如
$ ssh-kegen -t rsa -b 4096 -C "yourname@gmail.com"
不失一般性,我們假設你的 private key 存檔的位置是 ~/.ssh/mykey_rsa
public key 存檔的位置在 ~/.ssh/mykey_rsa.pub
一種方法是使用指令 + 密碼做第一次登入
$ ssh-copy-id -i ~/.ssh/mykey_rsa.pub youraccount@remote.server
你也可以登入遠端機器,直接 copy paste public key,
這種場景適用在你幫別人加登入權限,
直接登入遠端機器,
把 public key 寫在要登入帳號的家目錄下 ~/.ssh/authorized_keys
我們先手動測一下,
$ ssh youraccount@remote.server -i ~/.ssh/mykey_rsa
我自己是很討厭用 ssh-add
這種指令把 private key 加入 key pool,
當你換一個 session 就不能 work 了,
所以一律建議把設定寫入 ~/.ssh/config
範例:
Host <這邊填到時候你 ssh xxx@domain.name 時要用到的 domain.name>
Hostname <這邊填 IP 還是 DNS server 可以解析的實際域名>
User <這邊填你要登入的家目錄 owner 的 account name,如果是連到 git server,這邊填 git>
IdentityFile ~/.ssh/mykey_rsa
有的人會加一行 StrictHostKeyChecking no
,
不然在使用 Ansible 連到新的機器時,
有時候會因為跳出 new host key checking 的 error ,
導致 playbook 噴錯…
不過這邊我個人是建議 ~/.ssh/config
設好之後,
自動手動連一遍,確認 host key 都有經過人眼驗證過,
在我們往後開機器的時候,
我會預設讀者已經可以透過這篇教學把相關機器的連線都設定好,
也就是說我不需要密碼,
就可以在各個機器之間跳轉