Qual é a maneira mais pitônica de scp um arquivo em Python? A única rota que eu conheço é
os.system('scp "%s" "%s:%s"' % (localfile, remotehost, remotefile) )
que é um hack e que não funciona fora de sistemas semelhantes ao Linux, e que precisa de ajuda do módulo Pexpect para evitar solicitações de senha, a menos que você já tenha o SSH sem senha configurado para o host remoto.
Estou ciente do Twisted conch
, mas prefiro evitar a implementação do scp por meio de módulos ssh de baixo nível.
Estou ciente de paramiko
um módulo Python que suporta SSH e SFTP; mas não suporta SCP.
Antecedentes: estou me conectando a um roteador que não suporta SFTP, mas suporta SSH / SCP, portanto, o SFTP não é uma opção.
Edição : Esta é uma duplicata de como copiar um arquivo para um servidor remoto em Python usando SCP ou SSH? . No entanto , essa pergunta não fornece uma resposta específica do scp que lida com as chaves do Python. Estou esperando uma maneira de executar o código como
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
acaba chamando ascp
linha de comando que funciona apenas no * nix.scp -t
ouscp -f
'para' e 'de', que existem para esse fim do servidor). É essencialmente assim que o scp funciona - ele depende de outra cópia do scp existente no servidor. Este artigo explica muito bem: blogs.oracle.com/janp/entry/how_the_scp_protocol_worksimport paramiko
from scp import SCPClient
2. Aqui está um exemplo do comando scp.get ():scp.get(r'/nfs_home/appers/xxxx/test2.txt', r'C:\Users\xxxx\Desktop\MR_Test')
pip install scp
:, na versão 0.10.2 até o momento da redação deste documento.Você pode estar interessado em experimentar o Pexpect ( código fonte ). Isso permitiria lidar com solicitações interativas para sua senha.
Aqui está um exemplo de uso de exemplo (para ftp) no site principal:
fonte
Você também pode conferir o paramiko . Ainda não existe um módulo scp, mas ele suporta totalmente o sftp.
[EDIT] Desculpe, perdeu a linha onde você mencionou o paramiko. O módulo a seguir é simplesmente uma implementação do protocolo scp para paramiko. Se você não quiser usar o paramiko ou o conch (as únicas implementações ssh que eu conheço para python), você pode refazer isso para executar uma sessão ssh regular usando pipes.
scp.py para paramiko
fonte
Não foi possível encontrar uma resposta direta e esse módulo "scp.Client" não existe. Em vez disso, isso combina comigo:
fonte
se você instalar o putty no win32, receberá um pscp (putty scp).
então você também pode usar o os.system hack no win32.
(e você pode usar o agente putty para o gerenciamento de chaves)
desculpe, é apenas um hack (mas você pode envolvê-lo em uma classe python)
fonte
Você pode usar o subprocesso do pacote e a chamada de comando para usar o comando scp no shell.
fonte
Hoje, a melhor solução é provavelmente
AsyncSSH
https://asyncssh.readthedocs.io/en/latest/#scp-client
fonte
Dê uma olhada no fabric.transfer .
fonte
Já faz um bom tempo que essa pergunta foi feita e, entretanto, surgiu outra biblioteca que pode lidar com isso: Você pode usar a função de cópia incluída na biblioteca Plumbum :
fonte
SshMachine
tem acessossh-agent
; portanto, se você quiser evitar digitá-lo toda vez, é uma maneira de fazê-lo. Você também pode registrar uma solicitação de recurso na página github do plumbum.fonte
Se você estiver no * nix, poderá usar o sshpass
fonte
Hmmm, talvez outra opção seria usar algo como sshfs (também existe um sshfs para Mac). Depois que o roteador estiver montado, você poderá copiar os arquivos imediatamente. Não tenho certeza se isso funciona para o seu aplicativo em particular, mas é uma boa solução para se manter à mão.
fonte
Há algum tempo, montei um script de cópia SCP python que depende do paramiko. Ele inclui código para manipular conexões com uma chave privada ou agente de chave SSH com um fallback para autenticação de senha.
http://code.activestate.com/recipes/576810-copy-files-over-ssh-using-paramiko/
fonte
Eu não acho que exista qualquer módulo que você possa fazer o download facilmente para implementar o scp, mas você pode achar útil: http://www.ibm.com/developerworks/linux/library/l-twist4.html
fonte