如何从 Fabric 运行 命令中启动 SSH 连接

How to initiate SSH connection from within a Fabric run command

我有一个远程服务器,比如说 1.2.3.4,它是 运行 正在为 SSHD 服务的 docker 容器映射到 docker 主机上的端口 49222,所以手动连接到它我会这样做:

workstation$ ssh 1.2.3.4 -t "ssh root@localhost -p 49222" 并到达 docker 容器 SSH 命令提示符 root@f383b4f71eeb:~#

如果我 运行 触发 run('ssh root@localhost -p 49222') 的 fabric 命令,那么系统会要求我输入 root 密码。但是它不接受我知道是正确的根密码,所以我怀疑密码提示来自主机而不是 docker 容器。

我在 fabfile.py 中定义了以下任务:

@task
def ssh():
    env.forward_agent = True
    run('ssh root@localhost -p 49222')
    with settings(output_prefix=False, forward_agent=True):
        run('ssh root@localhost -p 49222')

并且在远程服务器中 sshd_config 我需要设置:

AllowAgentForwarding yes

此外,output_prefix=False 可用于删除 fabric 添加到每行开头的 [hostname] run: 前缀,这对于远程 shell 的每一行来说相当烦人.