我跨多个 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'