it-swarm.com.de

wie Sie das Kennwort in der Befehlszeile mit **** ausblenden und den Wert in die .bat- und .sh-Datei laden

Mein .bat-Dateibefehl zum Abrufen von Benutzereingaben über die Befehlszeile lautet

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

Mein Befehl .sh file, um Benutzereingaben aus dem Bash-Skript zu erhalten, ist 

echo -n "Enter weblogic password: "
read weblogicpassword

Wenn wir nun einige Werte für das Kennwort eingeben, sind diese Werte in der Befehlszeile sichtbar. Wie können wir die Kennwortwerte von der Befehlszeile erhalten, die für Benutzer wie * * unsichtbar sein sollte? 

13
Bukkana Obulesu

Für bash ist dessen read -s

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

Für Batch scheint es komplizierter zu sein.

Lesen Sie hier darüber: Kann ich einen Eingabetext in einer bat-Datei maskieren

12
RedX

Durch die Verwendung von Powershell können wir dies sowohl in 32 als auch in 64 Bit erreichen.

 @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%

Auf diese Weise können wir ein Passwort mit *** in der Befehlszeile erhalten

In einem Bash-Skript können wir dies erreichen, indem Sie den folgenden Code verwenden.

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

Die Optionen des read-Befehls sind: - p: Eingabeaufforderungszeichenfolge .- r: Verwenden Sie keinen Backslash als Escape-Zeichen .-s: Silent-Modus, Eingaben werden nicht zurückgegeben .- n 1: Anzahl der Zeichen, die eingegeben werden sollen.

read gibt 0 zurück, sofern nicht\0 angetroffen wird, und das Zeichen, das der Benutzer eingibt, wird in die Variable char eingefügt.

Der IFS = -Part löscht die IFS-Variable, wodurch sichergestellt wird, dass Leerzeichen oder Tabulatorzeichen, die Sie eingeben, im Kennwort enthalten sind, anstatt durch Lesen analysiert zu werden.

11
Bukkana Obulesu

Hier ist eine Lösung für Windows 32-Bit.

@echo off
echo hP1X500P[PZBBBfh#b##[email protected]`$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

Ich habe alle Antworten gelesen und eine korrigiert.

Dieser Code fordert den Benutzer zur Eingabe eines Passworts auf. Sie können das Passwort in if "%password%"=="SuperUser" ändern.

Es prüft die Eingabe und wenn die Eingabe gültig ist (SuperUser), geht sie zum Label 1.

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

Hier ist der 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