SSH и SCP из окон с Python 3 - PullRequest
3 голосов
/ 23 мая 2011

Я застрял здесь на несколько дней.Я хочу скопировать файл из моих окон на удаленный сервер Linux и запустить там скрипт.У меня есть инструмент для SSH и SCP.с которого я могу вызвать сервер linux через командную строку, но когда я вызываю его через python, он зависает.

pro=subprocess.Popen('ssh user@server')
pro.communicate()

появляется пустой экран.все, что я печатаю, появляется на экране.Я надеялся, что должен быть пароль, но его нет.Я думал об использовании библиотеки, как paramiko, pexpect, pyssh, но ни одна из них не поддерживается в Python 3

Любая помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 13 июля 2011

Был еще один вопрос, как этот.Используйте netcat.'man nc'. Используйте os.system () в python для запуска его как на стороне клиента, так и на стороне сервера.

На странице справки netcat:

ОПИСАНИЕ

Утилита nc (или netcat) используется практически для всего под солнцем, включая TCP или UDP.Он может открывать соединения TCP, отправлять пакеты UDP, прослушивать произвольные порты TCP и UDP, выполнять сканирование портов и работать как с IPv4, так и с IPv6.В отличие от telnet (1), nc хорошо выполняет сценарии и разделяет сообщения об ошибках на стандартную ошибку, а не отправляет их на стандартный вывод, как это делает telnet (1) с некоторыми.

Общие применения включают:

  • простые прокси TCP
  • HTTP-клиенты и серверы на основе сценариев оболочки
  • тестирование сетевого демона
  • команда SOCKS или HTTP ProxyCommand для ssh (1)
  • и многое, многое другое

Это прекрасно работает как для локальных или удаленных машин в интрасети, так и в Интернете, если известно о связанных проблемах (в первоначальном вопросе не было указано значение «удаленный»«).Вот некоторые примеры:

Что касается комментария "но это не python": не изобретайте колесо, когда есть очень хорошие основополагающие утилиты, которые былипортированы на все O / S и не имеют других зависимостей, кроме базовой базы O / S.

0 голосов
/ 25 мая 2011

http://docs.fabfile.org/en/1.0.1/index.html

Я не уверен, что его можно конвертировать в 2to3

, но его довольно просто использовать:

from fabric.api import run, env
from fabric.context_managers import hide
from fabric.colors import green

with hide('status', 'running', 'output'):
    print('Apache ' + env.host + ': ' + green(run('wget -q -O /dev/null http://localhost/ && echo OK')))

env.hostкомандная строка, витая кушетка - еще одна альтернатива, но она еще не портирована на py3k

...