【发布时间】:2014-05-06 21:31:35
【问题描述】:
如何在 Fabric 中实现使用 ssh 代理的自定义 cd()?
在我的部署脚本中,我像上面一样打包了run()、sudo()、put()来实现ssh代理:
from fabric.api import run, sudo, cd
PREFIX = "ssh user@remote:5044 '"
def custom_run(cmd):
new_cmd = PREFIX + cmd + "'"
run(new_cmd)
def custom_sudo(cmd):
new_cmd = PREFIX + cmd + "'"
sudo(new_cmd)
但正如我所知,为了管理上下文,Fabric 的 cd() 更改了全局变量 env.cwd
不像run或者sudo,直接执行一些命令。
那么,有什么方法可以用 ssh 代理实现 cd() 吗?
$ ssh usr@1st-host "ssh usr@2nd-host 'cd pwd;cmd...'"
【问题讨论】:
-
Fabric 在执行命令之前会 cd 到 env.cwd 中的目录,所以我不明白你要解决什么问题。
-
请说明您要解决的问题。在我看来,您正在尝试在织物中重新实现织物,这是没有意义的。
-
对不起我的错误! PREFIX 是
"ssh user@remote:5044 '"而不是user@remote:5044,所以我的问题是如何重新实现fabric cd() 以通过ssh 和执行命令进入第三主机的目录,而不是env.host 指定的目标主机。 -
不,这不是你的问题,这就是你试图解决你实际遇到的问题的方法。请说明您要解决的问题。
-
你可能想看看 docs.fabfile.org/en/latest/usage/env.html#gateway 并使用它而不是自己滚动