Faça com que o FreeRDP solicite ao usuário nome de usuário e senha?


13

No momento, estou usando o seguinte comando para iniciar uma sessão do FreeRDP:

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

Funciona bem. No entanto, não quero que a senha esteja na linha de comando dessa maneira. Então, eu tentei sem a senha:

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

E recebi uma mensagem de falha de conexão em vez de algum tipo de caixa de diálogo ou prompt solicitando que eu digite uma senha.

É possível obter isso para solicitar ao usuário uma senha?


ATUALIZAÇÃO: Omitindo o /pinterruptor

Sem a /popção, recebo o seguinte:

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

Qual versão do xfreerdp você possui? No Debian wheezy com freerdp-x11 1.0.1, até onde eu sei pela fonte (não tenho um servidor RDP à mão para verificar), há um prompt de senha.
Gilles 'SO- stop be evil' '' -

Eu tenho a versão 1.2.0-beta1.
Oshirowanen

2
Por que diabos você está usando sudo?
precisa saber é o seguinte

Respostas:


14

O truque é colocar a opção de senha no final da sua linha de comando, para que você possa deixá-la em branco. Isso será acionado xfreerdppara solicitar sua senha, em vez de precisar fornecê-la através da linha de comando.

Exemplo

nova interface CLI (v1.1 +)
$ xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p
interface cli antiga (v1.0.2)
$ xfreerdp -u oshiro -d company.com farm.company.com -t 3389 -p

NOTA: A nova CLI está disponível nos pré-lançamentos, v1.1 +, portanto, preste atenção especial à versão que você está usando. A execução do comando xfreerdp --versionmostrará qual. Também dê uma olhada no tópico de lançamentos no wiki para obter mais informações sobre cada um.

Conexão de amostra

Aqui está um exemplo de eu me conectando a um servidor RDP.

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

Solicitando ao usuário

Esse problema no rastreador de problemas do FreeRDP, intitulado: Solicitar credenciais - NLA # 1512 , continha este trecho de como você poderia usar zenitypara solicitar ao usuário um nome de usuário e senha usando diálogos da GUI e depois executar xfreerdpcom as informações fornecidas posteriormente.

$ 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

O procedimento acima, quando executado, exibia essas caixas de diálogo para o usuário. Estes aparecerão um de cada vez.

                   ss # 1         ss # 2

Referências


1
Obrigado por isso. No entanto, quando tento xfreerdp /v:farm.company.com /d:company.com /u:oshiro /g:rds.company.com /p, ele apenas fornece a documentação e todos os comandos que eu poderia usar. Então, assim que eu colocar a senha depois que pela começar a funcionar.
oshirowanen

@oshirowanen - se você omitir a /popção todos juntos?
slm

O erro foi muito longo para ser postado como comentário, por isso atualizei a pergunta original com a mensagem de erro.
oshirowanen

@oshirowanen - isso pode parecer um erro: github.com/FreeRDP/FreeRDP/issues/1584 . Mostra a mesma saída que a sua. Eu abriria um problema com o FreeRDP, se você não tiver certeza de como fazer isso, posso ajudar ainda mais o LMK.
slm

em vez de zenity --entry --text="Enter your _password:" --hide-textvocê pode simplesmente dizer #zenity --password
user829755

7

Eu gostaria de expandir a solução da slm . Eu queria uma única janela para inserir todas as informações e permitir que eu especificasse um RemoteApp de uma só vez, então desenvolvi o que ele sugeriu com o zenity e criei isso.

Prompt do 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=""

Recursos:

  • O padrão é a porta 3389, se não for preenchida.
  • O padrão é nenhum aplicativo remoto, se não for preenchido

Planejado:

  • Aviso de certificado de segurança
  • Consulta RDWeb para fornecer Lista de Recursos

Eu uso isso no meu laptop #! ++ com grande sucesso para conectar-me à minha empresa, aos aplicativos remotos da VM e aos servidores clientes. Eu não tenho experiência com scripts, portanto, se alguém tiver alguma sugestão ou feedback, eu adoraria ouvi-las.


3

Se você especificar tls security, o computador remoto solicitará a senha:

Xfreerdp --sec tls

O novo formato de parâmetro:

  /sec:tls

1

Você precisa fornecer um parâmetro vazio (sem o valor da senha). Tente o seguinte:

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

Se isso não funcionar, você poderá fazer isso com um script bash simples.

Salve isso 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

Em seguida, torne o arquivo executável:

chmod +x rdp.sh

Inicie:

./rdp.sh

Isso foi perguntado e discutido mais detalhadamente sobre a questão do github do xfreerdp: https://github.com/FreeRDP/FreeRDP/issues/1358

A ideia do script bash é obtida em: /programming/3980668/how-to-get-a-password-from-a-shell-script-without-echoing


Isso expõe a senha para os usuários ps -ef.
Reinierpost

1

Eu também gosto de yad, usando o seguinte 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

Ele fornece uma boa interface e oculta a senha.

insira a descrição da imagem aqui


0

Você pode usar --from-stdin também. Em seguida, você será solicitado a fornecer os valores necessários que não foram fornecidos.

Eu gostei da solução Jarretts, mas com o yad não o zenity, ele permite que você faça caixas de combinação:

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" "")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.