Rsync sobre ssh, funciona muito bem sempre.
No entanto, tentar rsync para um host que permita apenas logons 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 do manual rsync para obter uma explicação). Erro rsync: incompatibilidade de protocolo (código 2) em compat.c (171) [remetente = 3.0.6]
Aqui está a seção relevante da página de manual do rsync:
Essa mensagem geralmente é causada pelos scripts de inicialização ou pelo recurso remoto do shell, produzindo lixo indesejado no fluxo que o rsync está usando para seu transporte. A maneira de diagnosticar esse problema é executar o shell remoto assim:
ssh remotehost /bin/true > out.dat
então veja out.dat. Se tudo estiver funcionando corretamente, out.dat deve ser um arquivo de tamanho zero. Se você está recebendo o erro acima do rsync, provavelmente encontrará que o out.dat contém algum texto ou dados. Observe o conteúdo e tente descobrir o que está produzindo. A causa mais comum são os scripts de inicialização do shell configurados incorretamente (como .cshrc ou .profile) que contêm instruções de saída para logons não interativos.
Tentar isso no meu sistema produziu o seguinte em out.dat:
ssh-dummy-shell: comando não permitido.
Como eu pensava, o host não está permitindo logins ssh.
O link a seguir mostra que é possível realizar essa tarefa usando o fusível com sshfs - no entanto, é extremamente lento e não é adequado para uso em produção.
Existe alguma chance de fazer o rsync sftp funcionar?
csync /home/csync sftp://[email protected]:2222/home/csync
veja esta resposta .lftp -e "mirror -eRv /local/dir/ /remote/dir; quit;" sftp://user@server:port
Respostas:
Infelizmente não diretamente.
rsync
requer um link limpo com um shell que permita iniciar a cópia remota dersync
, quando executado dessa maneira.Se você tem 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 também acesso adequado ao shell via SSH, e depende os arranjos de firewall dos hosts que permitem conexões na porta que você escolheu (e o host com o rsync instalado em primeiro lugar). A execução do rsync como um serviço publicamente endereçável (em vez de indiretamente via SSH ou similar) geralmente não é recomendada para dados não públicos.
Se o seu host permitir scripts em PHP ou similar e não o bloquear, para que processos extras não possam ser
exec
editados pelos scripts do usuário, tente iniciar o rsync no modo de escuta dessa maneira. Se o seu final for conectável (você está executando o SSH acessível ao mundo externo), tente o contrário - faça com que um script execute rsync no servidor, mas em vez de ouvir as conexões recebidas, entre em contato com o serviço local e sincronize dessa maneira. Isso ainda depende do fato de o rsync estar realmente instalado 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 forma endereçável publicamente e conversar com ele por meio de uma criptografia não criptografada. canal.Brincar como descrito acima pode ser contra as políticas de hosts, mesmo que funcione, e você pode ser expulso. É melhor você perguntar se um shell completo pode ser ativado para essa conta e abandonar o rsync para esse host ou abandonar o host e mudar para outro lugar, caso não o façam.
fonte
Teoricamente, sim. Você pode montar o sistema de arquivos remoto em sua máquina local usando o FUSE . Em seguida, você pode executar uma cópia local do rsync entre o diretório montado e o diretório local. Eu pessoalmente não tentei isso, mas deve funcionar em teoria. Provavelmente seria muito menos eficiente que executar o rsync sobre SSH porque seria necessário transferir pelo menos parte de cada arquivo para realizar a comparação.
fonte
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
fonte
um pouco tarde, mas aqui está como eu faço isso, usando sshfs
fonte
Não. O rsync funciona executando o rsync do outro lado e se comunicando com ele, o que significa que é necessária alguma forma de acesso ao shell.
fonte
Uma alternativa seria iniciar o rsync como daemon e conectar-se a ele através de um túnel SSH.
fonte
authorized_keys
que permita um túnel específico e execute, por exemplosleep 86400
. Então o lado do cliente poderia entãorsync
através do túnel.Opção que combina o melhor de tudo
Parece ter as seguintes vantagens que outras respostas aqui não têm:
rsync
daemonAinda não testei, mas usei com sucesso todos esses recursos, exceto
rrsync
.Como fazer isso
ssh-keygen
(recurso openSSH)~/.ssh/authorized_keys
(recurso openSSH)~/.ssh/authorized_keys
(recurso openSSH), usando como comando o scriptrrsync
distribuído com o 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 reduzido. Em
~/.ssh/config
criar uma estrofe como esta: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
torna-se
fonte
rsync
a execução, evitando o aspecto do SFTP. Se você receber um servidor SFTP de outra pessoa sobre o qual você não tem controle, esta resposta não poderá solucionar o problema.