有没有什么办法可以自动化 ssh 登录,而无需 sshpass 或 expect?

有没有什么办法可以自动化 ssh 登录,而无需 sshpass 或 expect?

这里的背景是,我在工作中使用了一系列嵌入式 Linux 系统。它们无法访问互联网。它们经常被重新镜像。我无法控制操作系统镜像,拥有它们的团队也不想将它们合并sshpassexpect加入操作系统版本中。

这些是只能从内部网络访问的测试机器。目前更新过程相当痛苦,需要我手动scp在 3 个跳转之间传输文件。我想用脚本自动完成这个过程,这样每周可以节省我几个小时。当前的工作流程是让我拥有一系列巨大的 3 层深嵌套 tmux 会话,其中包含各种窗格,我在其中运行非常相似的命令。这可行,但并不好玩。然而据我所知,没有办法将密码明文管道传输到常规ssh。所有这些机器的密码都只是root,因为它们只是测试和开发机器。

我认为以下做法是行不通的:

  • 共享密钥:这些机器每天都会重新映像多次。我不能指望一个持久的密钥。
  • sshpass或者expect:如上所述,操作系统团队拒绝了我添加这些内容的请求。
  • 安装任何非默认的 UNIX 工具,因为这些机器无法访问互联网。

答案1

首先,我表示哀悼。您被委以责任来解决这个问题,但却没有得到适当的支持。如果系统定期重新镜像,安装密钥应该很容易添加到该构建流程中。如果负责的团队不愿意这样做,这似乎很难解释。

您说得对 - 根据设计,无法在命令行上通过 ssh 传递密码。因此,如果不安装其他程序,就没有太多选项可以进一步实现自动化,就像您所说的那样。

考虑到限制 - 并假设你不应该将密码存储在任何地方 - 我会说一个使用嵌套 SSH(使用多次调用 -J 标志)以减少跳数,并准备好密码粘贴在您的粘贴缓冲区中,将最大限度地减少您的工作量。

还有一个建议。你提到没有互联网接入,但如果有任何脚本或工具可以内部可用,你可以将它们从内部源传输到目标系统。拉取单个“引导”脚本,然后运行该脚本来安装任何其他静态编译的实用程序(甚至证书或 SSH 密钥!),可能会很高效。每次重建系统时都必须重新执行此操作,但脚本甚至可以检查目标系统是否已重新映像,并且只安装缺少的内容。换句话说,您可以自动执行将重建的系统恢复到可支持状态

无论如何,祝你好运。如果 Hallmark 为此制作了一张卡片,我会把它送给你。:D

相关内容