Bash 스크립트에서 암호화된 암호를 사용하는 방법

0
1060

Ubuntu 스타일의 Linux 노트북.
Fatmawati achmad zaenuri/Shutterstock.com

Linux 스크립트를 사용하여 암호로 보호된 리소스에 연결해야 하는 경우 스크립트에 해당 암호를 넣는 것이 불편할 것입니다. OpenSSL이 그 문제를 해결해 드립니다.

암호 및 스크립트

쉘 스크립트에 암호를 넣는 것은 좋은 생각이 아닙니다. 사실, 그것은 정말 나쁜 생각입니다. 스크립트가 엉뚱한 손에 들어가면 그것을 읽는 모든 사람이 암호가 무엇인지 볼 수 있습니다. 그러나 스크립트를 사용해야 한다면 다른 무엇을 할 수 있습니까?

프로세스가 해당 지점에 도달하면 암호를 수동으로 입력할 수 있지만 스크립트가 무인으로 실행되는 경우에는 작동하지 않습니다. 고맙게도 암호를 스크립트에 하드 코딩하는 대안이 있습니다. 반직관적이지만 강력한 암호화와 함께 이를 달성하기 위해 다른 암호를 사용합니다.

예제 시나리오에서는 Ubuntu 컴퓨터에서 Fedora Linux 컴퓨터에 원격 연결해야 합니다. 우리는 Bash 쉘 스크립트를 사용하여 Fedora 컴퓨터에 SSH 연결을 만들 것입니다. 스크립트는 자동으로 실행되어야 하며 스크립트에 원격 계정의 암호를 입력하고 싶지 않습니다. 이 경우에는 SSH 키를 사용할 수 없습니다. Fedora 컴퓨터에 대한 제어 또는 관리자 권한이 없는 것처럼 가장하기 때문입니다.

암호화를 처리하기 위해 잘 알려진 OpenSSL 툴킷과 다음 유틸리티를 사용할 것입니다. sshpass SSH 명령에 암호를 입력합니다.

관련된: Linux 셸에서 SSH 키를 만들고 설치하는 방법

OpenSSL 및 sshpass 설치

다른 많은 암호화 및 보안 도구가 OpenSSL을 사용하기 때문에 컴퓨터에 이미 설치되어 있을 수 있습니다. 그러나 그렇지 않은 경우 설치하는 데 잠시 시간이 걸립니다.

Ubuntu에서 다음 명령을 입력합니다.

sudo apt get openssl

설치하기 위해서 sshpass, 다음 명령을 사용하십시오.

sudo apt install sshpass

Fedora에서는 다음을 입력해야 합니다.

sudo dnf install openssl

설치 명령 sshpass 이다:

sudo dnf install sshpass

Manjaro Linux에서 다음을 사용하여 OpenSSL을 설치할 수 있습니다.

sudo pacman -Sy openssl

마지막으로 설치하려면 sshpass, 다음 명령을 사용하십시오.

sudo pacman -Sy sshpass

명령줄에서 암호화

본격적으로 사용하기 전에 openssl 명령을 스크립트와 함께 사용하는 경우 명령줄에서 사용하여 익숙해지도록 합시다. 원격 컴퓨터의 계정 암호가 다음과 같다고 가정해 보겠습니다. rusty!herring.pitshaft. 다음을 사용하여 해당 비밀번호를 암호화할 것입니다. openssl.

그럴 때 암호화 암호를 제공해야 합니다. 암호화 암호는 암호화 및 암호 해독 프로세스에 사용됩니다. 많은 매개변수와 옵션이 있습니다. openssl 명령. 잠시 후에 각각에 대해 살펴보겠습니다.

echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'

우리는 사용하고 있습니다 echo 파이프를 통해 원격 계정 암호를 보내려면 openssl 명령.

NS openssl 매개변수는 다음과 같습니다.

  • enc -aes-256-cbc: 인코딩 유형입니다. 우리는 암호 블록 체인과 함께 고급 암호화 표준 256비트 키 암호를 사용하고 있습니다.
  • -md sha512: 메시지 다이제스트(해시) 유형입니다. 우리는 SHA512 암호화 알고리즘을 사용하고 있습니다.
  • -NS: 이것은 말한다 openssl 암호화 단계 후와 해독 단계 전에 base-64 인코딩을 적용합니다.
  • -pbkdf2: PBKDF2(Password-Based Key Derivation Function 2)를 사용하면 무차별 대입 공격이 암호를 추측하는 데 성공하기가 훨씬 더 어려워집니다. PBKDF2는 암호화를 수행하기 위해 많은 계산이 필요합니다. 공격자는 이러한 모든 계산을 복제해야 합니다.
  • -iter 100000: PBKDF2가 사용할 계산 횟수를 설정합니다.
  • -소금: 무작위로 적용된 솔트 값을 사용하면 일반 텍스트가 같더라도 암호화된 출력이 매번 다르게 됩니다.
  • – 패스 패스: ‘pic.your.password’: 암호화된 원격 암호를 해독하는 데 사용할 암호입니다. 대리자 pick.your.password 사용자가 선택한 강력한 비밀번호로

우리의 암호화된 버전 rusty!herring.pitshaft 비밀번호는 터미널 창에 기록됩니다.

터미널 창에 쓰여진 암호화된 비밀번호

이것을 해독하려면 암호화된 문자열을 openssl 암호화에 사용한 것과 동일한 매개변수를 사용하지만 -d (복호화) 옵션.

echo U2FsdGVkX19iiiRNhEsG+wm/uKjtZJwnYOpjzPhyrDKYZH5lVZrpIgo1S0goZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'pick.your.password'

광고

문자열이 해독되고 원격 사용자 계정의 암호인 원래 텍스트가 터미널 창에 기록됩니다.

터미널 창에 쓴 암호 해독

이는 원격 사용자 계정 암호를 안전하게 암호화할 수 있음을 증명합니다. 암호화 단계에서 제공한 암호를 사용하여 필요할 때 암호를 해독할 수도 있습니다.

그러나 이것이 실제로 우리의 상황을 개선합니까? 원격 계정 암호를 해독하기 위해 암호화 암호가 필요한 경우 반드시 암호 해독 암호가 스크립트에 있어야 합니까? 네, 그렇습니다. 그러나 암호화된 원격 사용자 계정 암호는 다른 숨겨진 파일에 저장됩니다. 파일에 대한 권한은 당신과 시스템의 루트 사용자 외에는 누구도 액세스할 수 없도록 합니다.

암호화 명령의 출력을 파일로 보내기 위해 리디렉션을 사용할 수 있습니다. 파일 이름은 “.secret_vault.txt”입니다. 암호화 암호를 보다 강력한 것으로 변경했습니다.

echo 'rusty!herring.pitshaft' | openssl enc -aes-256-cbc -md sha512 -a -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password' > .secret_vault.txt

아무 일도 일어나지 않지만 암호가 암호화되어 “.secret_vault.txt” 파일로 전송됩니다.

숨겨진 파일의 암호를 해독하여 작동하는지 테스트할 수 있습니다. 우리가 사용하고 있습니다 cat 여기, 아니 echo.

cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password'

광고

파일의 데이터에서 암호가 성공적으로 해독되었습니다. 우리는 사용할 것입니다 chmod 다른 사람이 액세스할 수 없도록 이 파일에 대한 권한을 변경합니다.

chmod 600 .secret_vault.txt
ls -l .secret_vault.txt

권한 마스크 600을 사용하면 파일 소유자 이외의 모든 액세스 권한이 제거됩니다. 이제 스크립트 작성으로 넘어갈 수 있습니다.

관련된: Linux에서 chmod 명령을 사용하는 방법

스크립트에서 OpenSSL 사용

스크립트는 매우 간단합니다.

#!/bin/bash

# name of the remote account
REMOTE_USER=geek

# password for the remote account
REMOTE_PASSWD=$(cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 -iter 100000 -salt -pass pass:'secret#vault!password')

# remote computer
REMOTE_LINUX=fedora-34.local

# connect to the remote computer and put a timestamp in a file called script.log
sshpass -p $REMOTE_PASSWD ssh -T $REMOTE_USER@$REMOTE_LINUX << _remote_commands
echo $USER "-" $(date) >> /home/$REMOTE_USER/script.log
_remote_commands
  • 라는 변수를 설정했습니다. REMOTE_USER “괴짜”에게.
  • 그런 다음 이라는 변수를 설정합니다. REMOTE_PASSWD 잠시 전에 사용한 것과 동일한 명령을 사용하여 “.secret_vault.txt” 파일에서 가져온 암호 해독 값으로 변경합니다.
  • 원격 컴퓨터의 위치는 이라는 변수에 저장됩니다. REMOTE_LINUX.

그 정보로 우리는 ssh 원격 컴퓨터에 연결하는 명령입니다.

  • NS sshpass command는 연결 라인의 첫 번째 명령입니다. 우리는 그것을 사용합니다 -p (비밀번호) 옵션. 이것은 우리가 보낼 암호를 지정할 수 있습니다 ssh 명령.
  • 우리는 사용 -T (의사 터미널 할당 비활성화) 옵션 ssh 원격 컴퓨터에서 의사 TTY를 할당할 필요가 없기 때문입니다.
Linux의 Bash에서 "Here Documents"를 사용하는 방법

관련된Linux의 Bash에서 “Here Documents”를 사용하는 방법

우리는 쇼트를 사용합니다 여기 문서 원격 컴퓨터에 명령을 전달합니다. 둘 사이의 모든 것 _remote_commands 문자열은 원격 컴퓨터의 사용자 세션에 대한 지침으로 전송됩니다. 이 경우에는 Bash 스크립트의 한 줄입니다.

원격 컴퓨터로 전송된 명령은 단순히 사용자 계정 이름과 타임스탬프를 “script.log”라는 파일에 기록합니다.

스크립트를 복사하여 편집기에 붙여넣고 “go-remote.sh”라는 파일에 저장합니다. 자신의 원격 컴퓨터 주소, 원격 사용자 계정 및 원격 계정 암호를 반영하도록 세부 정보를 변경하는 것을 잊지 마십시오.

사용하다 chmod 스크립트를 실행 가능하게 만듭니다.

chmod +x go-remote.sh

광고

남은 것은 그것을 시도하는 것뿐입니다. 스크립트를 실행해 보겠습니다.

./go-remote.sh

우리 스크립트는 무인 스크립트에 대한 미니멀리스트 템플릿이기 때문에 터미널에 출력이 없습니다. 그러나 Fedora 컴퓨터에서 “script.log” 파일을 확인하면 원격 연결이 성공적으로 이루어지고 “script.log” 파일이 타임스탬프로 업데이트되었음을 ​​알 수 있습니다.

cat script.log

귀하의 비밀번호는 비공개입니다

원격 계정 암호는 스크립트에 기록되지 않습니다.

그리고 복호화 비밀번호는 이다, 스크립트에서 다른 사람은 암호를 해독하고 원격 계정 암호를 검색하기 위해 “.secret_vault.txt” 파일에 액세스할 수 없습니다.