我已经看到了与此主题相关的几个问题和答案,但我一直无法掌握该方法。
我能做的事情:使用Paramiko使用Python脚本连接到远程计算机并返回信息,例如,ping一个开关:
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(pk.AutoAddPolicy())
ssh.connect(&#39; {}&#39; .format(IP),port = xxx,username =&#39; xxx&#39;,password =&#39; xxx&#39;)< / p>
stdin,stdout,stderr = \
ssh.exec_command(&#39; ping -n 1 xxx.xxx.x.x \ n&#39;)
打印(&#39; Ping开关:\ n&#39;,stdout.readlines())
我想做什么,但不知道如何:连接一次到计算机,然后使用SSH(paramiko.SSHClient())再次连接到另一台设备(在本例中为NAS)和&#39; exec_command&#39;,类似于:
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(pk.AutoAddPolicy())
ssh.connect(&#39; {}&#39; .format(IP),port = xxx,username =&#39; xxx&#39;,password =&#39; xxx&#39;)#连接到计算机
ssh.connect(&#39; {}&#39; .format(IP),port = xxx,username =&#39; xxx&#39;,password =&#39; xxx&#39;)#从计算机连接到NAS
stdin,stdout,stderr = \
ssh.exec_command(&#39; shutdown \ n,y \ n&#39;)#send命令到NAS
打印(&#39; Ping开关:\ n&#39;,stdout.readlines())
这可能,有人知道吗?
提前谢谢。
答案 0 :(得分:1)
您必须打开隧道,检查paramiko demo或使用sshtunnel
包。
对于后者:
import paramiko as pk
import sshtunnel
with sshtunnel.open_tunnel(
remote_computer_ip,
ssh_username=remote_username,
ssh_password=remote_password,
remote_bind_address=(NAS_IP, 22),
debug_level='DEBUG',
) as tunnel:
ssh = pk.SSHClient()
ssh.set_missing_host_key_policy(pk.AutoAddPolicy())
ssh.connect(NAS_IP,
port=tunnel.local_bind_port, # redirected to port NAS_IP:22
username=NAS_USER,
password=NAS_PASS)
(stdin, stdout, stderr) = ssh.exec_command(...) # your stuff
答案 1 :(得分:0)
您可以更简单的方式提出问题。如果我没有错,您是否尝试使用paramiko连接到一台计算机,并且要从该计算机连接到NAS计算机?
或者是你连接到1台机器说A然后你想要那台机器的ssh句柄并连接到NAS机器并生成另一个ssh句柄?
如果是后一种情况,我建议您使用一个类并为每个ssh连接创建一个对象。 你可以看看这个: