Linux

[sshpass] 비대화형으로 ssh 실행

비번변경 2021. 12. 29. 23:31

sshpass

noninteractive ssh password provider

키보드 대화형 비밀번호 인증을 사용하는 ssh 명령어를 비 대화형 방식으로 사용할 수 있도록 하는 유틸리티

SSH는 direct TTY access를 사용해 대화형 키보드 사용자가 실제로 암호를 발급하는지 확인하는데, sshpass는 전용 TTY에서 SSH를 실행하여 대화형 사용자로부터 암호를 입력받는 것처럼 SSH를 속인다.

TTY 
TeleTYpe, TeleTYpewriter
리눅스 드라이브 중 콘솔 또는 터미널을 의미하며, 리눅스 tty 명령어는 표준 입력에 연결된 터미널의 파일명을 출력한다.
참고 ) 리눅스는 모든 장치를 파일로 인식한다.

 

즉, sshpass를 이용하면 ssh 연결 시 파라미터 또는 파일로 전달받은 암호를 이용하여 사용자의 입력을 기다리지 않고 ssh를 연결할 수 있으며, 입력한 명령어를 실행할 수 있다. 스크립트 작성 시 유용하게 사용할 수 있다.

 

설치

sshpass는 별도 설치가 필요하다. 

CentOS7

1. epel(Extra Packages for Enterprise Linux) 저장소 설치

서버의 패키지 레포지터리 목록을 확인하여 epel이 존재하지 않으면 설치가 필요하다.

 

레포지터리 저장소 확인

yum repolist

yum repolist

 

epel 저장소 설치

yum install epel-release

# AWS Linux 2의 경우
amazon-linux-extras install epel

epel 저장소 설치

 

2. sshpass 설치

yum install sshpass.x86_64

 

Ubuntu 20.04 LTS

1. 저장소 업데이트

apt update

 

2. sshpass 설치

apt install sshpass

sshpass 설치

 

사용 방법

접속

sshpass [-f filename|-d num|-p password|-e] [options] command arguments

# 예시
sshpass -p 'PASSWD' ssh test_user@10.100.100.10
sshpass -p 'PASSWD' -o StrictHostKeyChecking=no ssh test_user@10.100.100.10 # 호스트 키 추가 없이 접속

sshpass 사용한 접속

 

명령 실행

sshpass -p 'PASSWD' ssh test_user@35.185.211.103 whoami

sshpass 사용한 명령 실행

명령어를 실행하는 ec2-user가 아니라 원격 서버에서의 사용자명이 출력되는 것을 확인할 수 있다.

 

scp 실행

scp는 ssh 로그인 없이 사용한다.

sshpass -p <PASSWORD> scp <FILE_PATH> <USERNAME>@<IP>:<FILE_PATH>
sshpass -p <PASSWORD> scp <USERNAME>@<IP>:<FILE_PATH> <FILE_PATH>

# 예시
sshpass -p 'PASSWD' scp python_mail/mail_sender.py test_user@35.185.211.103:~