自动 SSH/SCP 到 IP 地址发生变化的服务器 (Amazon EC2)

Automating SSH/SCP to server with IP address that changes (Amazon EC2)

在我正在处理的项目中,我有一个脚本每晚在服务器 A 上运行并启动一个处理一些数据的 EC2 实例(服务器 B)。部分数据处理涉及从服务器A向服务器B发送文件。由于每次启动新实例时IP地址都不同,所以我得到标准的"The authenticity of host '' can't be established... Are you sure you want to continue connecting (yes/no)?"。

正因为如此,我一直在努力使用 scp 来自动化它。我的第一种方法是尝试解析此消息,验证指纹(我知道指纹应该是什么),然后让我的脚本输入正确的响应(是或否)。我无法让它工作,因为(从我读到的)scp 没有 read/write 到 stdin/stdout。我猜是安全功能?

接下来我尝试直接写入 ~/.ssh/known_hosts 文件,这样我就不会收到此消息。这完美地工作,除了在实际存在中间人攻击的情况下,在这种情况下指纹显然不正确,并且会出现此消息。虽然不太可能,但我也想解释一下这种情况。事实证明,即使是检测到此消息出现然后重试连接这样简单的事情也很困难。

我目前正在使用 PHP(因为服务器 A 上的其余脚本就是这样编写的),但我也尝试过 Ruby 和 BASH。我愿意用任何能让我工作的语言来写这篇文章。

另外,我看到了使用 "stricthostkeychecking=no" 的建议,但我真的不想这样做,因为这是在生产环境中。

看起来 -o StrictHostKeyChecking=no 选项可以做到。

参见:

另一种方法可能是:

  • 让服务器 A 将文件复制到 Amazon S3 中的已知路径
  • 当服务器 B 启动时,使用 User Data script 配置机器,包括从 S3 向下复制文件

这可能是一种更简单、更可靠的方法,可能会失败的组件更少。