-2

如何在 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...'"
4

1 回答 1

2

您想在 中使用--user标志fab,而不是PREFIX

例如:以用户身份fab --user=myself abc运行命令。abcmyself

对于cd,看看http://docs.fabfile.org/en/1.6/api/core/context_managers.html?highlight=cd#fabric.context_managers.cd

于 2013-07-17T12:32:24.040 回答