【发布时间】: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