[리눅스] sshpass란?

반응형

From Pixabay OpenClipart-Vectors's Image

sshpass란?

sshpass란 다른 컴퓨터에 바로 ssh 연결을 할 수 있고, 연결된 컴퓨터에서 명령어를 실행할 수 있는 기능을 말합니다. 즉, 다른 컴퓨터에 ssh연결을 한 뒤, 명령어까지 실행할 수 있는 기능입니다. sshpass는 ssh에서 파생된 기능입니다. ssh는 Secure Sheel Protocol의 약자로, 컴퓨터와 컴퓨터가 Public Network를 통해 서로 보안적으로 안전하게 통신하기 위한 프로토콜입니다. ssh는 데이터를 전송하거나, 원격 제어를 할때 많이 사용됩니다.

 

설치

apt-get install sshpass # 우분투 환경
yum --enablerepo=epel -y install sshpass # centos 환경
conda install -c conda-forge sshpass # conda를 이용한 설치

환경에 따라 위 명령어중 하나를 선택하여 설치하시면 됩니다. 

기초 사용법

명령어

sshpass -p 'ssh접속비밀번호' ssh 'ssh접속계정'@'ssh접속주소' '명령어'

위 명령어의 의미는 ssh 주소의 접속 계정접속 비밀번호로 로그인을 한 뒤에, 명령어를 실행합니다. 

 

장단점

장: 다른 컴퓨터에 접속해서 특정 명령어를 사용하기 때문에, 명령어를 여러 컴퓨터(서버)에 접속해서 실행하게 할 수 있습니다.

단: 명령어 자체에 접속 계정과 비밀번호가 모두 입력으로 들어가기 때문에 보안에 취약할 수 있습니다.

 

활용 예제

1) 기초 예제

sshpass를 이용한 ls 명령어 실행

명령어

sshpass -p [계정비밀번호] ssh [접속계정]@[접속주소] "ls"

특정 주소의 cwjcsk 계정으로 들어가 ls 명령어를 실행하는 예제입니다.

그런데 대상 서버에 처음 접속하는 경우가 있습니다. 그러면 아래와 같은 메시지가 뜹니다.

The authenticity of host 'somehost (XXX.XXX.XXX.XXX)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?

 

 처음 접속 했기 때문에 known host에 추가하여 다음 접속 때부터는 이런 메시지가 안뜨도록 물어보는 메시지입니다. 그런데 처음 접속하는 경우 위의 메시지 창에 대해 sshpass는 정상 동작하지 못합니다. 이를 암묵적으로 yes로 표시하고, 명령어를 수행하기 위해서는 -o StrictHostKeyChecking=no 옵션을 사용해야 합니다. 그리고 이렇게 사용하다 간혹 아래와 같은 warning 메시지가 뜰 수 있습니다.

Pseudo-terminal will not be allocated because stdin is not a terminal.

위 메시지는 이미 known host에 등록이 되어있다는 메시지입니다. 그냥 무시해도 상관없지만, 보기 안좋으니 굳이 이 메시지를 안뜨게 하려면 ssh에 -T 옵션을 주면 됩니다.

 

2) 처음 접속하는 서버에서도 경고메시지 없도록 하는 예제

ssh -T -o StrictHostKeyChecking=no 옵션

명령어

sshpass -p [계정비밀번호] ssh -T -o StrictHostKeyChecking=no [접속계정]@[접속주소] "ls"

위의 명령어처럼 사용하면, 처음 접속하는 서버에서도 아무런 경고메시지 없이 명령어를 수행할 수 있습니다.

 

Reference
blog.daum.net/techtip/12414615
반응형

댓글

Designed by JB FACTORY