python - 使用 PuTTY 或 plink 通过 python 子进程连接到远程 linux 机器会抛出错误

标签 python linux windows ssh putty

我正在尝试从 Windows 主机在远程 Linux 机器上执行一些脚本。我希望使用 python subprocess +putty/plink 来实现这一点。 当我从 Windows cmd 尝试 Putty 或 plink 命令时,它工作正常。但是如果我使用 python 子进程尝试相同的命令,我会收到很多错误。

C:\Users\username>plink.exe username@machinename -pw password

工作正常。但是当我从 python 尝试时,

process = subprocess.Popen('plink.exe username@machinename -pw password'.split(),
                           env={'PATH':'C:\\Program Files (x86)\\PuTTY\\'},
                           shell=True,
                           stdout=subprocess.PIPE,
                           stderr=subprocess.PIPE)

抛出以下错误。

Unable to open connection:

gethostbyname: unknown error'

process = subprocess.Popen("putty.exe -ssh -2 -l username -pw password -m C:\\script.sh machinename",
                           env={'PATH':'C:\\Program Files (x86)\\PuTTY\\'},
                           stdout=subprocess.PIPE,
                           stderr=subprocess.STDOUT
                           ,shell=True);

Unable to open connection:

gethostbyname: unknown error'

我也尝试过 subprocess.check_ouput,但没有成功。

output = subprocess.check_output("putty.exe -ssh -2 -l username -pw password -m C:\\script.sh machinename", stderr=subprocess.STDOUT,shell=True)

抛出以下错误

CalledProcessError: Command 'putty.exe -ssh -2 -l username -pw password -m C:\script.sh machinename' returned non-zero exit status 1

这可能是防火墙问题吗?

最佳答案

我强烈建议不要使用 PuTT 或一般的每个外部程序来连接到 shh 然后与管道接口(interface)。

使用 python 库 paramiko这可以做得更好。

例如:

# ... connect like one of the examples on github
stdin, stdout, stderr = client.exec_command('ls')
for line in stdout:
    print '... ' + line.strip('\n')

关于python - 使用 PuTTY 或 plink 通过 python 子进程连接到远程 linux 机器会抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37768508/

相关文章:

python - 如何在 Python 中获取指向原始二进制数据的指针?

linux - bash 中的 if else 错误

windows - 使用 puppeteer、windows 在 chromium 中播放 mp4

python - 在另一个Python脚本中调用Python脚本

python - Pandas - 用组中最频繁的值替换空值

python - 在python中按多个条件排序

Java SE 6 和 Java SE 8 JRE 在 Windows 7 上的行为不同(文件权限)

linux - 获取进程 ID

linux - 在 CoreOS 主机之间移动 docker 数据卷容器

python - 使用 Popen 和启动/等待在 python 中运行子进程时无法获取退出代码