꾸준히 성장하는 개발자

배포 스크립트에서 비밀번호 없이 SSH 자동 접속하기 (sshpass vs SSH 키 방식) 본문

그 외...

배포 스크립트에서 비밀번호 없이 SSH 자동 접속하기 (sshpass vs SSH 키 방식)

ahleum 2026. 5. 6. 16:01

 

평소에는 AWS EC2 서버에 .pem 키 파일로 접속하는 방식만 사용해왔다.
그런데 유지보수 중인 프로젝트에서 배포가 필요했고, 해당 서버는 비밀번호 기반 SSH 접속 방식이었다.

배포 스크립트를 자동화하려면 SSH 접속 시 비밀번호를 자동으로 입력해줘야 했고, 이를 해결하는 방법을 찾게 됐다.


방법 1. sshpass 설치

sshpass는 SSH 접속 시 비밀번호를 자동으로 입력해주는 도구다.

스크립트에서는 아래처럼 사용할 수 있다.

sshpass -p "비밀번호" ssh user@host "명령어"

sshpass -p "비밀번호" scp file.tar.gz user@host:~/path/

macOS 설치 방법

macOS에서는 기본 brew로 설치가 안 되고 별도 탭을 추가해야 한다.

brew install hudochenkov/sshpass/sshpass

문제 발생

설치를 시도했더니 아래 에러가 발생했다.

Error: Your Command Line Tools are too outdated.
Update them from Software Update in System Settings.

Command Line Tools가 오래되어 설치가 불가능한 상황이었다.

업데이트를 진행하려면 컴퓨터를 재시작해야 했고, 당장 배포가 필요한 상황이라 시간을 들이기 어려웠다.


방법 2. SSH 키 등록 방식으로 해결

재시작 없이 바로 해결할 수 있는 방법으로 SSH 키 방식을 선택했다.

로컬 맥에서 키를 생성하고 서버에 공개키를 등록하면 이후부터는 비밀번호 없이 자동으로 접속된다.


1. 로컬에서 SSH 키 생성

ssh-keygen -t rsa -b 4096

실행하면 저장 경로와 passphrase를 물어보는데 엔터 3번으로 기본값으로 진행하면 된다.

생성된 키 위치:

~/.ssh/id_rsa       # 개인키
~/.ssh/id_rsa.pub   # 공개키

2. 서버에 공개키 등록

ssh-copy-id 서버ID@서버IP

처음 접속 시 서버 신뢰 여부를 묻는데 yes 입력 후 비밀번호를 한 번 입력하면 된다.

정상적으로 등록되면 아래 메시지가 출력된다.

Number of key(s) added: 1

3. 이후 접속

이제부터는 비밀번호 없이 바로 접속된다.

ssh 서버아이디@서버IP

배포 스크립트에서도 sshpass 없이 그대로 사용할 수 있다.

scp file.tar.gz 서버ID@서버IP:~/path/

ssh 서버ID@서버IP "pm2 restart appname"

sshpass vs SSH 키 방식 비교

항목sshpassSSH 키 방식

설정 난이도 설치만 하면 됨 키 생성 + 서버 등록 필요
보안 스크립트에 비밀번호 노출 위험 비밀번호 불필요, 보안 우수
재사용성 비밀번호 변경 시 스크립트 수정 필요 한 번 등록하면 계속 사용 가능
macOS 환경 Command Line Tools 최신 버전 필요 별도 설치 불필요

정리

당장 배포가 필요한 상황에서 sshpass 설치를 시도했지만 macOS Command Line Tools 업데이트가 필요해 진행이 막혔다.

재시작 없이 바로 해결할 수 있는 SSH 키 방식으로 전환했고, 결과적으로 보안 면에서도 더 나은 방식을 사용하게 됐다.

비밀번호 기반 SSH 서버를 자동화 배포에 연결해야 한다면, 처음부터 SSH 키 방식을 사용하는 것을 추천한다.