断开连接后如何强制 ssh 代理转发在屏幕上继续?

断开连接后如何强制 ssh 代理转发在屏幕上继续?

我想连接到一个主机,我将使用 screen 运行 ansible playbook。使用 screen 可以让我完成剧本,以防我的 ssh 连接中断或终止。到目前为止这里没有问题。

我的 ansible 主机需要密码或 ssh 密钥才能连接到清单文件中的主机。因此,当我连接到 ansible 实例时,我没有创建新的私钥,而是使用 ssh 代理转发。

# from my macOS
ssh-add -K
ssh -A ansible-host

# from ansible-host
screen -R run-playbook-example
ansible-playbook -i inventory/hosts my-playbook.yml

到目前为止一切都很好。直到我模拟失去连接。这也意味着代理转发不再起作用,并且 ansible-host 无法对任何主机进行身份验证。这违背了使用屏幕的全部意义。

有没有办法两者兼而有之? 1) 避免创建新的 ssh 私钥并将其存储在 ansible 主机上,并使用 ssh 代理转发或其他一些技巧 2) 能够在屏幕中运行,而不必担心是否失去与 ansible 主机的 ssh 连接,并且无论是否运行您的 playbook你断开连接。

有些东西告诉我这是不可能的。但我真的很讨厌必须存储几个人都可以访问的私钥,这样我就可以使用 screen 并且免受 ssh 连接问题的影响。有什么想法、技巧、解决这个问题的不同方法吗?

答案1

如果有人对该解决方案感兴趣,您将需要将以下选项添加到您的 ssh 配置中。它称为 ssh 多路复用,它保存 ssh 连接以供重复使用:

Host *
  Controlmaster auto
  Controlpath /tmp/ssh-%r@%h:%p
  ControlPersist yes

因此,现在当您从正在运行 ansible 的主机上的屏幕会话断开连接时,它将继续运行并重用现有的 ssh 连接(前提是它们是在您断开连接之前建立的)。

相关内容