-
Proxmox 로 홈 서버 구축하기: (4) API 이용하기Project/Home Server 2025. 4. 26. 11:58
1. 권한 추가 및 인증서 생성
Proxmox API 문서: https://pve.proxmox.com/pve-docs/api-viewer/
Proxmox VE API Documentation
pve.proxmox.com
API 문서를 보고 postman 으로 요청을 보내게 되면 Empty List 가 응답되는 것을 볼 수가 있다.
권한이 없기 때문이다.
권한을 추가해주기 위해 GUI 로 제공되는 proxmox 가 설치된 8006 포트로 접속해준다.
해당 메뉴로 들어가서 아래의 사진과 같이 해준다.
Permissions > Add > API Token Permission
Header
key: Authorization
value : PVEAPIToken=[Token ID]=[Secret]
/etc/ssl/certs
접속하려는 곳에서 내려받고 더블클릭하면 인증서를 설치하겠냐는 창이 뜬다.
도메인 확인
root@pve:~# cat /ctc/hosts cat: /ctc/hosts: No such file or directory root@pve:~# cat /etc/hosts 127.0.0.1 localhost.localdomain localhost [Proxmox 가 설치된 내부ip] [본인이 등록한 도메인주소] # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts
도메인 주소 등록
여기서 도메인은 Proxmox 설치 시에 설정한 도메인을 의미한다.
2. Proxmox 자체 인증서 등록
cat /etc/pve/local/pve-ssl.pem
우선 인증서가 잘 설치되어있는지 확인한다.
나는 도메인명이 pve 인데 도메인명에 따라 파일 이름이 다를 수도 있다.
잘 설치되어있다면 아래의 명령어를 수행한다.
Proxmox 서버 (Ubuntu)
# jdk 필요하므로 설치 sudo apt update sudo apt install openjdk-17-jdk # 환경변수 세팅 echo "export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> ~/.bashrc source ~/.bashrc # der 확장자로 변환 openssl x509 -in /etc/pve/local/pve-ssl.pem -outform der -out proxmox.der # cacerts 생성 keytool -import -alias proxmox -keystore $JAVA_HOME/lib/security/cacerts \ -file proxmox.der -storepass [비밀번호] # Trust this certificate? [no]: # 마지막에 Yes 입력 # Certificate was added to keystore 나오고 에러 메시지 없으면 성공
서버에서 등록이 정상적으로 진행되었다면 요청을 보내는 클라이언트 쪽에서도 인증서를 설치해주어야한다.
요청 서버 (Windows)
# pve-ssl.pem 파일을 클라이언트 쪽에 복사 (파일질라 이용) # cmd 관리자 권한으로 실행 # 파일 있는 경로에서 der 로 변환 명령어 실행 openssl x509 -in pve-ssl.pem -outform der -out proxmox.der # jdk 경로 확인하고 cacerts 생성 명령어 실행 keytool -import -alias proxmox -keystore "C:\Program Files\Java\jdk-17\lib\security\cacerts" -file proxmox.der -storepass [비밀번호] # 위와 똑같이 Trust this certificate? [no]: # 마지막에 Yes 입력 # Certificate was added to keystore 나오고 에러 메시지 없으면 성공
혹시나 openssl 명령어를 사용할 수 없다면
openssl 홈페이지(https://slproweb.com/products/Win32OpenSSL.html)에 가서 winx64 설치한다.
이미 코드가 작성되어있다면 생성 되고 나면 다시 애플리케이션 재실행(JVM 재기동)한다.
아래는 요청을 수행하기 위한 Config 와 Client 클래스 파일이다.
Config
@Configuration public class ProxmoxConfig { @Value("${proxmox.url}") private String url; @Value("${proxmox.token}") private String token; public String getUrl() { return url; } public String getToken() { return token; } }
Client
@Component public class ProxmoxClient { private final ProxmoxConfig config; public ProxmoxClient(ProxmoxConfig config) { this.config = config; } @Bean public RestClient restClient() { try { // 기본 SSLContext 사용 (인증서 검증 활성화) SSLContext sslContext = SSLContext.getDefault(); HttpClient httpClient = HttpClient.newBuilder() .sslContext(sslContext) .build(); return RestClient.builder() .baseUrl(config.getUrl()) .defaultHeaders(headers -> { headers.add("Authorization", config.getToken()); headers.add("Content-Type", MediaType.APPLICATION_JSON_VALUE); }) .requestFactory(new JdkClientHttpRequestFactory(httpClient)) .build(); } catch (Exception e) { throw new RuntimeException("RestClient 생성 실패", e); } } }
application.yml
proxmox: url: https://[도메인]:8006/api2/json/nodes/pve/qemu token: PVEAPIToken=[Token ID]=[Secret]
여기서 중요한 것은 최초에 proxmox 설치 시에 등록한 도메인으로 설정해야 정상적인 요청이 갑니다!
이제 내가 작성한 애플리케이션에서 요청을 수행하면 성공적으로 응답을 받는다!
'Project > Home Server' 카테고리의 다른 글
Proxmox 로 홈 서버 구축하기: (3) 외부 접속 허용하기 (0) 2025.02.02 Proxmox 로 홈 서버 구축하기: (2) 유료 라이센스 끄기 (0) 2024.05.02 Proxmox 로 홈 서버 구축하기: (1) 설치 (0) 2024.05.02