web-dev-qa-db-ja.com

****を使用してコマンドラインでパスワードを非表示にし、値を.batファイルと.shファイルに取得する方法

コマンドラインからユーザー入力を取得する私の.batファイルコマンドは

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

Bashスクリプトからユーザー入力を取得する私の.shファイルコマンドは

echo -n "Enter weblogic password: "
read weblogicpassword

パスワードにいくつかの値を入力すると、それらの値がコマンドラインに表示されます。 * *のようなユーザーには見えないはずのコマンドラインからパスワード値を取得する方法

14
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" 

Readコマンドのオプションは次のとおりです。-p:プロンプト文字列。 -r:エスケープ文字としてバックスラッシュを使用しません。 -s:サイレントモード、入力はエコーされません。 -n 1:入力する文字の数。

readは、\ 0が検出されない限り0を返し、ユーザーが入力した文字はchar変数に配置されます。

IFS =部分はIFS変数をクリアします。これにより、入力したスペースまたはタブ文字は、読み取りによって解析されるのではなく、パスワードに含まれます。

12
Bukkana Obulesu

Windows 32ビット向けのソリューションを以下に示します。

@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

私はすべての答えを読み、修正しました。

このコードはユーザーにパスワードを要求します。 if "%password%"=="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