¿Hacer que FreeRDP solicite al usuario un nombre de usuario y contraseña?


13

Por el momento, estoy usando el siguiente comando para iniciar una sesión de FreeRDP:

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

Funciona bien. Sin embargo, no quiero que la contraseña esté en la línea de comando así. Entonces lo probé sin la contraseña:

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

Y recibí un mensaje de error de conexión en lugar de algún tipo de cuadro de diálogo o mensaje que me solicita que ingrese una contraseña.

¿Es posible obtener esto para solicitar al usuario una contraseña?


ACTUALIZACIÓN: Omitir el /pinterruptor

Sin el /pinterruptor, obtengo lo siguiente:

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

¿Qué versión de xfreerdp tienes? En Debian wheezy con freerdp-x11 1.0.1, por lo que puedo decir de la fuente (no tengo un servidor RDP a mano para verificar), hay un mensaje de contraseña.
Gilles 'SO- deja de ser malvado'

Tengo la versión 1.2.0-beta1.
oshirowanen

2
¿Por qué diablos estás usando sudo?
MikeyB

Respuestas:


14

El truco es poner el interruptor de contraseña al final de la línea de comando para que pueda dejarlo en blanco. Esto activará xfreerdppara solicitarle la contraseña en lugar de tener que proporcionarla a través de la línea de comando.

Ejemplo

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

NOTA: La nueva CLI está disponible en las versiones preliminares, v1.1 +, así que preste especial atención a la versión que está utilizando. Ejecutar el comando xfreerdp --versionte mostrará cuál. También eche un vistazo al tema de lanzamientos en la wiki para obtener más información sobre cada uno.

Conexión de muestra

Aquí hay un ejemplo de mi conexión a un servidor RDP.

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

Solicitar al usuario

Este problema en el rastreador de problemas de FreeRDP titulado: Solicitud de credenciales - NLA # 1512 , tenía este fragmento de cómo podría usarlo zenitypara solicitar al usuario un nombre de usuario y contraseña usando diálogos de GUI y luego ejecutar xfreerdpcon la información provista.

$ 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

Lo anterior, cuando se ejecuta, mostraría estos cuadros de diálogo al usuario. Estos aparecerán uno a la vez.

                   ss # 1         ss # 2

Referencias


1
Gracias por esto. Sin embargo, cuando lo intento xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p, solo me da la documentación y todos los comandos que podría usar. Luego, tan pronto como pongo la contraseña después de pque comience a funcionar.
oshirowanen

@oshirowanen: ¿si omites el /pinterruptor todos juntos?
slm

El error fue demasiado largo para publicarlo como comentario, por lo que he actualizado la pregunta original con el mensaje de error.
oshirowanen

@oshirowanen: parece que podría ser un error: github.com/FreeRDP/FreeRDP/issues/1584 . Muestra el mismo resultado que el tuyo. Abriría un problema con FreeRDP, si no está seguro de cómo hacerlo, puedo ayudarlo con LMK.
slm

en lugar de zenity --entry --text="Enter your _password:" --hide-textsimplemente puedes decirzenity --password
user829755

7

Me gustaría ampliar la solución de slm . Quería una sola ventana para ingresar toda la información y permitirme especificar una RemoteApp de una sola vez, así que construí sobre lo que sugirió con zenity y creé esto.

Mensaje XFreeRDP

XFreeRDP-Prompt

Código:

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

caracteristicas:

  • Por defecto es el puerto 3389 si no está lleno
  • El valor predeterminado es Sin aplicación remota si no se completa

Planificado:

  • Advertencia de certificado de seguridad
  • Consulta RDWeb para proporcionar la Lista de recursos

Utilizo esto en mi laptop #! ++ con gran éxito para conectarme a mi empresa y VM Remote Apps y servidores de clientes. No tengo experiencia con las secuencias de comandos, por lo que si alguien tiene alguna sugerencia o comentario, me encantaría escucharlo.


3

Si especifica tls security, la computadora remota le pedirá la contraseña:

Xfreerdp --sec tls

El nuevo formato de parámetro:

  /sec:tls

1

Debe proporcionar un parámetro vacío (sin valor de contraseña). Prueba esto:

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

Si eso no funciona, entonces podría lograr esto con un simple script bash.

Guarda esto como 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

Luego haga que el archivo sea ejecutable:

chmod +x rdp.sh

Lanzalo:

./rdp.sh

Esto se ha preguntado y discutido más a fondo sobre el problema github de xfreerdp: https://github.com/FreeRDP/FreeRDP/issues/1358

La idea del script bash se toma de: /programming/3980668/how-to-get-a-password-from-a-shell-script-without-echoing


Esto expone la contraseña a los usuarios que lo hacen ps -ef.
reinierpost

1

También me gusta yad, usando el siguiente script de 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

Proporciona una buena interfaz y oculta la contraseña.

ingrese la descripción de la imagen aquí


0

Puede usar --from-stdin también. Luego, se le solicitarán los valores necesarios que no se proporcionaron.

Me gustó la solución Jarretts pero con yad no zenity, te permite hacer cuadros combinados:

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" "")
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.