it-roy-ru.com

как скрыть пароль в командной строке с помощью **** и получить значение в файл .bat и файл .sh

Моя команда .bat file для получения пользовательского ввода из командной строки

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

Моя команда .sh file для получения пользовательского ввода из скрипта bash: 

echo -n "Enter weblogic password: "
read weblogicpassword

Теперь, когда мы вводим некоторые значения для пароля, эти значения отображаются в командной строке . Как мы можем получить значения пароля из командной строки, которые должны быть невидимы для пользователей, таких как *

13
Bukkana Obulesu

Для bash его read -s

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

Для партии это кажется более сложным.

Прочитайте об этом здесь: Могу ли я замаскировать вводимый текст в файле bat

12
RedX

Используя powershell, мы можем достичь этого как в 32, так и в 64 битах.

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

Используя это мы можем получить пароль с *** в командной строке

В скрипте bash мы можем достичь этого, используя приведенный ниже код.

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

Опции команды чтения: - p: строка подсказки .- r: не использовать обратную косую черту в качестве escape-символа .- s: режим без вывода сообщений, ввод не выводится .- n 1: количество символов для ввода.

read возвращает 0, если не встречается\0, а символ, который вводит пользователь, помещается в переменную char.

Часть IFS = очищает переменную IFS, которая гарантирует, что любые символы пробела или табуляции, которые вы вводите, включены в пароль, а не анализируются при чтении.

11
Bukkana Obulesu

Вот решение для Windows 32 бит.

@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

Я прочитал все ответы, и я исправил один.

Этот код запрашивает у пользователя пароль. Вы можете изменить пароль в if "%password%"=="SuperUser".

Он проверяет ввод и, если ввод действителен (SuperUser), он переходит к метке 1.

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

Вот код:

@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