【问题标题】:paramiko script works if commands are entered manually in python shell如果在 python shell 中手动输入命令,paramiko 脚本可以工作
【发布时间】:2023-10-28 08:49:01
【问题描述】:

我有一个简单的python 脚本,它使用paramiko 模块来ssh 登录到 PC 并将其关闭。

问题是脚本不起作用,而如果手动将命令输入到python 解释器中,命令会按预期工作,远程 PC 会关闭。

这是我的代码

#!/usr/bin/python3

import paramiko, subprocess
remote_ip=''
remote_user=''
remote_password=''
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(remote_ip, username = remote_user, password = remote_password,look_for_keys = False, allow_agent = False)
stdin, stdout, stderr = ssh.exec_command('sudo poweroff', get_pty = True)
stdin.write(remote_password+'\n')
stdin.flush()
ssh.close()
print(stdout.readlines())
print(stderr.readlines())

【问题讨论】:

  • 您是否收到任何错误消息?
  • 我建议在没有get_pty = True 的情况下尝试它,因为您只运行一个命令,并且当您的脚本无法生成时,请求伪终端可能会导致问题
  • 不,我没有收到任何错误消息
  • 但是当我在 python 解释器中输入完整指令时,get_pty = True 可以工作

标签: ubuntu python linux ubuntu ssh paramiko


【解决方案1】:

我找到了解决方案,但我不知道它为什么会起作用。我删除了 ssh.close() 行,现在脚本按预期工作。如果有人可以解释这一点,那将很有帮助。

【讨论】: