Substituir scp por sftp

3

Temos alguns scripts de sincronização para um cliente enviando arquivos, usando scp, para um servidor remoto administrado por um de seus provedores. Recentemente eles fecharam, e o novo que eles forneceram não permite scp, apenas sftp (não há como obter um shell no servidor remoto, então o scp / rsync não funciona).

Existe uma maneira simples de substituir o scp nos scripts pelo sftp? Eu acho que o mais fácil que eu conheço seria usar o sshfs e usar o cp ao invés do scp, mas isso é muito feio.

Parece que o sftp pode receber um arquivo com comandos usando -b, mas isso significa recodificar partes dos scripts. Eu queria saber se havia alguma maneira de usar o sftp como um substituto para o scp, ou algum outro pacote que fornecesse uma funcionalidade semelhante? (ou seja, usuário sftp / source @ remote: / dest ou algo assim, seria perfeito se eu pudesse apenas sed os scripts para substituir apenas o comando)

Obrigado

    
por Ulrar 03.03.2017 / 14:58

2 respostas

8

Rsync sobre sftp ou chroot sftp

Editar: Para deixar claro, o LFTP cliente suporta vários protocolos, incluindo FTP, HTTP, FISH, SFTP, HTTPS, FTPS e BitTorrent. Neste exemplo, estamos usando SFTP . O nome do cliente causou confusões às pessoas que leram este post.

Você pode usar lftp e seu subsistema espelho para replicar o comportamento do rsync sobre o SFTP. Isso funciona em ambientes chroot também.

lftp -u username, \
-e "set net:timeout 4;set net:max-retries 6;mirror -R --parallel=8 --no-perms --newer-than=now-2days --only-newer /source/ /source/;bye" sftp://hostname.domain

Neste exemplo, deixei de fora a senha, porque temos uma confiança de chave SSH no host de destino.

Nota: O -R não significa recursivo. O sinalizador -R significa empurrar para remoto.

--parallel= é o número de segmentos para interromper o trabalho. Isso pode ser limitado ou impactado, é claro, pelos limites MaxStartups em /etc/ssh/sshd_config e nofile pam e outros limites no servidor de destino.

net:max-retries 6 Eu gosto de tentar novamente, apenas no caso de haver uma manutenção de rede.

net:timeout 4 desista e tente novamente após 4 segundos.

--no-perms se você não quiser alterar permanentes no terminal remoto.

--newer-than é apenas um exemplo de algo para usar conforme necessário.

--loop pode ser usado para repetir a sincronização até que não sejam detectadas alterações.

bye não queremos esquecer de sair em vez de confiar no tempo limite inativo.

Existem muitas outras opções disponíveis no LFTP.

Eu tive ótimas experiências com o LFTP usando seu subsistema de espelhamento e SFTP. É substancialmente mais rápido, pois pode dividir os trabalhos em vários fluxos. Pode até dividir um único arquivo em vários fluxos.

Uma grande vantagem de segurança de usar o LFTP é permitir transferências de arquivos em ambientes onde você não deseja que os scripts de automação tenham acesso a um shell no terminal remoto.

Eu criei uma demonstração de trabalho com a qual você pode testar. A retenção de arquivos é baixa, mas você pode usar isso para ver como é fácil automatizar os diretórios / arquivos usando lftp mais sftp chroot . Simplesmente instale o lftp e crie alguns diretórios ou arquivos temp, então:

mkdir -p ~/sftp_test/'date '+%Y%m%d%H%M''/{1,2,3}/{a,b,c}
lftp -u anon10,ymous -e "set net:timeout 4;set net:max-retries 4;mirror -R --parallel=4 --no-perms ~/sftp_test/ /private/;bye" sftp://sftp.ohftp.org
    
por 03.03.2017 / 17:08
4

Você pode usar uma aproximação em lote:

sftp -b batchfile [user@]host

um batchfile inclui uma seqüência de comandos que devem reproduzir a operação "scp" com comandos ftp equivalentes:

binary
cd remote_dir
lcd local_dir
put file
    
por 03.03.2017 / 15:39

Tags