Linux 스크립트를 사용하여 암호로 보호 된 자원에 연결 해야하는 경우 스크립트에 해당 암호를 두는 것에 대해 불안해 할 것 같습니다. OpenSSL은 그 문제를 해결합니다.
암호 및 스크립트
쉘 스크립트에 암호를 넣는 것은 훌륭한 아이디어가 아닙니다. 사실, 정말 나쁜 생각입니다. 스크립트가 잘못된 손에 빠지면 읽는 모든 사람들이 암호가 무엇인지 알 수 있습니다. 그러나 스크립트를 사용해야하는 경우, 그 밖의 무엇을 할 수 있습니까?
프로세스가 해당 지점에 도달하면 암호를 수동으로 입력 할 수 있지만 스크립트가 무인 상태로 실행되면 작동하지 않습니다. 고맙게도, 암호를 스크립트로 하드 코딩하는 대안이 있습니다. 조사 적으로, 이는 다른 암호를 사용하여 일부 강력한 암호화와 함께이를 달성합니다.
이 예제 시나리오에서는 Ubuntu 컴퓨터에서 Fedora Linux 컴퓨터에 원격 연결을해야합니다. 우리는 Bash Shell 스크립트를 사용하여 Fedora 컴퓨터에 SSH 연결을 만듭니다. 스크립트는 무인으로 실행되어야하며 스크립트의 원격 계정에 대한 암호를 저장하지 않으려 고합니다. 우리는이 경우에 SSH 키를 사용할 수 없습니다. 왜냐하면 Fedora 컴퓨터에 대한 통제 또는 관리자 권한이 없으므로 우리가 척합니다.
우리는 잘 알려지지 않은 것을 사용하게 될 것입니다.
OpenSSL 툴킷
암호화와 유틸리티를 처리하는 것
sshpass.
암호를 ssh 명령으로 공급하려면.
관련된: Linux 셸에서 SSH 키를 만드고 설치하는 방법
OpenSSL 및 SSHPASS를 설치합니다
많은 다른 암호화 및 보안 도구가 OpenSSL을 사용하기 때문에 컴퓨터에 이미 설치 될 수 있습니다. 그러나 그렇지 않으면 설치하는 순간 만 걸립니다.
Ubuntu 에서이 명령을 입력하십시오.
sudo apt openssl을 가져옵니다
설치하기 위해서
sshpass.
이 명령을 사용하십시오.
Sudo APT 설치 SSHPASS
Fedora에서 다음을 입력해야합니다.
Sudo DNF 설치 OpenSSL
설치 명령
sshpass.
이다:
sudo dnf 설치 sshpass
Manjaro Linux에서는 다음과 같이 OpenSSL을 설치할 수 있습니다.
Sudo Pacman -sy OpenSSL
마지막으로, 설치하기
sshpass.
이 명령을 사용하십시오.
sudo pacman -sy sshpass
명령 행에서 암호화됩니다
우리가 그걸 사용하기 전에
openssl.
스크립트를 사용하여 명령 줄에서 사용하여 익숙해졌습니다. 원격 컴퓨터의 계정의 암호가 다음과 같다고 가정 해 봅시다.
녹슨! herring.pitshaft.
...에 암호를 사용하여 해당 암호를 암호화 할 것입니다
openssl.
...에
우리는 할 때 암호화 암호를 제공해야합니다. 암호화 암호는 암호화 및 암호 해독 프로세스에서 사용됩니다. 매개 변수와 옵션이 많이 있습니다.
openssl.
명령. 우리는 잠시 동안 그들 각각을 살펴볼 것입니다.
에코 '녹슨! herring.pitshaft'| OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 - 기타 100000 -SALT -PASS PASS : 'Pick.Your.Password'
우리는 사용하고 있습니다
에코
파이프를 통해 원격 계정 암호를 보내려면
openssl.
명령.
NS
openssl.
매개 변수는 다음과 같습니다.
- ENC -AES-256-CBC. : 인코딩 유형. 우리는을 사용하고 있습니다 고급 암호화 표준 암호 - 블록 체인이있는 256 비트 키 암호.
- -MD SHA512. : 메시지 다이제스트 (해시) 유형입니다. 우리는 SHA512 암호화 알고리즘을 사용하고 있습니다.
-
-NS
: 이것은 말한다
openssl.암호화 단계와 해독 단계 이전에 Base-64 인코딩을 적용하는 방법. - -pbkdf2. : 암호 기반 키 유도 기능 2 (PBKDF2)를 사용하면 무차별 공격이 암호를 추측하는 데 성공할 수있는 것이 훨씬 어렵습니다. PBKDF2에는 암호화를 수행 할 수있는 많은 계산이 필요합니다. 공격자는 이러한 모든 계산을 복제해야합니다.
- - 이터 100000. : PBKDF2가 사용할 계산 수를 설정합니다.
- -소금 : 무작위로 적용된 소금 값을 사용하면 일반 텍스트가 동일하더라도 암호화 된 출력이 매번 다르게됩니다.
-
- 패스 : 'Pick.Your.Password'
: 암호화 된 원격 암호를 해독하는 데 사용해야 할 암호입니다. 대리자
pick.Your.Password.선택의 강력한 암호로.
우리의 암호화 된 버전
녹슨! herring.pitshaft.
암호가 터미널 창에 기록됩니다.
이를 해독하기 위해서는 암호화 된 문자열을 다음으로 전달해야합니다.
openssl.
우리가 암호화하는 데 사용한 것과 동일한 매개 변수를 사용하여
-NS
(암호 해독) 옵션.
ECHO U2FSDGVKX19IIRNHEDG + WM / UKJTZJWNYOPJZPHYRDKYZH5LVZRPIGO1S0GOZU46 | openssl enc -aes-256-cbc -md sha512 -a -d -pbkdf2 - stockite 100000 -salt -pass pass : 'pick.your.password'
문자열이 해독되고 원본 텍스트 - 원격 사용자 계정의 암호가 터미널 창에 기록됩니다.
이는 원격 사용자 계정 암호를 안전하게 암호화 할 수 있음을 증명합니다. 암호화 단계에서 제공 한 암호를 사용하여 해독 할 수 있습니다.
그러나 이것은 실제로 우리 상황을 개선합니까? 암호화 암호가 필요한 경우 원격 계정 암호를 해독하려면 분명히 암호 해독 암호가 스크립트에 있어야합니까? 음, 그렇습니다. 그러나 암호화 된 원격 사용자 계정 암호는 다른 숨겨진 파일에 저장됩니다. 파일에 대한 사용 권한은 사용자 및 시스템의 루트 사용자가 분명히 액세스하는 것을 방지합니다.
암호화 명령에서 파일로 출력을 보내려면 리디렉션을 사용할 수 있습니다. 파일을 ".secret_vault.txt"라고합니다. 우리는 암호화 암호를 더욱 강력하게 변경했습니다.
에코 '녹슨! herring.pitshaft'| OpenSSL ENC -AES-256-CBC -MD SHA512 -A -PBKDF2 - "stock photography 100000 -salt -pass pass : 'secret # vault! password'& gt; .secret_vault.txt
아무것도 표시되지 않지만 암호는 암호화되어 ".secret_vault.txt"파일로 전송됩니다.
숨겨진 파일에서 암호를 해독하여 작동하는 것을 테스트 할 수 있습니다. 우리는 사용하고 있습니다
고양이
여기, 아니,
에코
...에
고양이 .secret_vault.txt | OpenSSL ENC -AES-256-CBC -MD SHA512 -A -D -PBKDF2 - 터가 100000 -SALT -PASS PASS : 'Secret # Vault! Password'
암호는 파일의 데이터에서 성공적으로 해독됩니다. 잘
사용하다
chmod.
이 파일에 대한 사용 권한을 변경하여 아무도 액세스 할 수 없도록하십시오.
chmod 600 .secret_vault.txt
ls -l .secret_vault.txt
사용 권한을 사용하여 600의 마스크는 파일 소유자 이외의 모든 사용자에 대한 모든 액세스를 제거합니다. 우리는 이제 스크립트를 작성하기 위해 계속 나아갈 수 있습니다.
관련된: Linux에서 chmod 명령을 사용하는 방법
스크립트에서 OpenSSL을 사용합니다
우리 스크립트는 꽤 간단합니다.
#! / bin / bash. # 원격 계정의 이름 remote_user = 괴짜 # 원격 계정의 비밀번호 remote_passwd = $ (cat .secret_vault.txt | openssl enc -aes-256-cbc -md sha512 -a -d-d-pbkdf2-stockite 100000 -salt -pass pass : 'secret # vault! password')) # 원격 컴퓨터 remote_linux = Fedora-34.local. # 원격 컴퓨터에 연결하고 script.log라는 파일에 시간 소인을 넣으십시오. sshpass -p $ remote_passwd ssh -t $ remote_user @ $ remote_linux & lt; & lt; _remote_commands. 에코 $ USER "-"$ (날짜) & gt; /home/$Remote_User/script.log. _remote_commands
-
우리는 변수를 설정했습니다
remote_user."괴짜". -
그런 다음 변수를 설정했습니다
remote_passwd.잠시 전에 사용한 것과 동일한 명령을 사용하여 ".secret_vault.txt"파일에서 가져온 해독 된 암호의 값을 사용하십시오. -
원격 컴퓨터의 위치는 호출 된 변수에 저장됩니다.
remote_linux....에
그 정보를 통해 우리는 그를 사용할 수 있습니다
SSH.
원격 컴퓨터에 연결하는 명령.
-
NS
sshpass.명령은 연결 줄의 첫 번째 명령입니다. 우리는 그와 함께 그것을 사용합니다-NS(암호) 옵션. 이렇게하면 우리가 다음과 같은 암호를 지정할 수 있습니다.SSH.명령. -
우리는 그를 사용합니다
-NS(의사 - 터미널 할당 비활성화) 옵션 옵션SSH.우리는 원격 컴퓨터에 우리에게 할당 된 pseudo-tty가 필요하지 않기 때문입니다.
우리는 단거리를 사용하고 있습니다
여기 문서
원격 컴퓨터에 명령을 전달합니다. 두 사람 사이의 모든 것
_remote_commands.
문자열은 원격 컴퓨터의 사용자 세션에 대한 지침으로 전송됩니다.이 경우 Bash 스크립트의 한 줄입니다.
원격 컴퓨터로 보낸 명령은 사용자 계정 이름과 시간 소인을 "script.log"라는 파일에 기록하기 만하면됩니다.
스크립트를 복사하여 편집기에 붙여넣고 "go-remote.sh"라는 파일에 저장하십시오. 자체적으로 원격 컴퓨터, 원격 사용자 계정 및 원격 계정 암호의 주소를 반영하도록 세부 정보를 변경하는 것을 잊지 마십시오.
사용하다
chmod.
스크립트를 실행할 수있게합니다.
chmod + x go-remote.sh
남은 모든 것은 그것을 시도하는 것입니다. 우리 스크립트를 발사 해 봅시다.
./ Go-remote.sh
우리의 스크립트는 무인 스크립트의 미니멀리스트 템플릿이므로 터미널에 출력이 없습니다. 그러나 Fedora 컴퓨터에서 "script.log"파일을 확인하면 원격 연결이 성공적으로 이루어졌고 "script.log"파일이 타임 스탬프로 업데이트되었음을 알 수 있습니다.
고양이 script.log
귀하의 비밀번호는 비공개입니다
원격 계정 암호가 스크립트에 기록되지 않았습니다.
암호 해독 암호 이다, 스크립트에서 아무도 ".secret_vault.txt"파일에 액세스하여 원격 계정 암호를 검색하고 원격 계정 암호를 검색 할 수 없습니다.