55 lines
1.3 KiB
Python
55 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
PAM 인증 스크립트
|
|
임시 SSH 비밀번호 검증용
|
|
"""
|
|
import sys
|
|
import requests
|
|
import os
|
|
|
|
# VConnect API 서버 주소
|
|
API_URL = os.getenv("VCONNECT_API_URL", "http://localhost:8000")
|
|
|
|
def verify_password(username, password):
|
|
"""
|
|
임시 SSH 비밀번호 검증
|
|
|
|
Args:
|
|
username: 사용자명
|
|
password: 비밀번호
|
|
|
|
Returns:
|
|
True if valid, False otherwise
|
|
"""
|
|
try:
|
|
# API 서버에 비밀번호 검증 요청
|
|
response = requests.post(
|
|
f"{API_URL}/api/ssh/verify",
|
|
json={"username": username, "password": password},
|
|
timeout=5
|
|
)
|
|
return response.status_code == 200
|
|
except Exception as e:
|
|
print(f"Error: {e}", file=sys.stderr)
|
|
return False
|
|
|
|
if __name__ == "__main__":
|
|
# PAM에서 사용자명은 환경 변수로, 비밀번호는 stdin으로 받음
|
|
username = os.getenv("PAM_USER")
|
|
if not username and len(sys.argv) > 1:
|
|
username = sys.argv[1]
|
|
|
|
# stdin에서 비밀번호 읽기 (PAM이 제공)
|
|
try:
|
|
password = sys.stdin.readline().strip()
|
|
except:
|
|
password = ""
|
|
|
|
if not username or not password:
|
|
sys.exit(1)
|
|
|
|
if verify_password(username, password):
|
|
sys.exit(0) # 성공
|
|
else:
|
|
sys.exit(1) # 실패
|