Использование Plink (PuTTy) для SSH через Python - PullRequest
8 голосов
/ 09 ноября 2011

Я пытаюсь написать скрипт на python, который отправит SSH на сервер и выполнит команду. Я использую Python 2.6 в Windows, установил plink и paegent (для ключей ssh) и добавил их все в мой путь.

Если я зайду в командную строку и наберу:

plink username@host -i key.ppk
open vnc://www.example.com/

Я вижу желаемое поведение - на моем Mac (сервере) открывается программа просмотра VNC.

Однако, если я попробовал два подхода сделать это программно через Python, и ни один из них не работает:

Подход 1 (os):

import os
ff=os.popen("plink user@host -i key.ppk",'w')
print >>ff, r"open vnc://www.example.com"
ff.flush() 

Подход 2 (подпроцесс):

import subprocess
ff=subprocess.Popen("plink user@host -i key.ppk",shell=False,stdin=subprocess.PIPE)
ff.stdin.write(r"open vnc://www.example.com")
ff.stdin.flush()

Ни один из подходов не приводит к ошибке, но ни один из них не открывает окно VNC. Однако я считаю, что они оба успешно подключаются к удаленному хосту.

Что я делаю не так?

Ответы [ 3 ]

7 голосов
/ 09 ноября 2011

Во втором подходе используйте

ff.communicate("open vnc://www.example.com\n")
0 голосов
/ 06 февраля 2019

Я использую ткань для автоматизации выполнения команд через SSH на удаленном ПК.

0 голосов
/ 09 ноября 2011

Я бы попробовал:

Popen("plink user@host -i key.ppk", shell=True)
Popen("open vnc://www.example.com", shell=True)
...