我找到了解决方案,回复格式不正确,下面是更正的代码:
if msgType == SSH_AGENTC_SIGN_REQUEST:
blobLen = struct.unpack('!I', sock.recv(4))[0]
blob = sock.recv(blobLen)
dataLen = struct.unpack('!I', sock.recv(4))[0]
data = sock.recv(dataLen)
flags = struct.unpack('!I', sock.recv(4))[0]
if base64.b64decode(server["public_key"]) != blob:
sock.sendall(struct.pack('!IB', 1, SSH_AGENT_FAILURE))
continue
sig = rpc.root.signSSHData(server_id, data);
if not sig:
sock.sendall(struct.pack('!IB', 1, SSH_AGENT_FAILURE))
continue
signature = bytearray()
packBytes(signature, bytes("ssh-rsa", "UTF-8"))
packBytes(signature, sig)
buff = bytearray()
buff.extend(struct.pack('!B', SSH_AGENT_SIGN_RESPONSE))
packBytes(buff, signature)
head = struct.pack('!I', len(buff))
sock.sendall(head);
sock.sendall(buff);
continue