first commit
This commit is contained in:
54
scripts/pam_vconnect_auth.py
Normal file
54
scripts/pam_vconnect_auth.py
Normal file
@@ -0,0 +1,54 @@
|
||||
#!/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) # 실패
|
||||
Reference in New Issue
Block a user