![对于 SFTP,如果文件大小小于 120KB,仅剩几个字节,CURL 会失败,退出代码为 18,但是当我将 strace 添加到 sshd 时不会出现这种情况](https://linux22.com/image/1704978/%E5%AF%B9%E4%BA%8E%20SFTP%EF%BC%8C%E5%A6%82%E6%9E%9C%E6%96%87%E4%BB%B6%E5%A4%A7%E5%B0%8F%E5%B0%8F%E4%BA%8E%20120KB%EF%BC%8C%E4%BB%85%E5%89%A9%E5%87%A0%E4%B8%AA%E5%AD%97%E8%8A%82%EF%BC%8CCURL%20%E4%BC%9A%E5%A4%B1%E8%B4%A5%EF%BC%8C%E9%80%80%E5%87%BA%E4%BB%A3%E7%A0%81%E4%B8%BA%2018%EF%BC%8C%E4%BD%86%E6%98%AF%E5%BD%93%E6%88%91%E5%B0%86%20strace%20%E6%B7%BB%E5%8A%A0%E5%88%B0%20sshd%20%E6%97%B6%E4%B8%8D%E4%BC%9A%E5%87%BA%E7%8E%B0%E8%BF%99%E7%A7%8D%E6%83%85%E5%86%B5.png)
Amazon Linux 2 服务器中的 curl 存在奇怪的问题。
退出代码为 18,读取仅剩约 1MB 字节,失败。因此,为了解决该问题,我设置了本地 SFTP 服务器。
所以我的 curl 命令是这样的:
curl -u testuser:12345 -o /tmp/testfile sftp://127.0.0.1/home/testuser/testfile
如果文件大小小于~120KB,则不会出现此问题。
以下更改均无帮助:
- 不使用
-o
- 引用网址
- 使用
--insecure
- 使用
localhost
而不是127.0.0.1
-f
在网址前使用
使用调试输出-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 服务器 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 测试用户:12345 -o /tmp/testfile scp://127.0.0.1/home/testuser/testfile
与 sftp 不同,scp 被设计为在单个通道上工作,而且 scp 不需要在发送下一个数据包之前确认每个数据包。您可能会发现 scp 能够穿越您试图绕过的防火墙。