Ssh套接字已关闭。想要一个交互式sshshellautomation for Linux的机器

2024-10-01 09:21:24 发布

您现在位置:Python中文网/ 问答频道 /正文

Ssh套接字已关闭。想要一个交互式sshshellautomation for Linux的机器

    import paramiko

    ssh = paramiko.SSHClient()

    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ##Creating Ssh Session

    ssh.connect("gfr4123408", port=22, username='rstrusr',password='Password')


    stdin,stdout,stderr = ssh.exec_command('symcfg -lockbox reset -ssv')

    #Here it asks for password and i want to write password below

    stdin.write("Password")

    stdin.write('\n')

    stdin.flush()

    output=stdout.readlines()

    print(output)
我得到以下错误

Traceback (most recent call last): File "", line 1, in stdin.write('password') File "C:\Users\venkar2\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\file.py", line 402, in write self._write_all(data) File "C:\Users\venkar2\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\file.py", line 519, in _write_all count = self._write(data) File "C:\Users\venkar2\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\channel.py", line 1333, in _write self.channel.sendall(data) File "C:\Users\venkar2\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\channel.py", line 831, in sendall sent = self.send(s) File "C:\Users\venkar2\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\channel.py", line 785, in send return self._send(s, m) File "C:\Users\venkar2\AppData\Local\Programs\Python\Python36\lib\site-packages\paramiko\channel.py", line 1169, in _send raise socket.error('Socket is closed') OSError: Socket is closed

我要为200多个设备配置,如何解决这个问题??在


Tags: inpyparamikolibpackageslocallinesite
2条回答

你会发现有两件事很有用:

  1. exec_command接受get_pty的可选参数。你可以这样使用它:

    (stdin, stdout, stderr) = ssh.exec_command("sudo ls", get_pty = True)
    
  2. 将密码放入stdin,并返回一行并刷新以确保它被传递。这可以确保它在请求时收到密码(你可以做一些更复杂的事情来检查它是否真的请求了。。。只是简单地把它扔进去,对我来说并没有什么问题。)

    stdin.write('passwd' + '\n')
    stdin.flush()
    

综合起来,这些应该可以解决您的sudo超过paramiko的问题。在

大多数情况下,这个问题与发送两个命令之间的时间有关。 我有这个问题。什么时候我用过”时间。睡觉(十) “在我的命令之间,这个问题消失了。在

相关问题 更多 >