0

所以我在玩SCP,有几个问题。首先,作为参考,这是我的 SCP 会话的日志文件:

-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0021, network: 0.0001s)
00000000  62:00:00:00:00:00:00:00:04:65:78:65:63:01:00:00  b........exec...
00000010  00:1d:73:63:70:20:2d:74:20:2f:68:6f:6d:65:2f:xx  ..scp -t /home/u
00000020  xx:xx:xx:xx:xx:xx:2f:7a:7a:7a:2f:61:62:63:64     sernam/zzz/abcd

...

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.2607, network: 0.2576s)
00000000  5e:00:00:00:00:00:00:00:01:00                    ^.........

-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0014, network: 0.0002s)
00000000  5e:00:00:00:00:00:00:00:1f:43:30:36:34:34:20:35  ^........C0644 5
00000010  20:2f:68:6f:6d:65:2f:xx:xx:xx:xx:xx:xx:xx:2f:7a   /home/usernam/z
00000020  7a:7a:2f:61:62:63:64:0a                          zz/abcd.

<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0509, network: 0.0483s)
00000000  5e:00:00:00:00:00:00:00:39:01:73:63:70:3a:20:65  ^.......9.scp: e
00000010  72:72:6f:72:3a:20:75:6e:65:78:70:65:63:74:65:64  rror: unexpected
00000020  20:66:69:6c:65:6e:61:6d:65:3a:20:2f:68:6f:6d:65   filename: /home
00000030  2f:xx:xx:xx:xx:xx:xx:xx:2f:7a:7a:7a:2f:61:62:63  /usernam/zzz/abc
00000040  64:0a                                            d.
  1. 有没有办法通过 stderr (SSH_MSG_CHANNEL_EXTENDED_DATA) 而不是 stdout (SSH_MSG_CHANNEL_DATA) 发送 scp 错误?

  2. 为什么文件名指定了两次?一次在初始 scp 调用中,一次在“C0644 5 文件名”部分?似乎只需要一个?(在我的测试中,为第二个做基本名称会使错误消失,但它似乎仍然是多余的)

  3. 为什么 SCP 发送那些空字节 SSH_MSG_CHANNEL_DATA 数据包?我看过的所有 SCP 客户端都没有通过 SSH_MSG_CHANNEL_REQUEST 创建任何类型的 pty 那么为什么 SCP 看起来好像有一个,为什么 SSH 服务器允许它呢?

  4. 在最初的“C0644 5 文件名”部分,scp -t运行命令后,为什么需要“C”?这是为了权限,但为什么不直接省略 C 并让它成为模式的八进制值的字符串表示形式?

(顺便说一句,我包括 rcp 标签,因为我认为 rcp 和 scp 应该非常相似)

4

1 回答 1

1
  1. 至少在 Linux 上,scp(1) 确实会在发起端向 stderr 发送错误,这可以通过在末尾运行各种失败的命令以将正常的 stdout 重定向到 /dev/null 来确认,从而仅显示标准错误。

  2. 第一个文件名出现在“scp -t”中,这是告诉远程 SSH 做什么的一部分。后一种情况发生在通过 SSH 链接进行通信的 SCP 协议中。有关详细信息,请参阅下面提到的 URL。

  3. 这个我不确定——它需要更多的挖掘。

  4. strace(1) 输出确认了“C”,我在write(7, "C0664 16245 xdrvlib.c\n", 22) = 22这里看到。“C”表示文件副本,其他可能是“D”和“E”表示目录副本,“T”表示时间。有关更多信息,请参见漂亮的网页:https://blogs.oracle.com/janp/entry/how_the_scp_protocol_works

于 2013-05-17T05:05:16.863 回答