sshift · 점프 서버 접속과 비밀번호 저장을 묶은 SSH CLI
기간 —
비즈톡에서 서버 50여 대에 SSH로 접속해 패치 작업을 했습니다. 매번 점프 서버를 거쳐 접속하는 일이 번거로워, 점프 서버 연결과 암호화한 비밀번호 저장을 CLI 하나로 묶었습니다.
서버 50여 대의 점프 서버 접속을 명령 하나로
- 대화형 서버 선택, ID·이름으로 바로 접속, 원격 명령 실행
- 서버와 점프 관계의 추가·수정·삭제·목록
- 점프 서버와 대상 서버의 비밀번호·키 인증 조합 처리
- 암호화한 비밀번호 저장과 사용자 지정 암호화 키
- 서버와 점프 관계의 JSON 내보내기·가져오기
- Homebrew, 설치 스크립트, 릴리스 바이너리로 설치
서로를 가리키는 점프 관계
- 문제
- 점프 관계를 자유롭게 추가하면 A가 B를 거치고 B가 다시 A를 거치는 순환이 생길 수 있었습니다.
- 해결
- 관계를 추가하기 전에 깊이 우선 탐색으로 대상에서 출발 서버로 돌아오는 경로가 있는지 검사하고, 있으면 추가를 거부합니다. 저장된 점프 관계에는 순환이 남지 않습니다.
바뀐 점프 관계 저장 형식
- 문제
- 점프 관계를 그래프로 저장하도록 형식을 바꾸자, 이전 버전에서 만든 서버 목록을 읽지 못할 수 있었습니다.
- 해결
- 새 그래프 형식으로 읽지 못하면 기존 관계 배열을 읽어 그래프로 바꿉니다. 사용자가 서버 목록을 다시 만들 필요가 없게 했습니다.
서버마다 다른 인증 방식
- 문제
- 비즈톡에서 서버 50여 대에 패치 작업을 하려면 매번 점프 서버를 거쳐 접속해야 했습니다. 점프 서버는 비밀번호로, 대상 서버는 키로 접속하는 식으로 인증 방식도 서로 달랐습니다.
- 해결
- 비밀번호와 키 조합에 따라 OpenSSH의 ProxyJump, ProxyCommand와 sshpass를 골라 명령을 만듭니다.
평문으로 남던 비밀번호
- 문제
- 서버 목록에 비밀번호를 그대로 저장하면 파일만 열어도 보였습니다.
- 해결
- 비밀번호는 무작위 IV를 쓰는 AES‑CTR로 암호화하고, 설정 파일은 소유자만 읽도록 권한을 제한했습니다. 서버 목록 파일을 열어도 비밀번호는 암호문으로만 보입니다.