AWS 建議用 ssh-agent forwarding 登入你的 EC2 instance

2017-06-19 AWS

OK,這篇之前想打打到忘記 …,剛好遇到有人問順手記下 ssh-agent 的用法。


首先先說 AWS 在文件中有明確的提到怎麼安全的登入你的 EC2 instance:「Securely Connect to Linux Instances Running in a Private Amazon VPC」,裡面提到要用 bastion 來鎖 source IP 以外,用來跳到 destination instance 就必須透過 ssh-agent 來跳


在這之前我看到一些人用了錯誤的方式來登入你的 instance:

  • 在 Macbook 用 private.key 丟到 bastion,再把 private key 放在 bastion 內用 ssh -i private.key 的方式登入 destination instance


這是錯誤的示範,ssh 的 private key 是非常機密的資訊,最多只保留在你的電腦內,不應該放在 bastion 主機內使用。


在這個狀況下可以使用 ssh-agent forwarding 來達成,ssh-agent forwarding 就是可以讓你從 “本地端” 的 private key 在 bastion 進行 forward,當你在 bastion 需要使用 ssh private key 的時候就不需要再用 -i 來指定 key。

Local —(SSH)—> Server1 —(SSH)—> Server2


ssh-agent 的用法

  • Linux and MacOS

一般會內建在有 ssh 的 OS 內,所以可以直接使用 ssh-agent


把你要用來登入的 private key 用 ssh-add 加入

$ ssh-add id_rsa


然後你可以用 -L 看到被加入的 key,但你只會看到被轉成的 public key

$ ssh-add -L


登入的方式有兩種,但我慣用 -A

-A Enables forwarding of the authentication agent connection. This can also be
specified on a per-host basis in a configuration file.

Agent forwarding should be enabled with caution. Users with the ability to
bypass file permissions on the remote host (for the agent’s UNIX-domain
socket) can access the local agent through the forwarded connection. An
attacker cannot obtain key material from the agent, however they can perform
operations on the keys that enable them to authenticate using the identities
loaded into the agent.

因為你連 -i 的參數都不用帶,直接用 -A 就可以登入,超方便

$ ssh -A user@server


或是寫在 .ssh/config 加上 ForwardAgent,但我覺得比較麻煩

$ vim ~/.ssh/config

Host server1
  ForwardAgent yes


  • Windows

以下圖片引用 AWS 官方

在 Windows 上你必須先用 puttygen 將 PEM 轉成 PPK 格式


然後用 pageant 加入 PPK key


putty 的 Auth 打勾 Allow agent forwarding


使用 ssh-agent 登入後,在 bastion 你可以直接執行 ssh user@server 就可以登入下一台 instance 了!!



給 Mr. 沙先生一點建議



展開全部 | 收合全部


訂閱 Mr. 沙先生 的文章

輸入你的 email 用於訂閱