SSH agent forwarding 教學

2016.11.13 Update: SSH Agent Forwarding 有安全性問題,請用 ProxyCommand 取代,請參考 SSH Agent Forwarding considered harmful Screen Shot 2016-10-05 at 9.26.13 AM SSH agent forwarding 可以讓開發者將 Local 端的 SSH Key Pair 帶到另外一台機器進行傳送,也就是說你不用將 SSH Key 複製到遠端 Server 再進行跳板動作,原本在 AWS 維護多台 EC2 主機,都會固定有一台跳板機,大家都把自己需要登入遠端機器的 SSH Key 複製到跳板機,這做法其實沒有很安全,又需要多下一個指令進行跳板。
個人電腦 —-> EC2 跳板機 —-> EC2 Server
大家都會把 Key Pair 存放到跳板機,安全性堪憂,只要這台主機被 Hack,或者是內部員工登入,拿別人的 Key Pair 登入其它主機,不就可以搞破壞?所以此篇教學主要教大家如何設定 SSH agent forwarding,讓憑證只存放在自己電腦,而不需上傳到 EC2 跳板機。這樣跳板機就真的只是跳板機,不需要存放任何憑證資料,每小時設定清空 Ubuntu User 家目錄,避免內部員工放個人資料或憑證,提升主機安全性。

將 Key Pair 放到清單

透過 ssh-add 指令將 Private Key Pair 加入清單
$ ssh-add ~/.ssh/keys/labs.pem
透過底下指令可以看到清單列表
$ ssh-add -L
這邊注意可以將所有機器的 key pair 都放到 ~/.ssh/keys 目錄,並且設定 400 權限

設定 ~/.ssh/config

方法一: 設定 ~/.ssh/config 檔案,每個 Host 都加上 ForwardAgent yes 參數 (此方法並不安全,請參考 SSH Agent Forwarding considered harmful)
Host aws
  HostName 10.130.xxx.xxx
  User ubuntu
  ServerAliveInterval 60
  ForwardAgent yes
  UseRoaming no
  IdentityFile ~/.ssh/keys/aws.pem
最後執行底下指令就可以直接跳到您要的 EC2 Server
$ ssh -t aws 'ssh example.inc'
方法二: 也是設定 ~/.ssh/config,但是透過 ProxyCommand 而不是 ForwardAgent yes (建議使用此方法)
Host hosta
  User userfoo
  Hostname 123.123.123.123

Host hostb
  User userbar
  Hostname 192.168.1.1
  Port 22
  ProxyCommand ssh -q -W %h:%p hosta
  IdentityFile ~/.ssh/keys/xxxx.pem
ProxyCommand 也不用將 pem 透過 ssh-add 匯入,省下一步指令,接著執行底下指令就可以 ssh 到指定機器,跟方法一比起來更安全又快速
$ ssh hostb
不用再跳板機多下一個 SSH 登入指令,蠻方便又安全。內部 Host Name 可以透過設定 AWS Private Hosted Zones
  • I’d suggest not to forward agent by default. Only when you need it and add -A in command.

  • appleboy48

    Yeah, You can add ForwardAgent yes setting on host section or add -A in command. Do the same thing for different approach.

  • Ting-Han Su

    將 Key Pair “方”到清單

  • m157q

    https://heipei.github.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/
    這篇 2015 年的文章提到用 SSH ForwardAgent 是有安全疑慮的,
    推薦使用 SSH ProxyCommand 會相對安全一些,
    裏面也有講到 ProxyCommand 的設定方法,供您參考一下。

    我是看到您的文章覺得寫的很不錯,
    分享出去後才被認識的人告知說 ForwardAgent 是有安全問題的,
    想說回覆告知一下。
    感謝您的文章 XD

  • appleboy48

    Fixed. Thanks.

  • appleboy48

    哈囉,感謝告知,我已經更新部分內文了,ProxyCommand 用起來更方便了 ^__^