Czy użytkownik powinien pytać FreeRDP o nazwę użytkownika i hasło?

13

W tej chwili używam następującego polecenia, aby rozpocząć sesję FreeRDP:

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

Działa w porządku. Nie chcę jednak, aby hasło znajdowało się w wierszu polecenia w ten sposób. Więc spróbowałem bez hasła:

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

Dostałem komunikat o błędzie połączenia zamiast jakiegoś okna dialogowego lub monitu o podanie hasła.

Czy można to zrobić, aby monitować użytkownika o hasło?


AKTUALIZACJA: Pominięcie /pprzełącznika

Bez /pprzełącznika otrzymuję:

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
źródło
Jaką masz wersję xfreerdp? W Debianie wheezy z freerdp-x11 1.0.1, o ile mogę stwierdzić ze źródła (nie mam pod ręką serwera RDP do sprawdzenia), pojawia się monit o hasło.
Gilles „SO- przestań być zły”
Mam wersję 1.2.0-beta1.
oshirowanen
2
Dlaczego do cholery używasz sudo?
MikeyB

Odpowiedzi:

14

Sztuką jest umieszczenie przełącznika hasła na końcu linii poleceń, aby można było pozostawić puste. Spowoduje to xfreerdpwyświetlenie monitu o podanie hasła zamiast podawania go za pomocą wiersza polecenia.

Przykład

nowy interfejs cli (v1.1 +)
$ xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p
stary interfejs cli (v1.0.2)
$ xfreerdp -u oshiro -d company.com farm.company.com -t 3389 -p

UWAGA: Nowy CLI jest dostępny we wstępnych wersjach, 1.1 +, więc zwróć szczególną uwagę na używaną wersję. Uruchomienie polecenia xfreerdp --versionpokaże, które. Zobacz także temat wydania na wiki, aby uzyskać więcej informacji na temat każdego z nich.

Przykładowe połączenie

Oto przykład mojego połączenia z serwerem RDP.

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

Monitowanie użytkownika

Ten problem w narzędziu do śledzenia problemów FreeRDP zatytułowanym: Monituj o poświadczenia - NLA # 1512 , zawierał ten fragment, w jaki sposób można użyć, zenityaby poprosić użytkownika o nazwę użytkownika i hasło za pomocą okien dialogowych GUI, a następnie uruchomić xfreerdpz podanymi informacjami.

$ 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

Powyższe po wykonaniu spowoduje wyświetlenie tych okien dialogowych użytkownikowi. Pojawią się one kolejno po kolei.

                   ss # 1         ss # 2

Bibliografia

slm
źródło
1
Dzięki za to. Jednak gdy próbuję xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p, daje mi tylko dokumentację i wszystkie polecenia, których mogę użyć. Potem, jak tylko ustawię hasło po jego uruchomieniu p.
oshirowanen
@oshirowanen - jeśli pominiesz /pprzełącznik razem?
slm
Błąd był zbyt długi, aby opublikować go jako komentarz, dlatego zaktualizowałem oryginalne pytanie o komunikat o błędzie.
oshirowanen
@oshirowanen - wygląda na to, że może to być błąd: github.com/FreeRDP/FreeRDP/issues/1584 . Pokazuje takie same wyniki jak twoje. Otworzyłbym problem z FreeRDP, jeśli nie jesteś pewien, jak to zrobić, mogę pomóc dalszemu LMK.
slm
zamiast tego zenity --entry --text="Enter your _password:" --hide-textmożesz po prostu powiedziećzenity --password
829755
7

Chciałbym rozwinąć rozwiązanie SLM . Chciałem, aby jedno okno zawierało wszystkie informacje i pozwalało mi na określenie RemoteApp za jednym razem, więc zbudowałem to, co zasugerował zenity.

Monit XFreeRDP

XFreeRDP-Monit

Kod:

#!/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=""

Funkcje:

  • Domyślnie port 3389, jeśli nie jest zapełniony
  • Domyślnie nie ma aplikacji zdalnej, jeśli nie jest wypełniona

Zaplanowany:

  • Ostrzeżenie o certyfikacie bezpieczeństwa
  • Zapytanie RDWeb w celu zapewnienia listy zasobów

Używam tego na moim laptopie #! ++ z wielkim sukcesem do łączenia się z moją firmą i aplikacjami VM Remote i serwerami klienckimi. Nie mam doświadczenia ze skryptami, więc jeśli ktoś ma jakieś sugestie lub opinie, chętnie je usłyszę.

Jarrett Higgins
źródło
3

Jeśli określisz bezpieczeństwo tls, komputer zdalny wyświetli monit o podanie hasła:

Xfreerdp --sec tls

Nowy format parametrów:

  /sec:tls
Francisco Hernandez
źródło
1

Musisz podać pusty parametr (bez wartości hasła). Spróbuj tego:

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

Jeśli to nie działa, możesz to zrobić za pomocą prostego skryptu bash.

Zapisz to jako 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

Następnie uczyń plik wykonywalnym:

chmod +x rdp.sh

Uruchom to:

./rdp.sh

Zostało to zadane i dokładniej omówione w sprawie github xfreerdp: https://github.com/FreeRDP/FreeRDP/issues/1358

Pomysł skryptu bash pochodzi z: /programming/3980668/how-to-get-a-password-from-a-shell-script-without-echoing

phoops
źródło
To udostępnia hasło użytkownikom ps -ef.
reinierpost
1

Lubię też yad, używając następującego skryptu powłoki.

#!/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

Zapewnia dobry interfejs i ukrywa hasło.

wprowadź opis zdjęcia tutaj

gniew
źródło
0

Możesz także użyć opcji --from-stdin. Następnie zostaniesz poproszony o podanie wszelkich wymaganych wartości, które nie zostały podane.

Podobało mi się rozwiązanie Jarretts, ale nie zenity, pozwala ci robić pola kombi:

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
źródło