CURL は、ファイル サイズが 120KB 未満の場合に、SFTP で終了コード 18 で失敗し、残りバイトがわずかになりますが、sshd に strace を追加すると失敗しません。

CURL は、ファイル サイズが 120KB 未満の場合に、SFTP で終了コード 18 で失敗し、残りバイトがわずかになりますが、sshd に strace を追加すると失敗しません。

Amazon Linux 2 サーバーの curl に奇妙な問題が発生しています。

約 1 MB のバイトを読み取るだけで終了コード 18 で失敗します。そのため、問題のトラブルシューティングを行うために、ローカル SFTP サーバーをセットアップしました。

私の curl コマンドは次のようになります: curl -u testuser:12345 -o /tmp/testfile sftp://127.0.0.1/home/testuser/testfile

また、ファイル サイズが 120 KB 未満の場合、問題は発生しません。

以下の変更はどれも役に立ちませんでした:

  • 使用していない-o
  • URLを引用
  • 使用して--insecure
  • localhost代わりに使用する127.0.0.1
  • -fURLの前に使用

デバッグ出力では-vvv何も分かりません。

トレース出力を使用しても--trace何も分かりません。

tcpdump データは暗号化されており、何が起こっているのかわかりません。

すべての出力を共有できればよいのですが、リモート デスクトップで作業しているため、ファイルを転送する方法がありません。そのため、何も共有できません。

どうしたの?

はい、sftp セッションを使用してコマンドを取得すると、機能します。

curl 出力:

{ [30000 bytes data]
* transfer closed with 277200 bytes remaining to read
 35  420k   35  150k    0     0  1195k      0 --:--:-- --:--:-- --:--:-- 1201k
 35  420k   35  150k    0     0  1179k      0 --:--:-- --:--:-- --:--:-- 1179k
* Closing connection
curl: (18) transfer closed with 277200 bytes remaining to read

sftp-server debug3 ログ:

Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 0: realpath
Apr 03 21:31:30 my-host sftp-server[3159]: realpath "."
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 0: sent names count 1
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 1: open flags 1
Apr 03 21:31:30 my-host sftp-server[3159]: open "/home/testuser/testfile2" flags READ mode 0100644
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 1: sent handle handle 0
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 2: stat
Apr 03 21:31:30 my-host sftp-server[3159]: stat name "/home/testuser/testfile2"
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 2: sent attrib have 0xf
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 3: read "/home/testuser/testfile2" (handle 0) off 0 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 3: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 4: read "/home/testuser/testfile2" (handle 0) off 30000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 4: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 5: read "/home/testuser/testfile2" (handle 0) off 60000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 5: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 6: read "/home/testuser/testfile2" (handle 0) off 90000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 6: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 7: read "/home/testuser/testfile2" (handle 0) off 120000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 7: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 8: read "/home/testuser/testfile2" (handle 0) off 150000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 8: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 9: read "/home/testuser/testfile2" (handle 0) off 180000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 9: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 10: read "/home/testuser/testfile2" (handle 0) off 210000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 10: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 11: read "/home/testuser/testfile2" (handle 0) off 240000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 11: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 12: read "/home/testuser/testfile2" (handle 0) off 270000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 12: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 13: read "/home/testuser/testfile2" (handle 0) off 300000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 13: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 14: read "/home/testuser/testfile2" (handle 0) off 330000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 14: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 15: read "/home/testuser/testfile2" (handle 0) off 360000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 15: sent data len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 16: read "/home/testuser/testfile2" (handle 0) off 390000 len 19600
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 16: sent data len 19600
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 17: read "/home/testuser/testfile2" (handle 0) off 409600 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 17: sent data len 21400
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 18: read "/home/testuser/testfile2" (handle 0) off 431000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 18: sent status 1
Apr 03 21:31:30 my-host sftp-server[3159]: sent status End of file
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 19: read "/home/testuser/testfile2" (handle 0) off 461000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 19: sent status 1
Apr 03 21:31:30 my-host sftp-server[3159]: sent status End of file
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 20: read "/home/testuser/testfile2" (handle 0) off 491000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 20: sent status 1
Apr 03 21:31:30 my-host sftp-server[3159]: sent status End of file
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 21: read "/home/testuser/testfile2" (handle 0) off 521000 len 30000
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 21: sent status 1
Apr 03 21:31:30 my-host sftp-server[3159]: sent status End of file
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: request 22: read "/home/testuser/testfile2" (handle 0) off 551000 len 12400
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 22: sent status 1
Apr 03 21:31:30 my-host sftp-server[3159]: sent status End of file
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 23: close handle 0
Apr 03 21:31:30 my-host sftp-server[3159]: close "/home/testuser/testfile2" bytes read 431000 written 0
Apr 03 21:31:30 my-host sftp-server[3159]: debug3: request 23: sent status 0
Apr 03 21:31:30 my-host sftp-server[3159]: sent status Success
Apr 03 21:31:30 my-host sftp-server[3159]: debug1: read eof
Apr 03 21:31:30 my-host sftp-server[3159]: session closed for local user testuser from [127.0.0.1]
Apr 03 21:31:30 my-host sshd[3157]: Received disconnect from 127.0.0.1 port 47854:11: Shutdown
Apr 03 21:31:30 my-host sshd[3157]: Disconnected from 127.0.0.1 port 47854
Apr 03 21:31:30 my-host sshd[3154]: pam_unix(sshd:session): session closed for user testuser


{ [16384 bytes data]
100  420k  100  420k    0     0  4020k      0 --:--:-- --:--:-- --:--:-- 4047k
100  420k  100  420k    0     0  3953k      0 --:--:-- --:--:-- --:--:-- 3953k
* Connection #0 to host 127.0.0.1 left intact

答え1

実際のアドレスのマスクとして 127.0.0.1 を使用しているか、何らかの転送が行われているものと想定します。

やってみました:

curl -u testuser:12345 -o /tmp/テストファイル scp://127.0.0.1/home/testuser/テストファイル

scp は sftp とは異なり、単一のチャネルで動作するように設計されており、また、次のパケットを送信する前に各パケットの確認を必要としません。scp は、バイパスしようとしているファイアウォールを通過できる場合があります。

関連情報