【问题标题】:Can't SSH to Google Cloud Compute Engine with sshtunnel无法使用 sshtunnel SSH 到 Google Cloud Compute Engine
【发布时间】:2020-10-09 04:33:40
【问题描述】:

我在 GCP 上使用 Compute Engine 准备了两个 VM 实例。 ServerA:ServerB 上的数据处理和读取/写入 SQL(mysql)。 ServerB:SQL Server(f1-micro* 这不是 Cloud SQL,而是普通的 VM 实例。)

尝试使用以下代码从 A 访问 SSH 到 B,以便在 ServerB 上读取/写入 DB。

错误代码

错误:错误 |设置 SSH 转发器时出现问题:无法打开隧道 localhost:3306 localhost:3306 可能正在使用或无法访问目标

sshtunnel.HandlerSSHTunnelForwarderError: 打开隧道时出错。

#SSH connection
with SSHTunnelForwarder(
    ('PublicIP of ServerA', 22),
    ssh_pkey=SSH_PKEY_PATH,
    ssh_username=SSH_USER,
    remote_bind_address=('localhost', 3306),
    local_bind_address=('localhost', 3306)
) as ssh:
    try:
    #DB connection
            connection = mysql.connector.connect(
                host='localhost',
                port = 3306,
                user=MYSQL_USER,
                passwd=MYSQL_PASS,
                db=MYSQL_DB,
                charset='utf8'
            )
    # print(connection.is_connected())
    # Get Cur
        cur = connection.cursor()
        sql = "use dbname"
        cur.execute(sql)
        
        for i in range(len(sqlList)):
            print("DB Access:" + str(sqlList[i]))
            sql = str(sqlList[i])
        # sql = 'create table test (id int, content varchar(32))'
            cur.execute(sql)
            sqlOUTPUT = cur.fetchall()
    # rows = cur.fetchall()
    # for row in rows:
    #     print(row)
    except mysql.connector.Error as err:
        print("Something went wrong: {}".format(err))
        connection.rollback()
        raise err
    finally:
        #Cur close
        cur.close()
        # Commit
        connection.commit()
        #DB Connection close
        connection.close()
return sqlOUTPUT

但是在“local_bind_address=(localhost, MYSQL_PORT)”之后,尽管在B的shell或VSCode本地环境上使用相同的代码和相同的私钥,还是会发生错误。

我不明白为什么它在使用 shell 和 VSCode 时会通过相同的代码,尽管它在 GCE 上不起作用。

有什么帮助吗?

【问题讨论】:

    标签: python ssh google-compute-engine


    【解决方案1】:

    如果您尝试从客户端虚拟机在脚本之外创建隧道,则可以进一步调试并放弃sshtunnel 的任何问题,使用:

    $ gcloud compute ssh server-a --zone=your-zone --ssh-flag='-NL 3306:127.0.0.1:3306' &
    

    然后尝试连接:

    $ mysql -h 127.0.0.1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-02
      • 2017-06-29
      • 1970-01-01
      • 2018-02-25
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      相关资源
      最近更新 更多