728x90
HashiCorp Vault의 SSH OTP(One-Time Password) 방식을 통해 SSH 접속을 관리하는 방법
Architecture
1. Vault 서버 설정 (Node141 - 192.168.0.141)
Vault 서버 주소와 인증 토큰 설정
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN="hvs.OXgyLZfl8wnutNnda1FK3Cd2"
Vault 로그인
vault login "$VAULT_TOKEN"
Vault 서버 상태 확인
vault status
활성화된 경로 확인
vault secrets list
SSH Secret Engine 활성화
vault secrets enable ssh
Role 생성(OTP Role 생성)
vault write ssh/roles/otp_key_role \
key_type=otp \
default_user=vuser2 \
allowed_users=vuser2 \
cidr_list="0.0.0.0/0" \
key_bits=2048
Role 조회
vault list ssh/roles
Keys
----
otp_key_role
정책 파일 작성
tee otp_key_policy.hcl <<EOF
# SSH secrets paths 목록
path "ssh/*" {
capabilities = [ "list" ]
}
# SSH secrets engine otp_key_role 역할
path "ssh/creds/otp_key_role" {
capabilities = ["create", "read", "update"]
}
EOF
정책 적용
vault policy write otp-key-policy ./otp_key_policy.hcl
정책 목록 확인
vault policy list
인증 방식이 활성화된 경로 확인
vault auth list
vault auth list | grep userpass
사용자 패스워드 기반 인증(userpass) 활성화
vault auth enable userpass
사용자 생성 및 정책 할당
vault write auth/userpass/users/vuser2 \
password="vuser2_password" \
policies="otp-key-policy"
계정의 세부 정보 조회
vault read auth/userpass/users/vuser2
2. SSH 서버 설정 (Node142 - 192.168.0.142)
Vault 및 Vault SSH Helper 설치
sudo apt install -y unzip
wget https://releases.hashicorp.com/vault/1.18.0/vault_1.18.0_linux_amd64.zip
unzip vault_1.18.0_linux_amd64.zip
sudo mv vault /usr/local/bin/
vault version
sudo rm -f LICENSE.txt vault_1.18.0_linux_amd64.zip
wget https://releases.hashicorp.com/vault-ssh-helper/0.2.1/vault-ssh-helper_0.2.1_linux_amd64.zip
unzip vault-ssh-helper_0.2.1_linux_amd64.zip
sudo mv vault-ssh-helper /usr/local/bin/
vault-ssh-helper version
sudo rm -f vault-ssh-helper_0.2.1_linux_amd64.zip
접속할 사용자 생성
sudo adduser vuser2
echo 'vuser2:vuser2_password' | sudo chpasswd
$ id vuser2
uid=1001(vuser2) gid=1001(vuser2) groups=1001(vuser2),100(users)
Vault 서버 주소와 인증 토큰 설정
export VAULT_ADDR=http://192.168.0.141:8200
export VAULT_TOKEN="hvs.YgdjykLHDpqdg4CbPzrP7P7K"
Vault Server와의 연결 확인
curl -s http://192.168.0.141:8200/v1/sys/health | jq
Vault SSH Helper 설정 파일 생성
sudo mkdir -p /etc/vault-ssh-helper.d
sudo tee /etc/vault-ssh-helper.d/config.hcl > /dev/null <<EOF
vault_addr = "http://192.168.0.141:8200"
tls_skip_verify = true
ssh_mount_point = "ssh"
allowed_roles = "*"
EOF
sudo tee /etc/vault-ssh-helper.d/config.hcl > /dev/null <<EOF
vault_addr = "http://192.168.0.141:8200"
ssh_mount_point = "ssh"
namespace = ""
tls_skip_verify = true
allowed_roles = "*"
allowed_cidr_list = "0.0.0.0/0"
EOF
config.hcl 검토
vault-ssh-helper -verify-only -config /etc/vault-ssh-helper.d/config.hcl -dev
PAM 구성 수정
/etc/pam.d/sshd 파일을 수정하여 Vault SSH Helper가 OTP 인증을 처리할 수 있도록 PAM 모듈을 추가합니다.
sudo vim /etc/pam.d/sshd
auth requisite pam_exec.so quiet expose_authtok log=/tmp/vaultssh.log /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl -dev
auth optional pam_unix.so not_set_pass use_first_pass nodelay
SSH 설정 변경
/etc/ssh/sshd_config 파일에서 다음 설정을 추가/수정하여 OTP 인증을 활성화합니다.
sudo sed -i.bak 's/^KbdInteractiveAuthentication no/KbdInteractiveAuthentication yes/' /etc/ssh/sshd_config
sudo sed -i.bak 's/^#PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i.bak 's/^ChallengeResponseAuthentication no/ChallengeResponseAuthentication yes/' /etc/ssh/sshd_config
또는
echo "ChallengeResponseAuthentication yes" | sudo tee -a /etc/ssh/sshd_config
SSH 설정 확인
cat /etc/ssh/sshd_config | egrep -v '^#' | egrep 'KbdInteractiveAuthentication|PasswordAuthentication|ChallengeResponseAuthentication|UsePAM'
$ cat /etc/ssh/sshd_config | egrep -v '^#' | egrep 'KbdInteractiveAuthentication|PasswordAuthentication|ChallengeResponseAuthentication|UsePAM'
PasswordAuthentication no
KbdInteractiveAuthentication yes
UsePAM yes
ChallengeResponseAuthentication yes
SSH 서비스 재시작
sudo systemctl restart ssh
3. Vault에서 OTP 생성 및 SSH 접속 테스트
OTP 생성 (Vault 서버에서 실행)
vault write ssh/creds/otp_key_role ip="192.168.0.142"
Key Value
--- -----
lease_id ssh/creds/otp_key_role/pGKto8dIbCbSMaF4rBgm4Rja
lease_duration 768h
lease_renewable false
ip 192.168.0.142
key 69337254-babf-f72a-8ed9-7740e73583e6
key_type otp
port 22
username vuser2
OTP는 key 필드에 표시됩니다.
SSH 클라이언트 (Node143 - 192.168.0.143)에서 SSH 접속
export VAULT_ADDR=http://192.168.0.141:8200
export VAULT_TOKEN="hvs.YgdjykLHDpqdg4CbPzrP7P7K"
vault login -method=userpass username=vuser2 password=vuser2_password
vault write ssh/creds/otp_key_role ip=192.168.0.142
SSH 접속을 시도합니다.
ssh vuser2@192.168.0.142
$ ssh vuser2@192.168.0.142
vuser2@192.168.0.142's password:
Vault를 이용한 SSH 접속
vault ssh -role otp_key_role -mode otp vuser2@192.168.0.142
$ vault ssh -role otp_key_role -mode otp vuser2@192.168.0.142
Vault could not locate "sshpass". The OTP code for the session is displayed
below. Enter this code in the SSH password prompt. If you install sshpass,
Vault can automatically perform this step for you.
OTP for the session is: ce9aede0-8b0e-f8e2-1c35-21190b85b2cb
vuser2@192.168.0.142's password:
sshpass 패키지를 설치하면 즉시 비밀번호 기반 SSH 로그인 기능을 사용할 수 있습니다.
sudo apt -y install sshpass
$ vault ssh -role otp_key_role -mode otp vuser2@192.168.0.142
참고URL
- Hashicorp Documentation : One-Time SSH passwords
- hashicorp github : vault-ssh-helper
Vault-Ssh-도우미
728x90
'리눅스' 카테고리의 다른 글
[draft] 우분투에서 HashiCorp Vault를 설치하고 서버 모드로 설정하는 방법 (1) | 2024.11.17 |
---|---|
[draft] HashiCorp Vault UI에 접속할 수 있는 사용자 계정 및 비밀번호를 생성하는 방법 (0) | 2024.11.15 |
[draft] 우분투에서 HashiCorp Vault와 Boundary를 설치하고 기본 설정을 구성하는 방법 (1) | 2024.11.13 |
[draft] sleep, wait, timeout 명령어 비교 및 사용법 (0) | 2024.11.12 |
[draft] SSL 인증서의 만료일을 확인하는 방법 (0) | 2024.11.12 |