如何自动化两层SSH和一个docker exec?

时间:2017-06-28 17:43:49

标签: linux docker ssh automation

我每天多次这样做。有关自动化的任何线索,以便我可以运行一个命令来获取日志的所有内容吗?有两个ssh,然后一个docker exec

➜ ~ ssh host Last login: Tue Jun 27 15:44:11 2017 from 10.82.34.63 $ ssh another-host Last login: Tue Jun 27 15:44:18 2017 from host $ docker exec -it app-container bash [root@app-container opt]# tail -f tomcat/logs/catalina.out

2 个答案:

答案 0 :(得分:2)

我们可以在OpenSSH中利用ProxyCommand作为第一部分(通过代理主机跳转到其他人的SSH)。 ~/.ssh/config的示例如下:

Host another-host
    ProxyCommand ssh -W %h:%p host
    HostName another-host

如果您代理的所有主机恰好位于同一个域中,您可以使用通配符捕获它们中的一堆:

Host jumphost
    Hostname host.mydomain

Host *.mydomain
    ProxyCommand ssh -W %h:%p jumphost

对于第二部分,在使用命令之前,不需要exec进入带有shell的容器。做docker exec -it app-container tail -f tomcat/logs/catalina.out完全有效。

结合SSH配置,您可以分配伪TTY(-t),然后只需执行一个命令:

ssh -t another-host docker exec -it app-container tail -f tomcat/logs/catalina.out

答案 1 :(得分:1)

这至少是ssh的部分答案。查看ssh用法输出:

ssh (.... lots of options ....) [user@]hostname [command]

因此,在所需的command之后,在参数列表的末尾有一个可选的hostname。这确实可以按照您的预期运作,您可以" "另一个ssh命令执行远程执行:

ssh host ssh another-host

会做的。

请注意,在这种情况下,您的ssh不会分配tty,因此无法启用交互式会话。但是,当然,你可以给这个第二个 ssh一些东西来执行

ssh host ssh another-host docker exec [...]

最后一部分,我只是查看了docker文档。选项-t需要tty,因此您应该将其删除。那么你应该能够在你的容器中执行你喜欢的任何东西,只要它没有交互式

ssh host ssh another-host docker exec -i app-container tail -f tomcat/logs/catalina.out

当然,要实现完全自动化,请使用SSH keys,并在添加密钥时运行SSH agent