scp preso ao tentar copiar arquivos do Linux para o Windows

2

Eu uso a seguinte sintaxe scp para transferir muitos arquivos do Linux red-hat 5 para o windows machine (sob o diretório Temp).

O servidor SSH já está instalado no Windows. Eu uso essa linha em meus scripts de shell:

sshpass -p '$password'  /usr/bin/scp -o StrictHostKeyChecking=no  $FILE [email protected]:'D:/Temp'

Na maioria dos casos, os arquivos foram transferidos com êxito, mas às vezes scp parece ficar preso durante a transferência de arquivos? Conectividade aparece como ping, etc.

Eu recebo o seguinte erro de scp (depois de um longo tempo):

ssh_exchange_identification: read: Connection reset by peer
  1. por que scp não é estável e está travado? Qual é a solução para esse problema?
  2. Quais são as outras boas alternativas para scp ? (considere que eu preciso de 100% de estabilidade)
por Eytan 29.07.2013 / 22:25

2 respostas

0

Hardware

Eu não suspeitaria de scp . Se estiver funcionando algumas vezes, isso parece muito mais um problema de hardware:

  1. placa de rede (host linux ou windows)
  2. fiação
  3. interruptor / roteador

Eu realizaria um benchmarking para eliminar esses itens primeiro. Você pode ver esses Q & Q & A de U para iniciantes:

Software

Depuração de scp & %código%

Você pode adicionar ssh switches a esses dois comandos para obter uma saída mais detalhada. Por exemplo:

# generate sample data
$ dd if=/dev/zero of=10MB.testfile bs=1k count=10k
10240+0 records in
10240+0 records out
10485760 bytes (10 MB) copied, 0.0422862 s, 248 MB/s

$ ls -l 10MB.testfile 
-rw-rw---- 1 saml saml 10485760 Jul 29 17:09 10MB.testfile

# test copy 10MB file
$ scp -v 10MB.testfile remoteserver:~
Executing: program /usr/bin/ssh host removeserver, user (unspecified), command scp -v -t -- ~
OpenSSH_5.5p1, OpenSSL 1.0.0e-fips 6 Sep 2011
debug1: Reading configuration data /home/saml/.ssh/config
debug1: Applying options for *
debug1: Applying options for removeserver
debug1: Applying options for *
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: auto-mux: Trying existing master
Control socket connect(/home/saml/.ssh/[email protected]:22): Connection refused
debug1: Connecting to 192.168.1.200 [192.168.1.200] port 22.
debug1: Connection established.
debug1: identity file /home/saml/.ssh/id_dsa type 2
debug1: identity file /home/saml/.ssh/id_dsa-cert type -1
debug1: identity file /home/saml/.ssh/qm-dev-servers type 1
debug1: identity file /home/saml/.ssh/qm-dev-servers-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_4.3
debug1: match: OpenSSH_4.3 pat OpenSSH_4*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.5
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host '192.168.1.200' is known and matches the RSA host key.
debug1: Found key in /home/saml/.ssh/known_hosts:30
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/saml/.ssh/id_dsa
debug1: Authentications that can continue: publickey,gssapi-with-mic,password
debug1: Offering public key: /home/saml/.ssh/qm-dev-servers
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: setting up multiplex master socket
ControlSocket /home/saml/.ssh/[email protected]:22 already exists, disabling multiplexing
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env XMODIFIERS = @im=none
debug1: Sending env LANG = en_US.utf8
debug1: Sending command: scp -v -t -- ~
Sending file modes: C0660 10485760 10MB.testfile
Sink: C0660 10485760 10MB.testfile
10MB.testfile                                                                           100%   10MB   3.3MB/s   00:03····
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 10499080, received 4936 bytes, in 4.0 seconds
Bytes per second: sent 2610912.6, received 1227.5
debug1: Exit status 0

Você pode adicionar mais opções -v para obter uma saída mais detalhada. Por exemplo:

$ scp -vvv ...

Firewall do Windows

Ao pesquisar isso um pouco mais, me deparei com essa solução alternativa que faria o backup da noção @Gilles de que isso poderia ser um problema de firewall. A solução foi desabilitar a inspeção com informações de estado no lado do Windows que está executando o serviço -v usando o seguinte comando (como administrador):

% netsh advfirewall set global statefulftp disable

Referências

por 29.07.2013 / 22:57
0

Eu encontrei este problema, scp'ing na porta 22 de uma máquina Linux para uma máquina Linux através de 2 NAT's. Como eu não tinha controle sobre as máquinas Windows ou as caixas NAT, apenas as 2 máquinas linux, minha solução foi trocar o servidor ssh da porta 22 para 2222 e as coisas funcionaram.

Mesmos problemas, scping da máquina windows para a caixa linux funcionou, scping da máquina linux para a minha máquina funcionou, mas o envio de dados da minha máquina para o servidor linux terminou no servidor (Ou o firewall em uma caixa NAT entre ) enviando pacotes TCP RST para o meu servidor.

sintomas com scp:

debug2: channel 0: written 31 to efd 7
rapport.pdf                                                                             0%    0     0.0KB/s   --:-- ETAdebug3: send packet: type 1
packet_write_wait: Connection to 192.168.1.2 port 22: Broken pipe
lost connection

sintomas com git over ssh:

debug2: channel 0: request exec confirm 1
debug3: send packet: type 98
debug2: channel_input_open_confirmation: channel 0: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
debug3: receive packet: type 99
debug2: channel_input_status_confirm: type 99 id 0
debug2: exec request accepted on channel 0
Counting objects: 176, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (90/90), done.
debug2: channel 0: rcvd adjust 98457
debug3: send packet: type 176)   
packet_write_wait: Connection to 192.168.1.2 port 22: Broken pipe
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly

algumas escavações adicionais levaram-me a link Que tinha a solução se você tivesse apenas o controle de sua máquina Linux local:

 there is a broken firewall along the path that is filtering all IP packets that use TCP Timestamp option. 

Então, para manter as coisas funcionando na porta 22, corri isso na minha máquina:

echo 0 | sudo tee /proc/sys/net/ipv4/tcp_timestamps
    
por 13.11.2018 / 11:09