我正在重写我写入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的send和recv.
我能够让stdin.write与sudo一起工作,但它不能与远程主机上的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) 我有一个托管在 Amazon RDS(“D”)上的远程 MySQL 数据库。出于安全目的,它只能通过远程服务器(“C”)访问。C 可通过跳转主机“B”通过 ssh 访问。我需要一个双 ssh 隧道来访问远程 SQL 主机。
[A: local host] -> [B: jump host] -> [C: target host] => [D: RDS MySQL host]
Run Code Online (Sandbox Code Playgroud)
我想通过 Python 访问 D,使用 paramiko 和/或 sshtunnel。我能找到的所有信息都涉及:
我正在尝试使用python脚本从中间主机作为代理的远程主机获取SQL转储,如下所示:
local machine -> proxy -> remote
Run Code Online (Sandbox Code Playgroud)
代理服务器必须存在,因为远程主机仅允许通过该代理服务器的连接。
注意:我在如何通过Paramiko隧道(或类似软件包)连接到数据库时也意识到了类似的问题,但是该解决方案似乎特定于PostgreSQL。
我正在通过paramiko使用SSH建立连接。我知道forward.py是端口转发的paramiko示例,但是我不确定我是否使用正确。这就是我所做的(PX =代理,RMT =远程):
forward.py --password --host=PX --port=PXport --user=PXusr RMT:RMTport
Run Code Online (Sandbox Code Playgroud)
我得到这个结果:
*** Unable to open host keys file
*** Warning: no host key for PX
Connecting to ssh host PX:PXport ...
Now forwarding port 4000 to RMT:RMTport ...
Run Code Online (Sandbox Code Playgroud)
脚本然后停留在最后一行。
Q1:有没有人举过一个例子,说明如何使用paramiko的forward.py通过代理连接到远程主机?
Q2:建立连接后,是否可以在远程主机上以编程方式执行Shell命令?