同じUbuntu 18.04 LTSを実行している3つのVMサーバーがあります。増分IP範囲を持つ識別子:
99.99.99.140
99.99.99.141
99.99.99.142
そのうちの1つ(.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"
3 つのサーバーすべてにアップロードする場合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キロバイト、突然そのうちの2つが失敗しました(.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を実行すると[Eメール保護]/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