본문 바로가기

리눅스

HashiCorp Vault의 OTP 방식을 이용하여 SSH 인증을 구성하는 방법

반응형

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"
 
반응형