这里的背景是,我在工作中使用了一系列嵌入式 Linux 系统。它们无法访问互联网。它们经常被重新镜像。我无法控制操作系统镜像,拥有它们的团队也不想将它们合并sshpass
或expect
加入操作系统版本中。
这些是只能从内部网络访问的测试机器。目前更新过程相当痛苦,需要我手动scp
在 3 个跳转之间传输文件。我想用脚本自动完成这个过程,这样每周可以节省我几个小时。当前的工作流程是让我拥有一系列巨大的 3 层深嵌套 tmux 会话,其中包含各种窗格,我在其中运行非常相似的命令。这可行,但并不好玩。然而据我所知,没有办法将密码明文管道传输到常规ssh
。所有这些机器的密码都只是root
,因为它们只是测试和开发机器。
我认为以下做法是行不通的:
- 共享密钥:这些机器每天都会重新映像多次。我不能指望一个持久的密钥。
sshpass
或者expect
:如上所述,操作系统团队拒绝了我添加这些内容的请求。- 安装任何非默认的 UNIX 工具,因为这些机器无法访问互联网。
答案1
首先,我表示哀悼。您被委以责任来解决这个问题,但却没有得到适当的支持。如果系统定期重新镜像,安装密钥应该很容易添加到该构建流程中。如果负责的团队不愿意这样做,这似乎很难解释。
您说得对 - 根据设计,无法在命令行上通过 ssh 传递密码。因此,如果不安装其他程序,就没有太多选项可以进一步实现自动化,就像您所说的那样。
考虑到限制 - 并假设你不应该将密码存储在任何地方 - 我会说一个使用嵌套 SSH(使用多次调用 -J 标志)以减少跳数,并准备好密码粘贴在您的粘贴缓冲区中,将最大限度地减少您的工作量。
还有一个建议。你提到没有互联网接入,但如果有任何脚本或工具可以内部可用,你可以拉将它们从内部源传输到目标系统。拉取单个“引导”脚本,然后运行该脚本来安装任何其他静态编译的实用程序(甚至证书或 SSH 密钥!),可能会很高效。每次重建系统时都必须重新执行此操作,但脚本甚至可以检查目标系统是否已重新映像,并且只安装缺少的内容。换句话说,您可以自动执行将重建的系统恢复到可支持状态。
无论如何,祝你好运。如果 Hallmark 为此制作了一张卡片,我会把它送给你。:D