我在有多个位置的环境中工作,并且在每个位置我们有相同的IP寻址scheme,也就是说,我们有许多共享相同IP地址的机器(每个位置一个)(主机名不同)。 当然,这些地点之间没有沟通,也没有DNS。 我依次打开VPN隧道连接到每个位置。 我的工作站是Linux。
我正在努力开发一个系统,让我在这种环境下尽可能安全地工作。 我想直接使用主机名而不是IP地址,因为我们有一个易于记忆的命名约定。 到目前为止,我遇到的问题是:1)错误login到不同的机器,因为隧道是打开到错误的位置,2)ssh具有不同的主机具有相同的IP,但已知主机中的主机名不同,拒绝连接。
到目前为止,我正在考虑为每个位置(例如/etc/hosts.location1)创build不同的/ etc / hosts和〜/ .ssh / known_hosts文件,并使用位置切换脚本通过复制版本为我的目标位置定制的默认文件(例如cp /etc/hosts.location1 / etc / hosts)。 理想情况下,这个脚本最终将与我用来打开VPN到不同位置的软件集成在一起。
我的问题是:有没有更好的方法来做到这一点? 有没有在ssh或linux名称parsing,我错过了任何function?
非常感谢。
编辑:这是一个生产环境,我正在寻找一个工作站解决这个问题。
你提到你到每个站点的VPN。 可能每个站点都有一个DNS服务器(或两个),它们有自己的站点域(site1.mycorp.com,site2.mycorp.com),并使用类似绑定视图( http://www.zytrax.com/books/dns /ch7/view.html )为VPNnetworking的指定主机提供IP地址?
这样,您可以为每个站点中的每台主机提供一个唯一的FQDN( barney.site1.mycorp.com和rubble.site2.mycorp.com ),这些主机只有在VPN连接到正确的站点时才能正确parsing,而绑定视图响应。 在每个站点中, barney.site1.mycorp.com和rubble.site2.mycorp.com可能具有相同的IP地址。 但是他们不会外部解决,或者如果您连接到错误的VPN。
这不是一个“工作站”解决scheme。 但是,如果您有能力向每个站点添加节点(虚拟机或物理主机)(不一定需要成为生产的一部分),那么这可能是一个解决scheme。 如果您已经拥有生产DNS,那么您可能已经能够利用现有的视图和命名。
你可以在远程站点做任何事情,比如在$ HOME中放置一个文件或编辑bashrc? 例如我有一个网站的/ etc / bashrc:
[ "$PS1" = "\\s-\\v\\\$ " ] && PS1="[SITE1 \u@\h \W]\\$ "
这有助于避免歧义。 如果你可以安装该文件,你可以设置你的提示来包含cat .site_name 。
另外看看使用.ssh / config来定义主机名。 你可以有:
Host app1.site1 HostName 10.11.12.13 User service
等等,然后使用ssh app1.site1并依靠严格的主机密钥检查来保证您的安全。 我假设sshd被允许创build自己的主机密钥。 如果机器有相同的主机密钥,那么你将遇到麻烦。
最后,你可以写一个ssh包装器脚本。 请参考路由表( netstat -nr )查找VPN端点,并禁止基于端点IP的错误行为。 粗略地说: safe_ssh site hostname ,除了旋转你的known_hosts文件,如果你的远程networking的目的地不是你指定的站点值,那么就用一个错误信息来救援。 如果你想让脚本在VPN上打开和closures,你也许可以用ssh连接多路复用工作。
是给每台机器一个独特的IP(以及它常见的,大概是RFC 1918 IP)的解决scheme? 我们使用这种方法,我们有一些RFC 1918 IP别名的机器,但它们都有一个独特的“公共”IP。