AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 135618
Accepted
Tom Feiner
Tom Feiner
Asked: 2010-04-26 03:07:29 +0800 CST2010-04-26 03:07:29 +0800 CST 2010-04-26 03:07:29 +0800 CST

É possível usar rsync sobre sftp (sem um shell ssh)?

  • 772

Rsync sobre ssh, funciona muito bem todas as vezes.

No entanto, tentar rsync para um host que permite apenas logins sftp, mas não logins ssh, fornece o seguinte erro:

rsync -av /source ssh user@remotehost:/target/

incompatibilidade de versão do protocolo - seu shell está limpo? (consulte a página de manual do rsync para obter uma explicação) erro de rsync: incompatibilidade de protocolo (código 2) em compat.c(171) [sender=3.0.6]

Aqui está a seção relevante da página de manual do rsync:

Essa mensagem geralmente é causada por seus scripts de inicialização ou recurso de shell remoto produzindo lixo indesejado no fluxo que o rsync está usando para seu transporte. A maneira de diagnosticar esse problema é executar seu shell remoto assim:

          ssh remotehost /bin/true > out.dat

então olhe para out.dat. Se tudo estiver funcionando corretamente, out.dat deve ser um arquivo de comprimento zero. Se você estiver recebendo o erro acima do rsync, provavelmente descobrirá que out.dat contém algum texto ou dados. Olhe para o conteúdo e tente descobrir o que está produzindo. A causa mais comum são scripts de inicialização de shell configurados incorretamente (como .cshrc ou .profile) que contêm instruções de saída para logins não interativos.

Tentar isso no meu sistema produziu o seguinte em out.dat:

ssh-dummy-shell: Comando não permitido.

Como eu pensei, o host não está permitindo logins ssh.

O link a seguir mostra que é possível realizar esta tarefa usando fuse com sshfs - porém é extremamente lento e não adequado para uso em produção.

Existe alguma chance de fazer o rsync sftp funcionar?

ssh rsync sftp
  • 8 8 respostas
  • 131576 Views

8 respostas

  • Voted
  1. Best Answer
    David Spillett
    2010-04-26T03:39:05+08:002010-04-26T03:39:05+08:00

    Infelizmente não diretamente. rsyncrequer um link limpo com um shell que permitirá iniciar a cópia remota do rsync, quando executado dessa maneira.

    Se você tiver alguma maneira de executar processos de escuta de longa duração no host, tente iniciar o rsync escutando manualmente as conexões em uma porta não privilegiada, mas a maioria das técnicas para fazer isso exigiria acesso adequado ao shell via SSH também, e depende de os arranjos de firewall do host permitindo conexões na porta que você escolheu (e o host que tem o rsync instalado em primeiro lugar). Executar o rsync como um serviço endereçável publicamente (em vez de indiretamente via SSH ou similar) geralmente não é recomendado para dados não públicos.

    Se o host permite scripts em PHP ou similar e não o bloqueia para que processos extras não possam ser execeditados por scripts de usuário, você pode tentar iniciar o rsync no modo de escuta dessa maneira. Se o seu fim for conectável (você está executando o SSH acessível ao mundo exterior), você pode tentar isso ao contrário - faça um script executar rsync no servidor, mas em vez de ouvir as conexões de entrada, entre em contato com o serviço local e sincronize dessa maneira. Isso ainda depende da instalação do rsync no host que não é um dado, ou que você pode fazer upload de uma cópia de trabalho, mas não tem as implicações de segurança de executar um daemon rsync de maneira endereçável publicamente e conversar com ele por um não criptografado canal.

    Brincar como descrito acima pode ser contra as políticas de hosts, mesmo que funcione, e pode fazer com que você seja expulso. É melhor perguntar se um shell completo pode ser habilitado para essa conta e abandonar o rsync para esse host ou abandonar esse host e mudar para outro lugar se eles não fizerem isso.

    • 43
  2. xioxox
    2018-04-01T02:13:22+08:002018-04-01T02:13:22+08:00

    Uma alternativa ao uso do rsync é usar o lftp (que pode se conectar ao sftp) e usar o comando mirror. Por exemplo, pode-se fazer

    lftp
    ~> open -u user,password sftp://host.com
    ~> mirror remotedir outdir
    ~> quit
    
    • 27
  3. Kamil Kisiel
    2010-04-26T07:59:30+08:002010-04-26T07:59:30+08:00

    Teoricamente, sim. Você pode montar o sistema de arquivos remoto em sua máquina local usando FUSE . Em seguida, você pode executar uma cópia local do rsync entre o diretório montado e o diretório local. Eu não tentei isso pessoalmente, mas deve funcionar em teoria. Provavelmente seria muito menos eficiente do que executar o rsync por SSH, pois seria necessário transferir pelo menos parte de cada arquivo para realizar a comparação.

    • 23
  4. jonathan
    2011-09-21T04:04:59+08:002011-09-21T04:04:59+08:00

    um pouco atrasado, mas aqui está como eu faço isso, usando sshfs

      source /scratch/slimdata/password.sh
      mkdir tmp_mnt
      echo $PASSWORD | sshfs user@host:dir tmp_mnt -o password_stdin
      rsync -rutL --delete tmp_mnt/ to_sync/
      fusermount -u tmp_mnt
      rmdir tmp_mnt
    
    • 6
  5. ominug
    2021-04-16T10:01:41+08:002021-04-16T10:01:41+08:00

    Em vez de Rsync, o rclone suporta sincronização de/para e montagem de compartilhamentos de rede SFTP.

    1. Instalar rclone
    2. rclone confige siga as etapas para adicionar uma nova configuração de endpoint remoto. Entrada sftpna seleção de back-end do protocolo.
    3. rclone sync local_path remote:remote_path( documentos )

    IMO, o rclone fornece uma CLI mais amigável para automação do que o LFTP .

    Eu sei que isso não responde à pergunta original, mas provavelmente às necessidades de algumas pessoas que vêm aqui.

    • 6
  6. Stéphane Gourichon
    2018-01-09T02:04:19+08:002018-01-09T02:04:19+08:00

    Opção que combina o melhor de tudo

    Parece ter as seguintes vantagens que outras respostas aqui não têm:

    • todos os benefícios do SSH (seguro)
    • se beneficia totalmente do rsync (protocolo com eficiência de largura de banda, todas as opções de rsync, como limitação de largura de banda)
    • realmente eficiente (ao contrário do sshfs que às vezes salva os dias, mas ainda é lento na prática)
    • não precisa de comandos shell arbitrários do lado do servidor
    • não precisa de servidor para permitir túneis ssh
    • não precisa de servidor para executar um rsyncdaemon

    Ainda não testei, mas usei com sucesso todos esses recursos, exceto o rrsync.

    Como fazer isso

    • crie uma chave localmente com ssh-keygen(recurso openSSH)
    • permitir login apenas com essa chave específica, com uma entrada no servidor ~/.ssh/authorized_keys(recurso openSSH)
    • associe essa chave a um comando específico, com ~/.ssh/authorized_keys(recurso openSSH) usando como comando o script rrsyncdistribuído com rsync, algo comocommand="$HOME/bin/rrsync -ro ~/backups/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-

    Então você pode rsync do cliente normalmente.

    Se você precisar de mais detalhes

    Restringindo o acesso SSH ao rsync | Guy Rutenberg

    Um passo além do link acima

    O comando no final dessa página pode ser encurtado. Em ~/.ssh/configcrie uma estrofe assim:

    Host remote # can be host or ip or custom-label User user # login on remote host HostName optional-dns-resolvable-host-or-ip # if label used above IdentityFile ~/.ssh/id_remote_backup

    então seu comando rsync do cliente

    rsync -e "ssh -i $HOME/.ssh/id_remote_backup" -av user@remote: etc2/
    

    torna-se

    rsync -av user@remote: etc2/
    
    • 5
  7. Ignacio Vazquez-Abrams
    2010-04-26T03:23:59+08:002010-04-26T03:23:59+08:00

    Não. O rsync funciona executando o rsync no outro lado e se comunicando com ele, o que significa que alguma forma de acesso ao shell é necessária.

    • 3
  8. Dan Andreatta
    2010-04-26T04:17:56+08:002010-04-26T04:17:56+08:00

    Uma alternativa seria iniciar o rsync como daemon e conectar-se a ele por meio de um túnel SSH.

    • 2

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Como você reinicia o php-fpm?

    • 18 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Resolver o nome do host do endereço IP

    • 8 respostas
  • Marko Smith

    Como posso classificar a saída du -h por tamanho

    • 30 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    binaryorganic Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada? 2010-10-26 08:45:39 +0800 CST
  • Martin Hope
    tobym O que exatamente significam as cores nas barras de status htop? 2010-09-14 12:22:43 +0800 CST
  • Martin Hope
    MikeN No Nginx, como posso reescrever todas as solicitações http para https mantendo o subdomínio? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 Qual é a diferença entre colchetes duplos e simples no bash? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    Kyle Brandt Como funciona a sub-rede IPv4? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve