
나는 모든 비밀번호에 비밀번호 관리자를 사용합니다. 기본 .exe는 암호화된 USB 드라이브에서 실행됩니다. VeraCrypt 컨테이너 내부의 노트북에 백업이 있고 서버에 또 다른 백업이 호스팅되어 있습니다.
나는 우연히 그것을 잃어버렸거나 접근할 수 없는 경우를 제외하고는 휴대용 버전만 사용하는 것을 선호합니다. 수동으로 디렉터리를 열고 사용하려는 .exe 파일을 실행하는 대신 다음과 같이 프로세스를 자동화하고 싶습니다.
File pManager = PasswordManager.exe
File U = USB.pManager
File L = Laptop.pManager
File S = Server.pManager
if (USB.isConnected && U.isPresent): Run --> U
if (!USB.isConnected && L.isPresent): Run => L
else (Server.Connect)
if (S.isPresent): Run=> S
else:
Message("Find your USB Key!")
bash/cmd/PowerShell에서 논리를 한 줄씩 실행해 보았습니다. 이것은 작동하지만 단순히 디렉토리를 여는 것보다 더 많은 작업입니다. 그런 다음 프로세스를 자동화하기 위해 쉘 스크립트를 작성하기 시작했지만 자격 증명 중 일부를 일반 텍스트로 저장해야 하므로 이를 피하고 싶다는 사실을 곧 깨달았습니다. 코드 작성에 도움이 필요하지 않습니다. 검색 후에도 이 프로세스를 자동화하는 최상의 절차를 찾을 수 없습니다.
파일에 액세스할 수 있는 사람에게 자격 증명을 노출하지 않고 이 프로세스를 자동화하는 가장 효율적인 방법은 어떤 유형의 실행 방법(셸 스크립트, C/Java 프로그램)입니까?
답변1
다음 배치 파일은 내 문제를 해결했으며 나중에 CMD 창을 중단하지 않고 프로세스가 실행되고 있지 않은지, 드라이브가 이미 마운트되어 있는지 확인합니다.
여러 위치에 존재하는 모든 파일에 동일한 논리를 사용할 수 있습니다. CMD 창이 열려 있는 유일한 시간은 프로세스가 이미 실행 중인 경우입니다.
이미 실행 중인 프로세스에 대한 알림을 받고 싶지 않다면 해당 :ProcessFound
섹션을 제거하고 조건문을 다음으로 지정하세요 goto END
.
:: Batch file to open Password Manager. Prefer .exe located on USB drive
:: If USB not mounted, open local (D:) version.
@echo off
SETLOCAL EnableExtensions
set EXE=PWManager.exe
set USB="F:\Password\PWManager.exe"
set HDD="D:\Software\Password\PWManager.exe"
FOR /F %%x IN ('tasklist /NH /FI "IMAGENAME eq %EXE%"') DO IF %%x == %EXE% goto ProcessFound
goto ProcessNotFound
:ProcessFound
echo %EXE% is already running. Ensure it is running from the correct location...
pause
goto END
:ProcessNotFound
if exist f:\ (
goto USBMounted
)
goto USBNotMounted
:USBMounted
start "" %USB%
goto END
:USBNotMounted
start "" %HDD%
goto END
:END
exit