这很奇怪。FWIW 它似乎不是 phpseclib 问题,而是服务器问题。如果您查看日志,您将看到两个<- NET_SSH2_MSG_CHANNEL_EOF
数据包。nproc 响应就在第一个 ( <- NET_SSH2_MSG_CHANNEL_DATA
) 之前,但第二个没有类似的响应。
您发出的每个 nproc 请求都会导致服务器最终发送退出状态 SSH_MSG_CHANNEL_REQUEST。这是您的日志文件中的第一个:
<- NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0839, network: 0.0838s)
00000000 00:00:00:00:00:00:00:0b:65:78:69:74:2d:73:74:61 ........exit-sta
00000010 74:75:73:00:00:00:00:00 tus.....
这是您的日志文件中的第二个
<- NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0461, network: 0.046s)
00000000 00:00:00:00:00:00:00:0b:65:78:69:74:2d:73:74:61 ........exit-sta
00000010 74:75:73:00:00:00:00:ff tus.....
它们几乎相同,除了最后一个字节是第一个字节(好字节)中的 00 和第二个字节(坏字节)中的 ff 。这是退出状态的 SSH_MSG_CHANNEL_REQUEST 数据包的剖析:
byte SSH_MSG_CHANNEL_REQUEST
uint32 recipient channel
string "exit-status"
boolean FALSE
uint32 exit_status
所以基本上最后四个字节代表 255 的 uint32 exit_status。
引用维基百科关于退出状态的文章,“退出状态介于 0 和 255 之间”。还,
出于 shell 的目的,以零退出状态退出的命令已成功。非零退出状态表示失败。
因此,在运行第二个命令时,您的 Linux 机器上出现了某种错误。
stderr ( ) 上也没有输出SSH_MSG_CHANNEL_EXTENDED_DATA
任何内容,因此很难说发生了什么。
根据http://tldp.org/LDP/abs/html/exitcodes.html 255 退出状态表示“退出状态超出范围”。IE。nproc 试图做exit -1
或exit 256
。无论哪种方式,它听起来都可能是一个 nproc 错误或其他东西。也许尝试确保系统上的所有内容都是最新的?