我在 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 机器失败。