使FreeRDP提示用户输入用户名和密码?


13

目前,我正在使用以下命令启动FreeRDP会话:

$ sudo xfreerdp /v:farm.company.com /d:company.com \
    /u:oshiro /p:oshiro_password /g:rds.company.com

工作良好。但是,我不希望这样的密码在命令行中。所以我尝试了没有密码的情况:

$ sudo xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com

我得到了一个连接失败消息,而不是某种对话框或提示要求我输入密码的消息。

是否有可能提示用户输入密码?


更新:省略/p开关

没有/p开关,我得到以下信息:

oshiro@ubuntu:~$ xfreerdp /v:farm.company.com /d:company.com -u:oshiro /g:rds.company.com
connected to rds.company.com:443
connected to rds.company.com:443
Could not open SAM file!
Could not open SAM file!
Could not open SAM file!
Could not open SAM file!
rts_connect error! Status Code: 401
HTTP/1.1 401 Unauthorized
Content-Type: text/plain
Server: Microsoft-IIS/7.5
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
WWW-Authenticate: Basic realm="rds.company.com"
X-Powered-By: ASP.NET
Date: Sun, 23 Mar 2014 10:40:30 GMT +12
Content-Length: 13

rts_connect error!
rpc_connect failed!
Error: protocol security negotiation or connection failure

您有什么版本的xfreerdp?在Freerdp-x11 1.0.1的Debian wheezy中,据我所知(我没有方便检查的RDP服务器),这里有一个密码提示。
吉尔(Gilles)'所以

我有版本1.2.0-beta1。
oshirowanen 2014年

2
你为什么要用sudo呢?
MikeyB

Answers:


14

诀窍是将密码开关放在命令行的末尾,以便可以将其保留为空白。这将触发xfreerdp提示您输入密码,而不必通过命令行提供。

新的cli界面(v1.1 +)
$ xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p
旧的cli接口(v1.0.2)
$ xfreerdp -u oshiro -d company.com farm.company.com -t 3389 -p

注意:新的CLI在预发行版v1.1 +中可用,因此请特别注意所使用的版本。运行命令xfreerdp --version将向您显示。还可以查看Wiki 中的发布主题,以获取有关每个主题的更多信息。

样品连接

这是我连接到RDP服务器的示例。

$ xfreerdp --ignore-certificate -u smingolelli -d mydom -t 5000 rdp.mydom.com -p
connected to rdp.mydom.com:5000
Password: 

提示用户

FreeRDP问题跟踪器中标题为:凭据提示 -NLA #1512的问题具有以下摘录,说明了如何zenity使用GUI对话框提示用户输入用户名和密码,然后xfreerdp使用提供的信息运行。

$ xfreerdp /v:yourRDSfarmFQDN \
/u:$(zenity \
--entry \
--title="Domain Username" \
--text="Enter your Username") \
/p:$(zenity \
--entry \
--title="Domain Password" \
--text="Enter your _password:" \
--hide-text) \
/d:yourdomainname \
/f \
/cert-ignore
+clipboard

上面的代码在执行时会将这些对话框弹出给用户。这些将一次轮流出现。

                   SS#1         SS#2

参考文献


1
谢谢你 但是,当我尝试时xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p,它只是提供了文档和我可以使用的所有命令。然后,一旦我在输入密码后便p开始使用它。
oshirowanen 2014年

@oshirowanen-如果您/p一起省略开关?
slm

该错误太长,无法发布为评论,因此我用错误消息更新了原始问题。
oshirowanen 2014年

@oshirowanen-看起来可能是一个错误:github.com/FreeRDP/FreeRDP/issues/1584。显示与您相同的输出。我会在FreeRDP上提出一个问题,如果您不确定该怎么做,我可以为您提供进一步的LMK。
slm

而不是zenity --entry --text="Enter your _password:" --hide-text您可以简单地说zenity --password
user829755

7

我想扩展slm的 解决方案。我想要一个窗口来输入所有信息,并允许我一次指定一个RemoteApp,所以我以他的建议为基础并创建了zenity。

XFreeRDP提示

XFreeRDP提示

码:

#!/bin/bash

# XFreeRDP RemoteApp W/ Prompt Script
# Version 0.3
# Description:
# XFreeRDP Remote App Script utilizing Zentity to populate variables
# Written by Jarrett Higgins 12-2015

OUTPUT=$(zenity --forms --title="Connection Information" \
    --text="Enter information about your Remote Connection" \
    --separator="," \
    --add-entry="Server" \
    --add-entry="Port (Default: 3389)" \
    --add-entry="Domain (Optional)" \
    --add-entry="Username" \
    --add-password="Password" \
    --add-entry="Remote App Name (Optional)")
OUTPUT_RESULTS=$?
if ((OUTPUT_RESULTS != 0)); then
    echo "something went wrong"
    exit 1
fi
Blank=""
Server=$(awk -F, '{print $1}' <<<$OUTPUT)
Port=$(awk -F, '{print $2}' <<<$OUTPUT)
if ["$Port" = "$Blank"]
then
    Port="3389"
else
    Port="$Port"
fi
Domain=$(awk -F, '{print $3}' <<<$OUTPUT)
Username=$(awk -F, '{print $4}' <<<$OUTPUT)
Password=$(awk -F, '{print $5}' <<<$OUTPUT)
App=$(awk -F, '{print $6}' <<<$OUTPUT)
if ["$App" = "$Blank"]
then
    App="$App"
    Title="$Server"
else
    AppName="$App"
    Title="$AppName on $Server"
    App="/app:||$App"
fi
#zenity --info --title="Information Return" --text="$Server $Port $Domain $Username $Password $App"
xfreerdp /t:"$Title" /v:$Server:$Port /d:$Domain /u:$Username /p:$Password $App /cert-ignore /workarea +clipboard
Password=""

特征:

  • 如果未填充,默认为端口3389
  • 如果未填充,则默认为无远程应用程序

计划:

  • 安全证书警告
  • RDWeb查询以提供资源列表

我在#!++笔记本电脑上使用了此设备,并成功连接了我的公司,VM Remote Apps和客户端服务器。我没有脚本方面的经验,因此,如果有人有任何建议或反馈,我希望能听听他们的意见。



1

您需要提供一个空参数(无密码值)。尝试这个:

sudo xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p

如果这不起作用,那么您可以使用简单的bash脚本完成此操作。

另存为rdp.sh

#!/bin/bash
# Read Password
echo -n Password: 
read -s password
echo
# Run Command
sudo xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p:$password

然后使文件可执行:

chmod +x rdp.sh

启动它:

./rdp.sh

在xfreerdp的github问题上已对此问题进行了更详尽的讨论:https : //github.com/FreeRDP/FreeRDP/issues/1358

bash脚本的想法来自:https : //stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing


这会将密码公开给正在执行操作的用户ps -ef
reinierpost

1

我也喜欢yad,使用以下shell脚本。

#!/bin/sh
frmdata=$(yad --title "Connect to remote computer" --form --field="Remote computer" --field="Username" --field="Password:H" --field="Domain" --field="Gateway")
frmcomputer=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $1 }')
frmusername=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $2 }')
frmpassword=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $3 }')
frmdomain=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $4 }')
frmgateway=$(echo $frmdata | awk 'BEGIN {FS="|" } { print $5 }')
xfreerdp /v:$frmcomputer /f /d:$frmdomain /u:$frmusername /g:$frmgateway /p:$frmpassword /cert-ignore

它提供了一个良好的界面,并隐藏了密码。

在此处输入图片说明


0

您也可以使用--from-stdin。然后,系统将提示您输入未提供的任何所需值。

我喜欢Jarretts解决方案,但是使用Yad不是zenity,它可以让您做组合框:

OUTPUT=$(yad --center --button="gtk-ok:0" --title "Remote Desktop" --form \
--field="Server:CB" "rds1.domain.local\!rds2.domain.local\!rds3.domain.local" \
--field="Port" "3389" \
--field="Domain" "DOMAIN.local" \
--field="Username" "" \
--field="Password:H" \
--field="Remote App Name" "")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.