다음 scp 구문을 사용하여 Linux red-hat 5에서 Windows 컴퓨터(Tem 디렉토리 아래)로 많은 수의 파일을 전송했습니다.
SSH 서버는 Windows 시스템에 이미 설치되어 있습니다. 쉘 스크립트에서 다음 줄을 사용합니다.
sshpass -p '$password' /usr/bin/scp -o StrictHostKeyChecking=no $FILE [email protected]:'D:/Temp'
대부분의 경우 파일 전송이 성공하지만 때로는 scp
파일 전송 중에 멈추는 것 같나요? 핑 등 연결이 정상으로 표시됩니다.
scp
(오랜 시간이 지난 후) 다음과 같은 오류가 발생합니다 .
ssh_exchange_identification: read: Connection reset by peer
- 왜
scp
불안정하고 멈추나요? 이 문제에 대한 해결책이 있습니까? - 또 어떤 좋은 옵션이 있나요
scp
? (100% 안정성이 필요하다는 점을 고려하면)
답변1
하드웨어
나는 그다지 회의적이지 않을 것입니다 scp
. 가끔 작동한다면 다음 중 하나에 하드웨어 문제가 있는 것 같습니다.
- 네트워크 카드(Linux 또는 Windows 호스트)
- 배선
- 스위치/라우터
먼저 이러한 항목을 제거하기 위해 몇 가지 벤치마크를 수행하겠습니다. 초보자를 위한 다음 U&L Q&A를 확인하실 수 있습니다.
소프트웨어
디버그 scp
및ssh
-v
더 자세한 출력을 얻으려면 두 명령에 스위치를 추가 할 수 있습니다 . 예를 들어:
# 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
-v
더 자세한 출력을 얻으려면 다른 스위치를 추가할 수 있습니다 . 예를 들어:
$ scp -vvv ...
윈도우 방화벽
이에 대해 더 많은 조사를 하는 동안 방화벽 문제일 수 있다는 @Gilles의 주장을 뒷받침하는 해결 방법을 발견했습니다. 해결 방법은 sshd
다음 명령(관리자 권한)을 사용하여 서비스가 실행 중인 Windows 측에서 상태 확인을 비활성화하는 것입니다.
% netsh advfirewall set global statefulftp disable
인용하다
답변2
2개의 NAT를 통해 Linux 시스템에서 포트 22의 Linux 시스템으로 scp'ing하는 동안 이 문제가 발생했습니다. 저는 Windows 시스템이나 NAT 상자를 제어할 수 없고 Linux 시스템 2개만 제어할 수 있으므로 제 솔루션은 다음과 같습니다.SSH 서버를 포트 22에서 2222로 전환하십시오.모든 것이 순조롭게 진행되기 시작했습니다.
같은 문제, Windows 컴퓨터에서 Linux 컴퓨터로 scping이 작동하고 Linux 컴퓨터에서 내 컴퓨터로 scping이 작동하지만 내 컴퓨터에서 Linux 서버로 데이터를 보내는 것은 서버(또는 중간 NAT 상자의 방화벽)에서 보낸 RST로 끝납니다. 패킷은 내 컴퓨터로 전송됩니다. 섬기는 사람.
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
SSH를 통한 git의 증상:
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
좀 더 파헤쳐 보니https://serverfault.com/questions/411629/tcp-connection-reset-in-linuxstrange-packet-loss-but-not-on-windows 로컬 Linux 시스템만 제어할 수 있는 경우 해결책이 있습니다.
there is a broken firewall along the path that is filtering all IP packets that use TCP Timestamp option.
따라서 포트 22에서 작업을 계속하기 위해 내 컴퓨터에서 다음 명령을 실행했습니다.
echo 0 | sudo tee /proc/sys/net/ipv4/tcp_timestamps
답변3
제 경우 상황은 간단했습니다. 대상 컴퓨터에 디스크 공간이 부족했습니다.