Python如何在SSH隧道后打开和读取远程文件

时间:2021-01-06 10:57:57

标签: python ssh remote-access ssh-tunnel

我正在使用 SSHTunnelForwared 并使用以下代码成功进入远程服务器:

with SSHTunnelForwarder((ssh_host, ssh_port), ssh_username=ssh_user,
        ssh_password=ssh_password,
        remote_bind_address=("127.0.0.1", 3306)) as tunnel:

我现在想从服务器内的路径将文件读入 python。假设路径是 /home/user/file.json

如果我做类似的事情

with open('/home/user/file.json','r') as f:
    data = json.loads(f)

程序抛出一个错误说:

FileNotFoundError: [Errno 2] No such file or directory: '/home/user/file.json'

显然没有找到该文件。我需要做什么才能找到目录?我在 ssh 块内工作,因此我可以访问 tunnel 对象。

1 个答案:

答案 0 :(得分:0)

当你连接时你不知道你所在的默认密码,所以尝试访问你的路径然后读取你的文件,希望这对你有帮助

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect("5.206.0.0", username = "root", password = "root")
command = "cd /var/www/html/ && ls"
stdin, out, err = client.exec_command(command)
print "stdout: " + out.read()

enter image description here

也适用于 r sql :

import pymysql
import paramiko
import pandas as pd
from paramiko import SSHClient
from sshtunnel import SSHTunnelForwarder
from os.path import expanduser

home = expanduser('~')
mypkey = paramiko.RSAKey.from_private_key_file(home + pkeyfilepath)

sql_hostname = 'sql_hostname'
sql_username = 'sql_username'
sql_password = 'sql_password'
sql_main_database = 'db_name'
sql_port = 3306
ssh_host = 'ssh_hostname'
ssh_user = 'ssh_username'
ssh_port = 22
sql_ip = '1.1.1.1.1'

with SSHTunnelForwarder(
        (ssh_host, ssh_port),
        ssh_username=ssh_user,
        ssh_pkey=mypkey,
        remote_bind_address=(sql_hostname, sql_port)) as tunnel:
    conn = pymysql.connect(host='127.0.0.1', user=sql_username,
            passwd=sql_password, db=sql_main_database,
            port=tunnel.local_bind_port)
    query = '''SELECT VERSION();'''
    data = pd.read_sql_query(query, conn)
    conn.close()