Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ssh到具有paramiko超级用户的设备_Python_Ssh_Paramiko - Fatal编程技术网

Python ssh到具有paramiko超级用户的设备

Python ssh到具有paramiko超级用户的设备,python,ssh,paramiko,Python,Ssh,Paramiko,我正在尝试使用r/o user和super user编写脚本来ssh我的设备,然后执行一个命令 以管理员(r/o用户)和密码登录 sudo su和密码 执行命令 打印已执行命令的输出 我尝试了下面的代码使其工作,但没有得到任何输出 import paramiko import pandas as pd import openpyxl from paramiko import AuthenticationException from paramiko.ssh_exception import SS

我正在尝试使用r/o user和super user编写脚本来ssh我的设备,然后执行一个命令

  • 以管理员(r/o用户)和密码登录
  • sudo su和密码
  • 执行命令
  • 打印已执行命令的输出
  • 我尝试了下面的代码使其工作,但没有得到任何输出

    import paramiko
    import pandas as pd
    import openpyxl
    from paramiko import AuthenticationException
    from paramiko.ssh_exception import SSHException, NoValidConnectionsError
    import socket
    import time
    import os
    import inspect
    import datetime
    
    start = time.time()
    print("Starting................................Please Wait") 
    df=pd.DataFrame(columns=["ip","Status","Remarks"])
    ips = ['10.11.8.71']
    
    root = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
    
    #ips = open (root+ "/440_ip.txt")
    for ipp in ips:
                  ip = ipp.strip()
            port=22
            username='admin'
            #password='AeGEBUx66m_1ND'
            #cmd='interface wireless set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 rate-set=configured rx-chains=0,1 scan-list=5825-5875 security-profile=iB440 ssid=iBw supported-rates-a/g="" basic-rates-a/g=""' 
            ssh=paramiko.SSHClient()
            ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            
            ssh.connect(ip,port,username,timeout=5,password='HeWGEUx66m=_4!ND')
            
            stdin, stdout, stderr = ssh.exec_command('sudo bash', get_pty = True)
            time.sleep(0.1)
            stdin.write('HeWGEUx66m=_4!ND\n')
            stdin.flush()
            stdin.write('whoami\n')
            #time.sleep(1)
    
            
            stdin.flush()
            dd = stdout.readlines()
            print(dd)
            ssh.close()
    
    运行代码后没有出现错误,似乎卡在了某个循环中

    正在启动请稍候

    在单行命令中使用ssh和plink

    C:\Users\Administrator\AppData\Local\Programs\Python\Python38>plink.exe -ssh -t admin@10.11.8.71 sudo bash admin@10.11.8.71's password: Access granted. Press Return to begin session. Password: bash-3.2# whoami root bash-3.2#```
    
    
    
    

    为了让它正常工作,我使用了帕拉米科的频道,效果很好

    import paramiko
    from paramiko import *
    from paramiko.channel import Channel
    import time
    import os
    import inspect
    import datetime
    from socket import *
    import pandas as pd
    
    df = pd.DataFrame(columns=["Ip","Status",'Remarks'])
    root = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
    
    #ips = ['10.23.0.30', '10.23.0.11','10.23.0.12','10.23.0.13']
    
    ips = open(root+ "\\ahip.txt")                           
    for ipp in ips:
       ip = ipp.strip()                        
                               
       print(ip)
       ssh = paramiko.SSHClient()
       ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
       try:
          ssh.connect(ip, port=22,timeout = 5,username='op', password='C#Uj!AnX')
       channel:Channel = ssh.invoke_shell()
          #print(type(channel))
          channel_data = str()
          while True:
             #channel.recv_ready():
             #time.sleep(1)
             channel_data += str(channel.recv(999))
             
    
             channel.send("su -\n")
             time.sleep(1)
                #channel_data += str(channel.recv(999))
    
                # if "Password" in channel_data:
             channel.send("HeWGEUx\n")
             time.sleep(3)
                #channel_data += str(channel.recv(999))
    
             channel.send("/bs/lteCli\n")
             time.sleep(3)
    
             channel.send("logger threshold set cli=6\n")
             time.sleep(4)
    
             channel.send("db set stackCfg [1] EnCLPC=0\n")
             time.sleep(4)
             
             channel.send("db get stackCfg EnCLPC\n")
             time.sleep(3)
    
                #channel.send("db get stackCfg EnCLPC\n")
             time.sleep(.1)
    
             channel_data  += str(channel.recv(99999))
             str2 = 'Done'
             df.loc[ip]=[ip,str2,channel_data]
             #print(channel_data)
             channel.close()
             ssh.close()
             break
             
       except (timeout ,AuthenticationException):
             print(ip+'not done')
             str1 = 'Not Done'
             df.loc[ip]=[ip,'failed',str1]
    
    

    @MartinPrikryl我已经试过了,但没有成功,请帮助我。是的,我在(exec_命令)之后尝试了print(stdout.read()),但似乎仍然卡在循环中。stderr也一样,我已经更新了ssh的结果admin@10.11.8.71sudo bash。要使我的脚本正常工作,我需要执行sudobash,然后需要运行一些命令。请将此编辑到您的问题中,然后删除
    ssh.invoke\u shell()
    。让我们来看看。