安装新的 Ubuntu 22.04 后,我尝试启用远程桌面:
然后我去了另一个工作站(尝试了 Windows 和 macOS,使用 Microsoft RDC 和 Jump Desktop)并尝试连接。当它失败而没有任何重要细节时,我跳转到/var/log/syslog
Ubuntu 并发现了以下内容:
Jul 21 02:04:16 HOSTNAME gnome-remote-de[3006]: Couldn't retrieve RDP username: Credentials not set
Jul 21 02:04:55 HOSTNAME gnome-remote-de[3006]: message repeated 6 times: [ Couldn't retrieve RDP username: Credentials not set]
然后我打开系统Settings
→ Sharing
→Remote Desktop
并遇到了钥匙串登录提示。验证后,我尝试再次通过 RDP 与之前的 RDC 连接。
当我查看系统日志时,我观察到了以下结果:跳转桌面:
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [ERROR][com.winpr.sspi.NTLM] - NTLM_NEGOTIATE_MESSAGE::NegotiateFlags invalid flags 0x08e0080231, 0x00000205 required
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [WARN][com.winpr.negotiate] - AcceptSecurityContext status SEC_E_INVALID_TOKEN [0x80090308]
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [WARN][com.winpr.sspi] - AcceptSecurityContext status SEC_E_INVALID_TOKEN [0x80090308]
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [ERROR][com.freerdp.core.nla] - AcceptSecurityContext status SEC_E_INVALID_TOKEN [0x80090308]
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [ERROR][com.freerdp.core.transport] - client authentication failure
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [ERROR][com.freerdp.core.peer] - peer_recv_callback: CONNECTION_STATE_INITIAL - rdp_server_accept_nego() fail
gnome-remote-desktop-daemon[3006]: [02:28:37:827] [3006:4409] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1
gnome-remote-de[3006]: Unable to check file descriptor, closing connection
Microsoft 远程桌面:
gnome-remote-desktop-daemon[3006]: [02:29:09:352] [3006:4421] [ERROR][com.freerdp.core.transport] - BIO_read returned a system error 0: Success
gnome-remote-desktop-daemon[3006]: [02:29:09:352] [3006:4421] [ERROR][com.freerdp.core] - transport_read_layer:freerdp_set_last_error_ex ERRCONNECT_CONNECT_TRANSPORT_FAILED [0x0002000D]
gnome-remote-de[3006]: Unable to check file descriptor, closing connection
gnome-remote-desktop-daemon[3006]: [02:29:20:233] [3006:4415] [WARN][com.winpr.negotiate] - AcceptSecurityContext status SEC_I_CONTINUE_NEEDED [0x00090312]
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [WARN][com.winpr.negotiate] - AcceptSecurityContext status SEC_I_COMPLETE_NEEDED [0x00090313]
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [ERROR][com.winpr.sspi.NTLM] - Message Integrity Check (MIC) verification failed!
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [WARN][com.winpr.sspi] - CompleteAuthToken status SEC_E_MESSAGE_ALTERED [0x8009030F]
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [WARN][com.freerdp.core.nla] - CompleteAuthToken status SEC_E_MESSAGE_ALTERED [0x8009030F]
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [ERROR][com.freerdp.core.transport] - client authentication failure
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [ERROR][com.freerdp.core.peer] - peer_recv_callback: CONNECTION_STATE_INITIAL - rdp_server_accept_nego() fail
gnome-remote-desktop-daemon[3006]: [02:29:20:234] [3006:4415] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1
gnome-remote-de[3006]: Unable to check file descriptor, closing connection
gnome-remote-desktop-daemon[3006]: [02:29:25:263] [3006:4433] [ERROR][com.freerdp.core.transport] - BIO_read returned a system error 0: Success
这是使用上面截图中生成的“用户名”和“密码”。
除了一开始似乎明显的错误(在 FreeRDP 尝试连接之前需要进行身份验证)之外,显然还有其他问题。
谁知道这里可能发生什么以及失败了什么?
答案1
grd 的身份验证处理在 FreeRDP 中进行,因为 NLA 处理在那里实现。NLA
有两个可能的提供程序:NTLM 和 Kerberos。只有前者在 FreeRDP 2.x 中实现。
NTLM 在后台使用 NTLM 哈希,在 FreeRDP 2.x 中,创建哈希时出现错误,当密码包含非 ASCII 字符时,会计算出错误的哈希。
此问题已在https://github.com/FreeRDP/FreeRDP/commit/a23a24fe068c37d20c254fe393d4fe5d4c6ab31d(实际上,当记者没有提供重现步骤时,很难在上游找到这些错误,因此该问题是偶然发现的(见https://github.com/FreeRDP/FreeRDP/issues/8599了解更多详情)。
该提交是 FreeRDP 2.10.0 版本的一部分。
您能否尝试从上游stable-2.0
分支构建 FreeRDP 或者根据2.10.0
标签构建,然后再次尝试连接?
FreeRDP 2.10.0 更新将不会包含在 Ubuntu 22.04 中,因为 Ubuntu SRU 团队拒绝包含 FreeRDP 稳定更新(Ubuntu 桌面团队在旧更新(例如 2.7.0 和 2.8.0 更新)中也多次询问过这个问题)。
答案2
不确定您的问题是否与我的问题有关:我的 Remmina 客户端(在 Ubuntu 22.04 上)在连接到“屏幕共享”(在 Ubuntu 22.04 上)时会立即崩溃,其中 RDP 现在是默认的屏幕共享协议。
仅当提供了有效密码后才会发生这种情况。
我的解决方法:将客户端和屏幕共享主机的“显示服务器”从 Wayland 更改为 Xorg...请参见:
如何在 Ubuntu 22.04 上从 Wayland 显示服务器切换到 Xorg X11
额外好处:这还修复了我尝试使用存档管理器将文件从 zip 文件中拖出时遇到的拖放问题。