如何使用Fabric通过代理建立SSH连接?

时间:2017-02-16 12:40:02

标签: python fabric

我正在尝试在Windows PC和Linux服务器(amazon ec2)之间建立SSH连接。

我决定使用使用python实现的Fabric API。

我在Windows PC上安装了Putty。

我的fabfile脚本如下所示:

import sys
from fabric.api import *


def testlive():
  print 'Test live ...'
  run("uptime")

env.use_ssh_config = False
env.host_string = "host.something.com"
env.user = "myuser"
env.keys_filename = "./private_openssh.key"
env.port = 22
env.gateway = "proxyhost:port"

testlive()

我在使用私钥的同一目录中运行Fabric。

我可以使用Putty在这台机器上登录。

问题:我经常被要求输入指定用户的登录密码。

基于其他帖子(herehere)我已尝试过:

  • 将密钥文件作为列表传递给env.keys_filename
  • 使用username @ host_string
  • 使用env.host而不是env.host_string

如何正确配置Fabric来处理代理服务器和ssh私钥文件?

4 个答案:

答案 0 :(得分:2)

最好避免使用Fabric的API,以及太多的错误和问题(请参阅问题跟踪器)。

您可以使用以下内容在Python中执行您想要的操作:

from __future__ import print_function

from pssh import ParallelSSHClient
from pssh.utils import load_private_key

client = ParallelSSHClient(['host.something.com'],
                           pkey=load_private_key('private_openssh.key'),
                           proxy_host='proxyhost',
                           proxy_port=<proxy port number>,
                           user='myuser',
                           proxy_user='myuser')
output = client.run_command('uname')
for line in output['host.something.com'].stdout:
    print(line)

ParallelSSH可从pip parallel-ssh获得。

答案 1 :(得分:1)

以下情况应该有效。

env.key_filename = "./private_openssh.key"

(注意你尝试中的拼写错误)

答案 2 :(得分:0)

您将使用PuTTYgen生成SSH密钥,然后将复制的SSH密钥上传到您的云管理门户 - See Joyant

答案 3 :(得分:-1)

您必须生成并验证私钥,为此,您需要PuTTYgen使用RSA密钥生成SSH访问密码,密钥注释并符合密钥密码,这是一步一步的指南文档{{ 3}}