코딩마을방범대

우분투의 sshpass 사용해보기 본문

💡 백엔드/우분투

우분투의 sshpass 사용해보기

신짱구 5세 2024. 1. 24. 14:01

 

 

우분투의 curl이 API 통신을 위한 툴이라면, ssh는 이름 그대로 ssh 통신을 위한 툴이다.

그 중에서도 sshpass를 이용하는 방법과 기본으로 ssh를 이용하는 방법이 있다.

sshpass는 apt를 통해 설치해야 사용이 가능하고, ssh는 기본적으로 사용 가능하다.

 

ssh(Secure Shell) 원격 서버에 안전하게 접속하기 위한 프로토콜
이 프로토콜을 사용하면 네트워크를 통해 다른 컴퓨터에 로그인하거나, 원격 컴퓨터에서 명령을 실행하거나, 원격 컴퓨터와 로컬 컴퓨터 사이에 파일을 전송할 수 있음.
ssh는 기본적으로 사용자가 비밀번호를 직접 입력하도록 요구함
sshpass 비밀번호를 터미널에 직접 입력하지 않고 ssh 명령을 실행하기 위한 툴
이 도구를 사용하면 스크립트에서 ssh를 사용해 원격 서버에 접속할 수 있음
스크립트에서 ssh 비밀번호를 직접 입력하지 않아도 되므로 자동화 작업을 수행하기 편리함

 

 

테스트 전 만약 사용자의 비밀번호가 ssh 서버키라던가 비밀번호가 기억나지 않는 경우 아래 명령어를 통해 초기화가 가능하다.

(ssh 서버키를 이용하고 있는 경우 초기화해도 ssh 서버키로 접속하는데는 지장이 없다)

 

sudo passwd 사용자명

 

 

 

 

 


 

 

 

 

 

1. ssh를 이용해 세션 연결하기

ssh 사용자명@ip주소

 

 

 

 


 

 

 

2. sshpass를 이용해 세션 연결하기

sshpass -p 비밀번호 ssh 사용자명@ip주소 "명령문"

 

sshpass를 이용할 경우 비밀번호를 이용해 자동으로 세션 연결이 가능할 뿐만 아니라,

명령문을 바로 실행시킬 수 있다.

 

이 점을 생각해보면 shell 스크립트를 작성해서 다른 서버에 접속하여 명령어를 수행하는 것이 가능하다는 것이다.

 

아래 표를 통해 옵션들을 자세히 확인할 수 있다.

 

옵션 설명
-p (--password) 비밀번호를 전달
명령어 히스토리에 남거나, 프로세스 목록에 표시될 수 있기 때문에 보안에 취약함
-f (--password-file) 비밀번호가 저장된 파일의 경로를 전달
-d (--password-fd) 비밀번호를 읽어올 파일 디스크립터의 번호를 전달
-e (--password-env) 비밀번호가 저장된 환경 변수의 이름을 전달
-P (--prompt) 비밀번호 프롬프트를 지정하는데 사용 (defalt=assword)
예. sshpass -P 'Enter password: ' -p 'yourpassword' ssh user@hostname
-v (--verbose) 자세한 정보를 출력
-t 새 터미널 세션을 강제로 할당
-o UserKnownHostsFile=/dev/null known_hosts 파일을 사용하지 않도록 설정
-o StrictHostKeyChecking=no 호스트키 확인 절차를 비활성화

 

 

 

 

 

 

 


 

 

 

 

 

 

사용자명@IP주소: Permission denied (publickey).

 

위 오류는 SSH 서버가 공개키 인증 방식만 허용하고, 암호 인증 방식은 허용하지 않기 때문에 발생한다.

이를 해결하려면 암호 인증 방식을 허용해주면 된다.

 

sudo vi /etc/ssh/sshd_config

 

 

위 명령어 실행 후 PasswordAuthentication 부분을 yes로 바꿔주면 된다.

 

이후 ssh 재실행해하여 변경 사항을 반영해준다!

 

sudo service ssh restart

 

 

 

SMALL