How to setup SSH config :使用 SSH 設定檔簡化指令與連線網址

awonwon
浦島太郎的水族缸
3 min readFeb 27, 2017

以前用 win 7 的時候要 clone git repository,不知怎麼著吃不到 id_rsa 以外的 key,索性用 SSH config 設定 alias 解決這件事,設定也非常簡單,試用了 config 後筆者認為好處有這些:

  • SSH 連線抓不到 id_rsa 以外的 key
  • 懶得每次都要加上 pem 檔路徑
  • 不想讓 SSH指令上顯示 pem 檔路徑,譬如像跑 CI 測試時,大家都可以看到 repo 上的 test 動作與指令,用 alias 取代 pem 檔的路徑
  • git repository 的 host 有可能變動
  • 有兩個以上不同 email 的 SSH key 需要管理

那就開始設定 step by step 吧!

第一步

首先,在 ~/.ssh 下新增 config 檔案,不需任何副檔名

第二步

在新增的檔案裡加上你的第一個 SSH config

Host alias-name                      # 用來連線的 alias 名稱
HostName server.name # host domain 或 ip
Port port-number # host 的 SSH port
IdentitiesOnly yes # 使用指定的 key
IdentityFile ~/.ssh/private_ssh_file # 指定 pem 或 pub 的 key 路徑
User username-on-remote-machine # (選填)登入 SSH 的 username,
# 只連 git 的話,可以不必要
ForwardX11 yes # (選填) 啟用回傳 GUI

譬如真正 config 像這樣:

Host gitlab
Hostname www.awonwon.com
IdentityFile ~/.ssh/gitlab
IdentitiesOnly yes
Port 22
User git
ForwardX11 yes

第三步

開始使用 alias 來 SSH 連線

使用範例(alias-name 跟 user-name 自行代入唷):

  • 基本 SSH 連線
$ ssh alias-name
  • SSH 連線再附加其他指令
$ ssh alias-name mkdir wahaha
  • scp 指定 SSH name
$ scp -r ./ alias-name:/var/www/html/project/
  • git clone repositroy 時,使用 alias ssh url,git url 有兩種表示法,而如果 config 有設定 user 就不用加上 user-name,下面一併附上不加 user 的寫法
第一種含 ssh protocol
$ git clone ssh://alias-name/project.git
$ git clone ssh://user-name@alias-name/project.git
第二種(推薦,較簡潔)
$ git clone alias-name:project.git
$ git clone user-name@alias-name:project.git

如果出現以下錯誤訊息:

Bad owner or permissions on /home/user/.ssh/config

請將 config 檔案設置比較小的權限:

$ chmod 600 config

剩下的就交由讀者自由發揮囉!

因為我用的設定不多,有需要可以參考 man page 更多的設定:
https://linux.die.net/man/5/ssh_config

噢,天啊!我真的達成一個月一篇文章了(雖然現在也才第二個月),希望繼續保持啊哈哈~~

--

--