Paramiko,Python,Windows:如何使用SSH连接到远程计算机并从那里连接到NAS

时间:2016-05-19 13:33:59

标签: python windows paramiko

我已经看到了与此主题相关的几个问题和答案,但我一直无法掌握该方法。

  1. 我能做的事情:使用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())

      
  2. 我想做什么,但不知道如何:连接一次到计算机,然后使用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())

      
  3. enter image description here

    这可能,有人知道吗?

    提前谢谢。

2 个答案:

答案 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连接创建一个对象。 你可以看看这个:

ssh.py