我在 Google Cloud 和 Amazon 上都有生产机器。在这两个云上,我在每个云上都有一个称为监控的公共服务器,它有公共 IP。通过这些监控机器,我可以访问各自云上的所有机器。然而,问题是我必须像ssh -i abc.pem user@<ip address>
我希望的那样访问它们,就像ssh -i abc.pem user@<machine name>
如何实现这一点?
答案1
DNS。
轻松插入您组织的 DNSmonitoring.gcp.example.net
和monitoring.aws.example.net
答案2
如果您的解决方案必须扩展到一群需要方便访问您的云实例的人,那么@JohnMahowald 的答案就是正确的。
但如果只有你一个人,和/或你无法让你的 DNS 管理员配合你的请求,那么你可以探索其他途径。
如果您只需要方便的 ssh 访问,那么您的~/.ssh/config
文件就是您的朋友。
$ cat << EOF >> ~/.ssh/config
Host machine_name
Hostname ip.addr.of.machine
User remote_username
IdentityFile ~/.ssh/abc.pem
EOF
在您的~/.ssh/config
文件中使用该节时,当您发出命令时:
$ ssh machine_name
ssh
将使用给定的 IP 地址ip.addr.of.machine
和远程用户名remote_username
连接到该主机。
您的/etc/hosts
文件还可以替代实际的 DNS 条目,例如,如果您要查询该地址的网页或 SNMP 代理。但同样,这可能仅在极少数人需要方便的访问时才有效。
如果您只需要 ssh 访问,那么该.ssh/config
解决方案是高度可配置的。即使您做为您的主机提供一个 DNS 条目,您仍然可以在行中使用更短、更易于输入的昵称Host
,并将 DNS 名称放在Hostname
行中。
Host gcp
Hostname monitoring.gcp.example.net
User gcp_username
IdentityFile ~/.ssh/abc.pem
Host aws
Hostname monitoring.aws.example.net
User aws_username
IdentityFile ~/.ssh/abc.pem
通过这些config
条目您可以:
$ ssh gcp
或者
$ ssh aws
登录任一实例,使用每个实例的正确用户名,而不必记住使用哪个身份密钥。