使用各种 AWS 账户保存 SSH 的代理设置

使用各种 AWS 账户保存 SSH 的代理设置

我跨多个 Amazon 账户管理 EC2 实例(虚拟机)。这些机器不一定有域名;通常我通过 IP 地址连接到它们。

每个 AWS 账户都有自己的堡垒服务器,我通过它进行连接。这很烦人,因为当我连接到计算机时,我必须在命令行上指定 SSH 隧道的设置。如果机器有域名,我只需在我的~/.ssh/config文件中配置隧道即可。相反,我必须这样做 - 并且代理 IP 地址会根据我正在使用的 AWS 账户而变化:

ssh -o ProxyCommand="ssh -W %h:%p [email protected]" [email protected]

有没有一种好的方法来配置 SSH,这样我就不需要指定代理命令(也许还有用户名)?我很乐意使用另一种解决方案,例如 bash 别名,如果这更有意义的话。

答案1

这正是您所需要~/.ssh/config的。目前尚不清楚你有什么问题,但类似

Host proxy1
  Hostname 1.2.3.4
  User ubuntu

Host target1
  Hostname 172.17.1.2
  ProxyCommand ssh -W %h:%p proxy1
  User ubuntu

然后仅使用 进行连接ssh target1。当然,您可以使用单个代理匹配更多目标,定义不同的别名或使用通配符 ( Host 172.17.1.*) 来匹配整个 IP 块。

答案2

就像前面提到的 .bashrc 选项一样。对于不同的东西:


修改您的主机文件以包含您想要的友好名称。

sudo vi /etc/hosts

创建几个不同的文本文件,其中包含 ssh 脚本。
创建了一个文本文件

sudo echo "ssh -o ProxyCommand=\"ssh -W %h:%p [email protected]\" " > your-ssh-file

使其可执行
sudo chmod +x your-ssh-file

使用以下命令执行您创建的文件夹中的文件:
./your-ssh-file

答案3

我已将这些别名添加到我的.bashrc文件中:

alias ssh-foo='ssh -o ProxyCommand="ssh -W %h:%p -l ubuntu <FOO_BASTION_IP>" -l ubuntu'
alias ssh-bar='ssh -o ProxyCommand="ssh -W %h:%p -l ubuntu <BAR_BASTION_IP>" -l ubuntu'

现在连接命令非常简单:

ssh-foo <FOO_INSTANCE_IP>

的别名scp类似,但需要以不同的方式给出用户名:

alias scp-bar='scp -o ProxyCommand="ssh -W %h:%p -l ubuntu <BAR_BASTION_IP>" -o User=ubuntu'

相关内容