我每天多次这样做。有关自动化的任何线索,以便我可以运行一个命令来获取日志的所有内容吗?有两个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
答案 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