리눅스
HashiCorp Vault의 OTP 방식을 이용하여 SSH 인증을 구성하는 방법
변군이글루
2025. 6. 16. 22:53
반응형
HashiCorp Vault의 OTP(One-Time Password) 방식을 이용하여 SSH 인증을 구성하는 방법
Vault가 SSH 접속용 일회용 비밀번호(OTP)를 발급하고, SSH 서버는 vault-ssh-helper를 통해 Vault에 OTP를 검증시켜 사용자를 로그인시키는 방식입니다.
테스트 환경
- Vault Server 192.168.10.48
- SSH Server 192.168.10.101
- SSH Client 192.168.10.10
1. Vault 서버 설정 (192.168.10.48, Docker 컨테이너)
docker compose exec vault sh
Vault 환경 설정
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN="hvs.7EXpGL2yK5fzIPsasgcQTqdG"
Vault 로그인
vault login "$VAULT_TOKEN"
SSH Secret Engine 활성화
vault secrets enable ssh
OTP Role 생성
vault write ssh/roles/otp_role \
key_type=otp \
default_user="ubuntu" \
cidr_list="0.0.0.0/0"
2. SSH 서버 설정 (192.168.10.101)
sudo apt update
sudo apt install -y unzip curl jq
vault-ssh-helper 설치
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/
sudo chmod +x /usr/local/bin/vault-ssh-helper
rm -f vault-ssh-helper_0.2.1_linux_amd64.zip
vault-ssh-helper --version
vault-ssh-helper v0.2.1
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.10.48:8200"
tls_skip_verify = true
ssh_mount_point = "ssh"
allowed_roles = "otp_role"
EOF
설정 테스트
vault-ssh-helper -verify-only -config /etc/vault-ssh-helper.d/config.hcl
PAM 구성 수정
sudo sed -i '1iauth requisite pam_exec.so quiet /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl' /etc/pam.d/sshd
sudo echo -e "\nauth requisite pam_exec.so quiet expose_authtok log=/var/log/vault-ssh.log /usr/local/bin/vault-ssh-helper -config=/etc/vault-ssh-helper.d/config.hcl" | sudo tee -a /etc/pam.d/sshd
SSH 설정 변경
sudo tee -a /etc/ssh/sshd_config > /dev/null <<EOF
ChallengeResponseAuthentication yes
PasswordAuthentication no
UsePAM yes
EOF
SSH 재시작
sudo systemctl restart ssh
3. OTP 생성 및 SSH 접속 테스트
Vault 서버 (192.168.10.48)에서 OTP 생성(또는 클라이언트가 수행)
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN="hvs.7EXpGL2yK5fzIPsasgcQTqdG"
vault write ssh/creds/otp_role ip="192.168.10.101"
SSH 클라이언트 (192.168.10.10)에서 SSH 접속
ssh ubuntu@192.168.10.101
HashiCorp
Vault 쓰기 SSH/역할/OTP_ROLE \ key_type = otp \ default_user = "ubuntu"\ cidr_list = "0.0.0.0/0"
반응형