相关疑难解决方法(0)

与Paramiko嵌套的SSH会话

我正在重写我写入Python的Bash脚本.那个剧本的关键是

ssh -t first.com "ssh second.com very_remote_command"
Run Code Online (Sandbox Code Playgroud)

我在使用paramiko进行嵌套身份验证时遇到问题.我无法找到任何处理我的确切情况的例子,但我能够在远程主机上找到sudo的例子.

第一种方法写入stdin

ssh.connect('127.0.0.1', username='jesse', password='lol')
stdin, stdout, stderr = ssh.exec_command("sudo dmesg")
stdin.write('lol\n')
stdin.flush()
Run Code Online (Sandbox Code Playgroud)

第二个创建一个通道并使用类似socket的sendrecv.

我能够让stdin.writesudo一起工作,但它不能与远程主机上的ssh一起使用.

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('first.com', username='luser', password='secret')
stdin, stdout, stderr = ssh.exec_command('ssh luser@second.com')
stdin.write('secret')
stdin.flush()
print '---- out ----'
print stdout.readlines()
print '---- error ----'
print stderr.readlines()

ssh.close()
Run Code Online (Sandbox Code Playgroud)

... ...打印

---- out ----
[]
---- error ----
['Pseudo-terminal will not be allocated …
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko

32
推荐指数
3
解决办法
4万
查看次数

Paramiko:NAT路由器周围的端口转发

组态

  • LOCAL:本地计算机,它将创建一个ssh连接并在REMOTE框上发出命令.
  • PROXY:一个EC-2实例,具有对LOCAL和REMOTE的ssh访问权限.
  • REMOTE:位于NAT路由器后面的远程计算机(LOCAL无法访问,但会打开与PROXY的连接并允许LOCAL隧道连接到它).

端口转发步骤(通过命令行)

  1. 创建从REMOTE到PROXY的ssh连接,以将REMOTE计算机上端口22上的ssh流量转发到PROXY服务器上的端口8000.

    #从REMOTE机器运行
    ssh -N -R 0.0.0.0:8000:localhost:22 PROXY_USER @ PROXY_HOSTNAME

  2. 创建一个从LOCAL到PROXY的ssh隧道,并将来自LOCAL:1234的ssh流量转发到PROXY:8000(然后转发到REMOTE:22).

    #从LOCAL机器运行
    ssh -L 1234:localhost:8000 PROXY_USER @ PROXY_HOSTNAME

  3. 创建从LOCAL到REMOTE的转发ssh连接(通过PROXY).

    #在新的终端窗口中从LOCAL机器运行
    ssh -p 1234 REMOTE_USER @ localhost

    #我现在已经转到REMOTE框并可以运行命令

帕拉米科研究

我查看了一些与使用Paramiko进行端口转发相关的问题,但它们似乎并未解决这种特定情况.

我的问题

如何使用Paramiko运行上面的步骤2和3?我基本上想运行:

import paramiko

# Create the tunnel connection
tunnel_cli = paramiko.SSHClient()
tunnel_cli.connect(PROXY_HOSTNAME, PROXY_PORT, PROXY_USER)

# Create the forwarded connection and issue commands from LOCAL on the REMOTE box
fwd_cli = paramiko.SSHClient()
fwd_cli.connect('localhost', LOCAL_PORT, REMOTE_USER)
fwd_cli.exec_command('pwd')
Run Code Online (Sandbox Code Playgroud)

python ssh paramiko

11
推荐指数
1
解决办法
8168
查看次数

ssh首先在python中使用mysqldb

我正在尝试使用python中的MySQLdb连接到远程服务器上的MySQL数据库.问题是首先我需要SSH到主机,然后从那里,我需要连接到MySQL服务器.但是,我遇到的问题是MySQLdb似乎没有办法在连接到SQL服务器之前建立SSH连接.我检查了文档,但没有运气.

这是我连接的方式:

conn = MySQLdb.connect(host = 'mysqlhost.domain.com:3306', user = 'user', passwd = 'password', db = 'dbname')
Run Code Online (Sandbox Code Playgroud)

但我真正需要的是这样的:

conn = MySQLdb.connect(sshhost = 'sshhost.domain.com', sshuser = 'sshusername', sshpasswd = 'sshpasswd', host = 'mysqlhost.domain.com:3306', user = 'user', passwd = 'password', db = 'dbname')
Run Code Online (Sandbox Code Playgroud)

这当然只是弥补了.有人可以提出任何建议吗?

python mysql ssh mysql-python

5
推荐指数
2
解决办法
9797
查看次数

使用 Python 通过 SSH 隧道连接到远程 PostgreSQL 数据库

我在使用 SSH 隧道连接到远程数据库时遇到问题(现在我正在尝试使用 Paramiko)。这是我的代码:

#!/usr/bin/env python3
import psycopg2
import paramiko
import time

#ssh = paramiko.SSHClient()
#ssh.load_system_host_keys()
#ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#ssh.connect('pluton.kt.agh.edu.pl', 22, username='aburban', password='pass')

t = paramiko.Transport(('pluton.kt.agh.edu.pl', 22))
t.connect(username="aburban", password='pass') 
c = paramiko.Channel(t)
conn = psycopg2.connect(database="dotest")
curs = conn.cursor()
sql = "select * from tabelka"
curs.execute(sql)
rows = curs.fetchall()
print(rows)
Run Code Online (Sandbox Code Playgroud)

问题是该程序总是尝试连接到本地数据库。我尝试了其他 SSH 隧道,也出现了同样的情况。远程服务器上的数据库存在,并且通过终端使用“经典”SSH 连接可以正常工作。

python ssh paramiko ssh-tunnel psql

5
推荐指数
1
解决办法
8409
查看次数

标签 统计

python ×4

ssh ×4

paramiko ×3

mysql ×1

mysql-python ×1

psql ×1

ssh-tunnel ×1