Сделать 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
oshirowanen
источник
Какая у вас версия xfreerdp? В Debian wheezy с freerdp-x11 1.0.1, насколько я могу судить из источника (у меня нет сервера RDP, который можно было бы проверить), есть запрос пароля.
Жиль "ТАК - перестань быть злым"
У меня версия 1.2.0-бета1.
oshirowanen
2
Какого черта ты используешь sudo?
MikeyB

Ответы:

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покажет вам, какой. Также взгляните на тему релизов в вики для получения дополнительной информации о каждом из них.

Пример подключения

Вот пример моего подключения к серверу 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

Вышеуказанное при выполнении выскочит эти диалоги пользователю. Они будут появляться по очереди.

                   сс # 1         сс # 2

Ссылки

SLM
источник
1
Спасибо за это. Однако, когда я пытаюсь xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p, он просто дает мне документацию и все команды, которые я мог использовать. Затем, как только я поставил пароль после того, как pон начинает работать.
oshirowanen
@oshirowanen - если вы пропустите /pпереключатель все вместе?
SLM
Ошибка была слишком длинной для публикации в качестве комментария, поэтому я обновил исходный вопрос сообщением об ошибке.
oshirowanen
@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 Prompt

XFreeRDP-Prompt

Код:

#!/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 Query для предоставления списка ресурсов

Я с большим успехом использую это на своем ноутбуке #! ++ для подключения к своей компании, к удаленным приложениям VM и клиентским серверам. У меня нет опыта в написании сценариев, поэтому, если у кого-то есть какие-либо предложения или отзывы, я хотел бы их услышать.

Джаррет Хиггинс
источник
3

Если вы укажете tls security, удаленный компьютер запросит пароль:

Xfreerdp --sec tls

Новый формат параметров:

  /sec:tls
Франсиско Эрнандес
источник
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

Это было задано и обсуждено более подробно по проблеме gfub xfreerdp: https://github.com/FreeRDP/FreeRDP/issues/1358

Идея сценария bash взята из: /programming/3980668/how-to-get-a-password-from-a-shell-script-without-echoing

phoops
источник
Это предоставляет пароль для пользователей, которые делают ps -ef.
reinierpost
1

Мне также нравится yad, используя следующий скрипт оболочки.

#!/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, но с не 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" "")
havealoha
источник