0

我在 Dockerized Django 应用程序的视图方法中有一个ThreadPoolExecutor对象(rdp_connector_global),通过提交调用以下方法(_rdp_connect),如下所示:

rdp_connector_global.submit(_rdp_connect, login.ip_address, login.remote_port, login.username, login.password, login.rdp_width_pixels, login.rdp_height_pixels)
def _rdp_connect(hostname_or_ip, port, username, password, rdp_width_pixels=1920, rdp_height_pixels=1080):
    domain = None
    username_simple = username
    if "\\" in username:
        split = username.split["\\"]
        domain = split[0]
        username_simple = split[1]
    elif "@" in username:
        split = username.split["@"]
        username_simple = split[0]
        domain = split[1]
    connection = None
    if domain is None:
        xvfb_args_str = "/usr/bin/xvfb-run /usr/bin/xfreerdp /sec:tls /u:{0} /p:{1} /w:{2} /h:{3} /v:{4}:{5} /cert-ignore".format(username_simple, password, rdp_width_pixels, rdp_height_pixels, hostname_or_ip, port)
        connection = subprocess.Popen(xvfb_args_str, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    else:
        xvfb_args_str = "/usr/bin/xvfb-run /usr/bin/xfreerdp /sec:tls /d:{0} /u:{1} /p:{2} /w:{3} /h:{4} /v:{5}:{6} /cert-ignore".format(domain, username_simple, password, rdp_width_pixels, rdp_height_pixels, hostname_or_ip, port)
        connection = subprocess.Popen(xvfb_args_str, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
    logging.info(connection.communicate())
    connection.wait()
    logging.info(connection.communicate())

Xvfb 和 freerdp 已正确安装在 Docker 容器中。当我从 Django shell 或 Docker 内的 shell 运行登录命令时,它会成功。但是通过代码运行时,相同的命令无法登录到远程 Windows 机器。通过 Django 运行时,我ERRINFO_LOGOFF_BY_USER等待 30 秒后连接到 Windows 机器失败。

4

1 回答 1

0

我终于解决了这个问题。这与 freerdp、Docker 或 Xvfb 无关!login.password 在使用前没有解密,因此登录失败。

于 2021-01-31T13:42:27.037 回答