web-dev-qa-db-fra.com

comment cacher le mot de passe en ligne de commande avec **** et obtenir la valeur dans les fichiers .bat et .sh

Ma commande de fichier .bat pour obtenir la saisie de l'utilisateur à partir de la ligne de commande est

set /p weblogicpassword=Enter weblogic password:%=%

Ma commande de fichier .sh pour obtenir les entrées de l'utilisateur à partir du script bash est 

echo -n "Enter weblogic password: "
read weblogicpassword

Maintenant, lorsque nous entrons des valeurs pour mot de passe, ces valeurs sont visibles dans la ligne de commande . Comment nous pouvons obtenir les valeurs de mot de passe à partir de la ligne de commande qui devraient être invisibles pour les utilisateurs comme *

13
Bukkana Obulesu

Pour bash son read -s

-s Silent mode. If input is coming from a terminal, characters are not echoed.

Pour lot, cela semble être plus compliqué.

Lisez à ce sujet ici: Puis-je masquer un texte saisi dans un fichier bat

12
RedX

En utilisant powershell, nous pouvons y parvenir en 32 ainsi qu'en 64 bits.

 @ECHO OFF
 set "psCommand=powershell -Command "$pword = read-Host 'Enter Password' -AsSecureString ; ^
      $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
            [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
 for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
 echo %password%

En utilisant cela, nous pouvons obtenir un mot de passe avec *** en ligne de commande

Dans le script bash, nous pouvons y parvenir en utilisant le code ci-dessous.

#!/bin/bash
Prompt="Enter Password:"
while IFS= read -p "$Prompt" -r -s -n 1 char 
do
if [[ $char == $'\0' ]];     then
    break
fi
if [[ $char == $'\177' ]];  then
    Prompt=$'\b \b'
    password="${password%?}"
else
    Prompt='*'
    password+="$char"
fi
done
echo " "
echo "Done. Password=$password" 

Les options de la commande de lecture sont les suivantes: - p: Chaîne d'invite .- r: ne pas utiliser de barre oblique inverse comme caractère d'échappement .- s: mode silencieux, les entrées ne sont pas répercutées .- n 1: nombre de caractères à saisir.

read renvoie 0 sauf si\0 est rencontré et le caractère que l'utilisateur tape est placé dans la variable char.

La partie IFS = efface la variable IFS, ce qui garantit que tous les caractères d'espace ou de tabulation que vous tapez sont inclus dans le mot de passe plutôt que d'être analysés par lecture.

11
Bukkana Obulesu

Voici une solution pour Windows 32 bits.

@echo off
echo hP1X500P[PZBBBfh#b##fXf-V@`$fPf]f3/f1/5++u5>%temp%\ftp.com
set /p password=What is your password? <nul
for /f "tokens=*" %%i in ('%temp%\ftp.com') do set "password=%%i"
del %temp%\ftp.com
echo password is "%password%"
pause
8
foxidrive

Je lis toutes les réponses et j'en fixe une.

Ce code demande à l'utilisateur un mot de passe. Vous pouvez changer le mot de passe dans if "%password%"=="SuperUser".

Il vérifie l'entrée et si l'entrée est valide (SuperUser), elle passe à l'étiquette 1.

:1
echo True
cls
exit
rem Or false goto 2
:2
echo False
cls
exit

Voici le code:

@echo off
set "psCommand=powershell -Command "$pword = read-Host 'Enter Password' -AsSecureString ; ^
     $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
           [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1

:Again
set "psCommand=powershell -Command "$pword = read-Host 'Wrong Password?. Try Again' -AsSecureString ; ^
     $BSTR=[System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($pword); ^
           [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)""
for /f "usebackq delims=" %%p in (`%psCommand%`) do set password=%%p
if "%password%"=="" goto 2
if "%password%"=="SuperUser" goto 1

:2
goto Again

:1
echo Valid password
pause>nul
0
i cant csharp