Ao seguir as instruções para fazer backups rsync fornecidos aqui: http://troy.jdmz.net/rsync/index.html
Recebo o erro "incompatibilidade de versão do protocolo - seu shell está limpo?"
Li em algum lugar que precisava silenciar o prompt (PS1 = "") e o motd (.hushlogin) é exibido para lidar com isso. Eu fiz isso, o prompt e o banner de login (MOTD) não aparecem mais, mas o erro ainda aparece quando executo:
rsync -avvvz -e "ssh -i /home/thisuser/cron/thishost-rsync-key" remoteuser@remotehost:/remote/dir /this/dir/
O cliente ssh e o servidor sshd estão usando a versão 2 do protocolo.
Qual poderia ser o problema? Obrigado.
[EDIT] Encontrei http://www.eng.cam.ac.uk/help/jpmg/ssh/authorized_keys_howto.html que indica que às vezes é necessário "Forçar v2 usando o sinalizador -2 para ssh ou slogin
ssh -2 -i ~/.ssh/my_private_key remotemachine"
Não está claro que isso resolveu o problema, pois acho que coloquei essa alteração APÓS o erro ser alterado, mas o fato é que o erro evoluiu para outra coisa. Vou atualizar isso quando souber mais. E certamente tentarei a sugestão de executar isso em um shell do emacs - obrigado.
ESC x shell
e façaexport TERM=xterm; ssh remotehost ls
. Se algum caractere de controle ou outra saída falsa aparecer, é isso que você precisa caçar.--rsync-path
) não muda nada para mim.Respostas:
Um dos seus scripts de login (.bashrc / .cshrc / etc.) Provavelmente está enviando dados para o terminal (quando não deveria ser). Isso está causando o erro do ssh quando ele está se conectando e se preparando para copiar, pois começa a receber dados extras que não esperava. Remova a saída gerada nos scripts de inicialização.
Você pode verificar se o seu terminal é interativo e apenas produz texto usando o seguinte código em um bashrc. Também existe algo equivalente para outras conchas:
ou, alternativamente, assim, já que o parâmetro especial
-
contémi
quando o shell é interativo:Para obter mais informações, consulte: rsync via ssh do linux para incompatibilidade de protocolo do windows sbs 2003
Para diagnosticar isso, verifique se o seguinte é o resultado que você obtém quando faz o ssh no host:
Se você receber novas linhas ou outros dados, saberá que está sendo enviada uma saída extra. Você pode renomear seu arquivo .bashrc / .cshrc / .profile / etc. arquivos para outra coisa, para que eles não produzam saída extra. Claro que ainda existem arquivos do sistema que podem causar isso. Nesse caso, verifique com o administrador do sistema se os arquivos do sistema não produzem dados.
fonte
echo
no~/.bashrc
, Thx. Você fez o meu diaExiste uma maneira simples de testar se o seu shell está limpo, para uma conexão ssh: execute um comando a partir da conexão ssh, em vez de iniciar um shell interativo. O
false
comando será encerrado imediatamente sem produzir nenhuma saída, portanto é um bom teste:Se essa linha de comando produzir alguma saída, um dos seus scripts de inicialização é o responsável:
Outra coisa para verificar se você está recebendo esse erro é se o rsync está instalado e localizável pelo ssh:
Se o rsync não estiver no caminho, você verá algo como:
Você pode corrigir isso instalando o rsync ou, se estiver instalado, mas em um local incomum, passando o local para a linha de comando do rsync:
fonte
Isso geralmente é causado pelas coisas de logon do seu shell que produzem coisas em um shell não interativo. Você pode testar se este é o caso, fazendo:
Se testfile NÃO for 0 bytes, o problema é que seu shell está produzindo algo. Verificação
/etc/profile
,.profile
,.bashrc
,.cshrc
, etc. Se for, você pode alterá-lo para verificar se o seu terminal é um texto interativo e apenas a saída usando o seguinte código em um bashrc. Também existe algo equivalente para outras conchas:ou, alternativamente, assim, já que o parâmetro especial
-
contémi
quando o shell é interativo:No entanto, se o arquivo de teste é de fato 0 bytes, seu shell está se comportando, mas é possível que você tenha apenas uma versão muito antiga do rsync. Você pode dizer ao cliente final (supondo que seja o final mais recente) que não anuncie uma versão tão alta que a versão antiga do servidor rysnc não a reconheça. Você pode fazer isso usando a
--protocol=
opção No meu caso, usando--protocol=30
fez o truque.Se você ainda estiver tendo problemas, tente ssh enquanto o usuário rsysnc está se conectando e tente executar
rsync --version
para verificar se o shell pode encontrar o rsync. Se você receber algo que diz que o comando não foi encontrado, o rsync pode não estar instalado na máquina à qual você está se conectando ou pode não estar no caminho. O Rsync tem opções para especificar o caminho da extremidade remota, leia as páginas de manual.fonte
--protocol
o que resolveu o meu problema com um servidor 2.5.6 (protocolo versão 26) e uma 3.1.0 cliente (versão do protocolo 31)Este é um caso especial das outras respostas, mas não é muito diferente a partir de então.
Para executar um rsync via ssh, você precisa de acesso ao shell no ssh para executar o comando rsync remoto. Se sua conta ssh permitir apenas scp / sftp, você não poderá iniciar a remoção do rsync e falhará ao fornecer esse erro.
Isso pode ser testado com o mesmo comando acima
Este deve falhar e este deve ser sucesso
Isso prova que você tem um acesso apenas por sftp.
Se você quiser e tiver permissões para fazê-lo, poderá desativar o acesso apenas por sftp para esse usuário, editando as entradas
/etc/ssh/sshd_config
e verifiquematch
eforcecommand
.Você também pode verificar esta postagem
fonte
Fiquei
protocol version mismatch -- is your shell clean?
simplesmente porque ainda não tinha instalado o rsync na outra extremidade.sudo yum install rsync
resolveu o problema.fonte
O prompt não será exibido ao executar um comando diretamente, e de maneira não interativa. Um simples google exibe o primeiro resultado: http://marc.info/?l=rsync&m=100263876212594&w=2 E como o shell pode ser invocado, ele não deve exibir nada no modo não interativo, como digitar apenas " bash "em um prompt existente, nada além do novo prompt deve aparecer.
fonte
Isso pode ser causado por uma mensagem de logon no host remoto, como "Sua senha expirará em 6 dias", que o RSYNC não espera
fonte