Какой самый питонный способ scp файла в Python? Единственный маршрут, который мне известен, это
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
это взлом, который не работает вне Linux-подобных систем, и которому нужна помощь от модуля Pexpect, чтобы избежать запросов пароля, если у вас уже не установлен SSH без пароля для удаленного хоста.
Я знаю о Twisted conch
, но я бы предпочел избегать реализации scp самостоятельно через низкоуровневые ssh-модули.
Мне известен paramiko
модуль Python, который поддерживает SSH и SFTP; но он не поддерживает SCP.
Справочная информация: я подключаюсь к маршрутизатору, который не поддерживает SFTP, но поддерживает SSH / SCP, поэтому SFTP не вариант.
РЕДАКТИРОВАТЬ : Это дубликат Как скопировать файл на удаленный сервер в Python с использованием SCP или SSH? , Тем не менее , этот вопрос не дает конкретного ответа scp, который имеет дело с ключами из Python. Я надеюсь на способ запуска кода вроде
import scp
client = scp.Client(host=host, user=user, keyfile=keyfile)
# or
client = scp.Client(host=host, user=user)
client.use_system_keys()
# or
client = scp.Client(host=host, user=user, password=password)
# and then
client.transfer('/etc/local/filename', '/etc/remote/filename')
scp
концов фактически вызываетscp
командную строку, которая работает только на * nix.scp -t
илиscp -f
(режимы 'to' и 'from', которые существуют для этой серверной цели). По сути, так работает scp - он опирается на другую копию scp, существующую на сервере. Эта статья объясняет это очень хорошо: blogs.oracle.com/janp/entry/how_the_scp_protocol_worksimport paramiko
from scp import SCPClient
2. Вот пример команды scp.get ():scp.get(r'/nfs_home/appers/xxxx/test2.txt', r'C:\Users\xxxx\Desktop\MR_Test')
pip install scp
в версии 0.10.2 на момент написания этой статьи.Возможно, вам будет интересно попробовать Pexpect ( исходный код ). Это позволит вам иметь дело с интерактивными подсказками для вашего пароля.
Вот пример использования (для ftp) с основного сайта:
источник
Вы также можете проверить Paramiko . Там нет модуля scp (пока), но он полностью поддерживает sftp.
[EDIT] Извините, пропустил строку, где вы упомянули paramiko. Следующий модуль является просто реализацией протокола scp для paramiko. Если вы не хотите использовать paramiko или conch (единственные реализации ssh, которые я знаю для python), вы можете переделать это, чтобы запустить обычный сеанс ssh с использованием каналов.
scp.py для paramiko
источник
Не удалось найти прямой ответ, и этот модуль "scp.Client" не существует. Вместо этого меня это устраивает:
источник
если вы установите putty на win32, вы получите pscp (putty scp).
так что вы также можете использовать хак os.system на win32.
(и вы можете использовать замазку для управления ключами)
извините, это всего лишь взлом (но вы можете обернуть его в класс Python)
источник
Вы можете использовать подпроцесс пакета и вызов команды, чтобы использовать команду scp из оболочки.
источник
На сегодняшний день лучшее решение, вероятно,
AsyncSSH
https://asyncssh.readthedocs.io/en/latest/#scp-client
источник
Посмотрите на fabric.transfer .
источник
Прошло довольно много времени с тех пор, как был задан этот вопрос, и в то же время появилась другая библиотека, которая может справиться с этим: вы можете использовать функцию копирования, включенную в библиотеку Plumbum :
источник
SshMachine
есть доступssh-agent
, поэтому, если вы просто хотите не вводить его каждый раз, это один из способов сделать это. Вы также можете подать запрос на функцию на странице Gumbub Plumbum.источник
Если вы используете * nix, вы можете использовать sshpass
источник
Хм, возможно, другой вариант будет использовать что-то вроде sshfs (есть sshfs для Mac тоже). После того, как ваш роутер смонтирован, вы можете просто скопировать файлы. Я не уверен, что это работает для вашего конкретного приложения, но это хорошее решение, чтобы держать под рукой.
источник
Я недавно создал сценарий копирования SCP на python, который зависит от paramiko. Он включает в себя код для обработки соединений с секретным ключом или агентом ключа SSH с отступлением от аутентификации по паролю.
http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
источник
Я не думаю, что есть какой-то один модуль, который вы можете легко загрузить для реализации scp, однако вы можете найти это полезным: http://www.ibm.com/developerworks/linux/library/l-twist4.html
источник