SSH密钥通过Python sshtunnel转发

时间:2017-09-21 03:25:42

标签: python ssh ssh-tunnel

该问题类似于this one,但使用sshtunnel库而不是直接调用paramariko

基本上,我想以编程方式重复描述here的场景(在使用代理转发的公钥访问部分中)。我的想法是我在 server1 上运行后端(参见前面提到的部分,它有图形方案)。此后端需要连接 server2 以使用我的身份验证密钥检索某些数据。

我曾经使用用户名/密码,现在切换到公钥。当我使用普通密码时,就像这样:

from sshtunnel import SSHTunnelForwarder

APP_CONFIG = {}  # here should be connection configuration

def build_ssh_tunnel_config(app_config):
    cfg = app_config
    return {
        'ssh_address_or_host': (cfg['SSH_TUNNEL_HOST'],
                                int(cfg['SSH_TUNNEL_PORT'])),
        'ssh_password': cfg['SSH_TUNNEL_PASSWORD'],
        'ssh_username': cfg['SSH_TUNNEL_USERNAME'],
        'remote_bind_address': (cfg['SSH_TUNNEL_BIND_HOST'],
                                int(cfg['SSH_TUNNEL_BIND_PORT']))}


cfg = build_ssh_tunnel_config(APP_CONFIG)
server = SSHTunnelForwarder(**cfg)
server.start()
# communicate with host

但是我应该使用哪些类/参数来重复相同的过程而不使用用户名/密码,而是使用密钥转发?

我知道如何通过终端“手动”执行此操作,即启用密钥转发并按预期工作。

更新

通过 server1 homepc 连接到 server2 时,我就是这样做的:

SSH_TUNNEL_CONFIG = {
    'ssh_address_or_host': (server1_address, server1_port),
    'remote_bind_address': (server2_address, server2_port),
    'ssh_pkey': pkey_path
    'ssh_private_key_password': os.environ.get('tunnel_password'),
    'ssh_username': username
}

但我的 server1 主机上没有pkey_path文件,并且不希望将私钥存储在那里。这就是需要密钥转发的原因。

我对SSH配置不太熟悉,因此可能做错了或不尽可能简单。

0 个答案:

没有答案