Contents
see Listsshpass와 scp로 다른 포트 파일 전송
sshpass는 SSH 비밀번호를 비대화형으로 전달하는 도구입니다. scp와 함께 사용하면 자동화된 파일 전송이 가능합니다. 특히 비표준 포트를 사용하는 서버로의 전송에 유용합니다.
언제 사용하나요?
- SSH 키 설정 없이 자동화된 파일 전송
- 배포 스크립트에서 원격 서버로 파일 복사
- 비표준 포트(22 이외)를 사용하는 서버 접속
- CI/CD 파이프라인에서 파일 배포
sshpass 설치
# CentOS / RHEL
sudo yum install sshpass
# Ubuntu / Debian
sudo apt-get install sshpass
# macOS (Homebrew)
brew install hudochenkov/sshpass/sshpass
기본 사용법
# 비밀번호로 SSH 접속
sshpass -p "비밀번호" ssh user@host
# 비밀번호로 SCP 파일 전송
sshpass -p "비밀번호" scp file.txt user@host:/path/
# 디렉토리 전송 (-r 옵션)
sshpass -p "비밀번호" scp -r /local/dir user@host:/remote/dir
다른 포트 사용
# SSH 다른 포트 접속 (-p 옵션)
sshpass -p "비밀번호" ssh -p 2222 user@host
# SCP 다른 포트 전송 (-P 옵션, 대문자)
sshpass -p "비밀번호" scp -P 2222 file.txt user@host:/path/
# 디렉토리 전송 + 다른 포트
sshpass -p "비밀번호" scp -P 2222 -r /local/dir user@host:/remote/
# 주의: SSH는 -p, SCP는 -P (대문자)
호스트 키 확인 무시
# 처음 접속 시 호스트 키 확인 건너뛰기
sshpass -p "비밀번호" ssh -o StrictHostKeyChecking=no user@host
# SCP에서도 동일
sshpass -p "비밀번호" scp -o StrictHostKeyChecking=no file.txt user@host:/path/
# 알려진 호스트 파일에 저장 안함
sshpass -p "비밀번호" ssh -o UserKnownHostsFile=/dev/null
-o StrictHostKeyChecking=no user@host
파일에서 비밀번호 읽기
# 비밀번호 파일 생성 (권한 주의)
echo "비밀번호" > /secure/password.txt
chmod 600 /secure/password.txt
# 파일에서 비밀번호 읽기 (-f 옵션)
sshpass -f /secure/password.txt ssh user@host
# 환경변수에서 비밀번호 읽기 (-e 옵션)
export SSHPASS="비밀번호"
sshpass -e ssh user@host
실전 예시: 배포 스크립트
#!/bin/bash
# deploy.sh
HOST="192.168.1.100"
PORT="2222"
USER="deploy"
PASS="secretpassword"
LOCAL_DIR="/app/build"
REMOTE_DIR="/var/www/html"
# 빌드 파일 전송
sshpass -p "$PASS" scp -P $PORT -r
-o StrictHostKeyChecking=no
$LOCAL_DIR/* $USER@$HOST:$REMOTE_DIR/
# 원격 서버에서 명령 실행
sshpass -p "$PASS" ssh -p $PORT
-o StrictHostKeyChecking=no
$USER@$HOST "sudo systemctl restart nginx"
echo "배포 완료!"
압축 전송
# 압축해서 전송 (-C 옵션)
sshpass -p "비밀번호" scp -C -P 2222
large_file.sql user@host:/backup/
# tar와 함께 사용 (파이프)
tar czf - /local/dir | sshpass -p "비밀번호"
ssh -p 2222 user@host "tar xzf - -C /remote/"
rsync와 함께 사용
# rsync로 동기화 (더 효율적)
sshpass -p "비밀번호" rsync -avz
-e "ssh -p 2222 -o StrictHostKeyChecking=no"
/local/dir/ user@host:/remote/dir/
# 삭제 동기화
sshpass -p "비밀번호" rsync -avz --delete
-e "ssh -p 2222"
/local/dir/ user@host:/remote/dir/
보안 주의사항
- 명령줄 비밀번호는 프로세스 목록에 노출됨
- 가능하면 SSH 키 인증 사용 권장
- 비밀번호 파일은 600 권한으로 보호
- 스크립트에 비밀번호 하드코딩 금지
- 환경변수나 보안 저장소 활용
SSH 키 대안
# SSH 키 생성
ssh-keygen -t rsa -b 4096
# 공개키 복사 (권장 방법)
ssh-copy-id -p 2222 user@host
# 키로 접속 (비밀번호 불필요)
ssh -p 2222 user@host
scp -P 2222 file.txt user@host:/path/