동일한 Ubuntu 18.04 LTS를 실행하는 3개의 VM 서버가 있습니다. 증분 IP 범위가 있는 식별자:
99.99.99.140
99.99.99.141
99.99.99.142
그 중 하나(.141)가 다음으로 데이터를 보내고 있습니다.어느World Wide Web에서 호스팅됩니다. 파일을 복사하기 위해 아주 간단한 테스트를 실행하고 있습니다.
#!/bin/bash
# scp-speed-test.sh
# Author: Alec Jacobson alecjacobsonATgmailDOTcom
#
# Test ssh connection speed by uploading and then downloading a 10000K test
# file (optionally user-specified size)
#
# Usage:
# ./scp-speed-test.sh user@hostname [test file size in KBs]
#
ssh_server=$1
test_file=".scp-test-file"
test_size=$2
# generate a x kilobytes random file
echo "Generating $test_size KB test file..."
`dd if=/dev/urandom of=$test_file bs=$(echo "$test_size*1024" | bc) \
count=1 &> /dev/null`
# upload test
echo "Testing upload to $ssh_server..."
up_speed=`scp -v $test_file $ssh_server:$test_file 2>&1 | \
grep "Bytes per second" | \
sed "s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\1/g"`
up_speed=`echo "($up_speed*0.0009765625*100.0+0.5)/1*0.01" | bc`
# download test
echo "Testing download to $ssh_server..."
down_speed=`scp -v $ssh_server:$test_file $test_file 2>&1 | \
grep "Bytes per second" | \
sed "s/^[^0-9]*\([0-9.]*\)[^0-9]*\([0-9.]*\).*$/\2/g"`
down_speed=`echo "($down_speed*0.0009765625*100.0+0.5)/1*0.01" | bc`
# clean up
echo "Removing test file on $ssh_server..."
`ssh $ssh_server "rm $test_file"`
echo "Removing test file locally..."
`rm $test_file`
# print result
echo ""
echo "Upload speed: $up_speed KB/s"
echo "Download speed: $down_speed KB/s"
세 서버 모두에 업로드하는 경우61킬로바이트 파일, 모두 사용 가능:
ZENBOOK:~$ ./scp-speed-test.sh [email protected] 61
Generating 61 KB test file...
Testing upload to [email protected]...
Testing download to [email protected]...
Removing test file on [email protected]...
Removing test file locally...
Upload speed: 78.98 KB/s
Download speed: 73.88 KB/s
ZENBOOK:~$ ./scp-speed-test.sh [email protected] 61
Generating 61 KB test file...
Testing upload to [email protected]...
Testing download to [email protected]...
Removing test file on [email protected]...
Removing test file locally...
Upload speed: 77.13 KB/s
Download speed: 74.59 KB/s
ZENBOOK:~$ ./scp-speed-test.sh [email protected] 61
Generating 61 KB test file...
Testing upload to [email protected]...
Testing download to [email protected]...
Removing test file on [email protected]...
Removing test file locally...
Upload speed: 73.11 KB/s
Download speed: 73.85 KB/s
그러나 위의 내용을 반복하면62킬로바이트, 갑자기 그 중 두 개가 실패했습니다(.140 및 .142).
ZENBOOK:~$ ./scp-speed-test.sh [email protected] 62
Generating 62 KB test file...
Testing upload to [email protected]...
(standard_in) 1: syntax error
(standard_in) 1: syntax error
Testing download to [email protected]...
Removing test file on [email protected]...
Removing test file locally...
Upload speed: KB/s <-----------------------------------
Download speed: 65.02 KB/s
ZENBOOK:~$ ./scp-speed-test.sh [email protected] 62
Generating 62 KB test file...
Testing upload to [email protected]...
Testing download to [email protected]...
Removing test file on [email protected]...
Removing test file locally...
Upload speed: 81.97 KB/s
Download speed: 75.92 KB/s
ZENBOOK:~$ ./scp-speed-test.sh [email protected] 62
Generating 62 KB test file...
Testing upload to [email protected]...
(standard_in) 1: syntax error
(standard_in) 1: syntax error
Testing download to [email protected]...
Removing test file on [email protected]...
Removing test file locally...
Upload speed: KB/s <-----------------------------------
Download speed: 57.48 KB/s
위에 표시된 것처럼 .140이나 .142 모두 파일을 올바르게 수신하지 못합니다. 하지만,.141대량(1MB 이상)의 데이터를 호스트에 전송할 때 문제를 일으키는 문제입니다.
.140에서 실행 시 파일 크기는 62KB입니다.scp -vvv .scp-test-file [email protected]:.scp-test-file
debug1: Sending command: scp -v -t .scp-test-file
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
Sending file modes: C0644 63488 .scp-test-file
debug2: channel 0: rcvd ext data 33
Sink: C0644 63488 .scp-test-file
.scp-test-file 0% 0 0.0KB/s --:-- ETA
debug2: channel 0: written 33 to efd 7
약 20초 후 시간 초과:
Sink: C0644 63488 .scp-test-file
.scp-test-file 0% 0 0.0KB/s --:-- ETA
debug2: channel 0: written 33 to efd 7
debug3: send packet: type 1
Connection reset by 99.99.99.140 port 22
lost connection
나는 읽었다https://superuser.com/questions/395356/scp-doesnt-work-but-ssh-does, 그러나 scp가 작동하지 않는 것이 아니라 62KB가 넘는 항목에서는 작동하지 않습니다.
PMTU 블랙홀 방향의 다른 지점들,https://serverfault.com/questions/120505/problems-with-scp-stalling-during-file-copy-over-vpn, 하지만 비슷한 것을 찾을 수 없습니다.
네트워크 인터페이스에서 diff를 실행해도 결과가 나오지 않습니다.
ZENBOOK:~$ diff <(ssh [email protected] 'ifconfig | grep mtu | grep -v veth') <(ssh [email protected] 'ifconfig | grep mtu | grep -v veth')
ZENBOOK:~$ diff <(ssh [email protected] 'ifconfig | grep mtu | grep -v veth') <(ssh [email protected] 'ifconfig | grep mtu | grep -v veth')
ZENBOOK:~$ diff <(ssh [email protected] 'ifconfig | grep mtu | grep -v veth') <(ssh [email protected] 'ifconfig | grep mtu | grep -v veth')
ZENBOOK:~$
이 문제를 어떻게 더 디버깅할 수 있나요?
편집: 댓글에서:
가능한 다른 원인을 제거하기 위해 먼저 각 대상 시스템의 로그인 스크립트가 메시지나 터미널 제어 이스케이프 코드를 출력하지 않았는지 확인했습니다(연결이 대화형이 아닌 경우). 예를 들어 SSH를 실행하면[이메일 보호됨]/bin/true | od -t x1z, 출력은 0000000이어야 하며 다른 것은 없습니다. ... – 어제 통신
ZENBOOK:~$ ssh [email protected] /bin/true | od -t x1z
0000000
ZENBOOK:~$ ssh [email protected] /bin/true | od -t x1z
0000000
ZENBOOK:~$ ssh [email protected] /bin/true | od -t x1z
0000000