반응형
HashiCorp Vault의 OTP(One-Time Password) 방식을 이용하여 SSH 인증을 구성하는 방법
Vault가 SSH 접속용 일회용 비밀번호(OTP)를 발급하고, SSH 서버는 vault-ssh-helper를 통해 Vault에 OTP를 검증시켜 사용자를 로그인시키는 방식입니다.
테스트 환경
- Vault Server 192.168.0.11
- SSH Server 192.168.0.121
- SSH Client 192.168.0.2
1. Vault 서버 설정 (192.168.0.11, Docker 컨테이너)
Vault 컨테이너 접속
docker compose exec vault sh
Vault 환경 설정
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN="hvs.CYPEufMwYRd7deQvn8K2KyeW"
Vault 서버 상태 확인
vault status
Vault 로그인(Root 토큰)
vault login "$VAULT_TOKEN"
SSH Secret Engine 활성화
vault secrets enable ssh
OTP 역할 생성
vault write ssh/roles/otp_key_role \
key_type=otp \
default_user=ubuntu \
cidr_list=0.0.0.0/0
- key_type=otp : OTP 인증 방식 지정.
- default_user=ubuntu : SSH 서버에서 사용할 기본 사용자 이름.
- cidr_list=0.0.0.0/0 : OTP가 허용되는 IP 범위(SSH 서버와 클라이언트가 포함된 네트워크).
정책 생성 및 토큰 발급
tee ssh-policy.hcl > /dev/null <<EOF
path "ssh/creds/otp_key_role" {
capabilities = ["create", "read", "update"]
}
EOF
vault policy write ssh-policy ssh-policy.hcl
vault token create -policy=ssh-policy -format=json | jq -r '.auth.client_token'
728x90
2. SSH 서버 설정 (192.168.0.121)
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.0.11:8200"
tls_skip_verify = true
ssh_mount_point = "ssh"
allowed_roles = "otp_role"
EOF
설정 테스트
vault-ssh-helper -dev -verify-only -config=/etc/vault-ssh-helper.d/config.hcl
PAM 구성 수정
sudo vim /etc/pam.d/sshd
# PAM configuration for the Secure Shell service
# Standard Un*x authentication.
# @include common-auth
# Use vault-ssh-helper for OTP authentication
auth requisite pam_exec.so quiet expose_authtok log=/var/log/vault-ssh.log /usr/local/bin/vault-ssh-helper -dev -config=/etc/vault-ssh-helper.d/config.hcl
auth optional pam_unix.so not_set_pass use_first_pass nodelay
...
(또는)
sudo tee -a /etc/pam.d/sshd > /dev/null <<EOF
# Use vault-ssh-helper for OTP authentication
auth requisite pam_exec.so quiet expose_authtok log=/var/log/vault-ssh.log /usr/local/bin/vault-ssh-helper -dev -config=/etc/vault-ssh-helper.d/config.hcl
auth optional pam_unix.so not_set_pass use_first_pass nodelay
EOF
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.0.11)에서 OTP 생성(또는 클라이언트가 수행)
export VAULT_ADDR=http://127.0.0.1:8200
export VAULT_TOKEN="hvs.CYPEufMwYRd7deQvn8K2KyeW"
vault write ssh/creds/otp_key_role ip=192.168.0.121
SSH 클라이언트 (192.168.0.2)에서 SSH 접속
ssh ubuntu@192.168.0.121
728x90
반응형
'리눅스' 카테고리의 다른 글
Alpine Linux에 jq 패키지를 설치하는 방법 (0) | 2025.06.17 |
---|---|
HashiCorp Vault와 Consul을 Docker 컨테이너로 구성하고 연동하는 방법 (0) | 2025.06.17 |
우분투 24.04에서 Kubernetes를 제거 및 재설치 방법 (1) | 2025.06.16 |
HashiCorp Vault를 Docker 컨테이너로 설정하는 방법 (2) | 2025.06.16 |
KEX 알고리즘 호환 문제 (0) | 2025.06.13 |