背景,公司的很多服务包括数据库访问都需要通过跳板机访问,为日常工作及使用带来了麻烦,特别数python直接操作数据更是麻烦了,所以一直想实现python 通过跳板机访问数据库的操作。
安装
pip3.6 install sshtunnel
使用 sshtunnel 跳转登录数据库
链接postgresql,其他数据类似
# FileName : pgconn.py # Author : Adil # DateTime : 2018/6/15 15:19 # SoftWare : PyCharm import paramiko import psycopg2 from sshtunnel import SSHTunnelForwarder # 获取密钥 private_key = paramiko.RSAKey.from_private_key_file('/Users/yyj/.ssh/id_rsa') with SSHTunnelForwarder( # 指定ssh登录的跳转机的address ssh_address_or_host = ('jumphost',22), # 设置密钥 ssh_pkey = private_key, # 如果是通过密码访问,可以把下面注释打开,将密钥注释即可。 # ssh_password = "password" # 设置用户 ssh_username = 'username', # 设置数据库服务地址及端口 remote_bind_address= ('dbhost',dbport)) as server: conn = psycopg2.connect(database='dbname', user='username', password='password', host='127.0.0.1', # 因为上面没有设置 local_bind_address,所以这里必须是127.0.0.1,如果设置了,取设置的值就行了。 port=server.local_bind_port) # 这里端口也一样,上面的server可以设置,没设置取这个就行了 print(conn) cur = conn.cursor() # 执行查询,查看结果,验证数据库是否链接成功。 cur.execute("select * from t_table_data limit 1") rows = cur.fetchone() print(rows) conn.close()