웹사이트 검색

sshpass: 비대화형 SSH 로그인을 위한 탁월한 도구 - 프로덕션 서버에서는 절대 사용하지 마세요


대부분의 경우 Linux 시스템 관리자는 비밀번호를 제공하거나 비밀번호 없는 SSH 로그인 또는 키 기반 SSH 인증을 제공하여 SSH를 사용하여 원격 Linux 서버에 로그인합니다.

SSH 프롬프트 자체에 사용자 이름과 함께 비밀번호를 제공하려면 어떻게 해야 합니까? sshpass가 구출되는 곳입니다.

sshpass는 명령 프롬프트 자체에 비밀번호(비대화형 비밀번호 인증)를 제공하여 크론 스케줄러를 통해 백업을 수행하기 위해 자동화된 쉘 스크립트를 실행할 수 있는 간단하고 가벼운 명령줄 도구입니다.

ssh는 직접 TTY 액세스를 사용하여 대화형 키보드 사용자가 실제로 비밀번호를 제공했는지 확인합니다. Sshpass는 전용 tty에서 ssh를 실행하여 대화형 사용자로부터 비밀번호를 수신하고 있다고 믿게 만듭니다.

중요: 보안 수준이 가장 낮은 것으로 간주되는 sshpass를 사용하면 명령줄에서 간단한 명령으로 모든 시스템 사용자에게 비밀번호가 표시됩니다. "ps" 명령. SSH 비밀번호 없는 인증을 사용하는 것이 좋습니다.

Linux 시스템에 sshpass 설치

RedHat/CentOS 기반 시스템에서는 먼저 표시된 대로 yum 명령을 사용하여 시스템에 Epel 저장소를 활성화해야 합니다.

yum install sshpass
dnf install sshpass    [On Fedora 22+ versions]

Debian/Ubuntu 및 그 파생 제품에서는 표시된 대로 apt-get 명령을 사용하여 설치할 수 있습니다.

sudo apt-get install sshpass

또는 소스에서 설치하여 최신 버전의 sshpass를 가질 수 있습니다. 먼저 소스 코드를 다운로드한 다음 tar 파일의 내용을 추출하고 다음과 같이 설치할 수 있습니다.

wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz
tar -xvf sshpass.tar.gz
cd sshpass-1.06
./configure
sudo make install 

Linux에서 sshpass를 사용하는 방법

sshpassssh와 함께 사용됩니다. 아래 명령을 실행하면 전체 설명과 함께 모든 sshpass 사용 옵션을 볼 수 있습니다.

sshpass -h
Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
   -f filename   Take password to use from file
   -d number     Use number as file descriptor for getting password
   -p password   Provide password as argument (security unwise)
   -e            Password is passed as env-var "SSHPASS"
   With no parameters - password will be taken from stdin

   -h            Show help (this screen)
   -V            Print version information
At most one of -f, -d, -p or -e should be used

이전에 언급했듯이 sshpass는 스크립팅 목적으로 더 안정적이고 유용합니다. 아래 예제 명령을 고려해보세요.

사용자 이름과 비밀번호로 원격 Linux SSH 서버(10.42.0.1)에 로그인한 후 그림과 같이 원격 시스템의 파일 시스템 디스크 사용량을 확인합니다.

sshpass -p 'my_pass_here' ssh [email  'df -h' 

중요: 여기서 비밀번호는 명령줄에 제공되므로 실질적으로 안전하지 않으므로 이 옵션을 사용하지 않는 것이 좋습니다.

그러나 화면에 비밀번호가 표시되는 것을 방지하려면 -e 플래그를 사용하고 아래와 같이 SSHPASS 환경 변수의 값으로 비밀번호를 입력할 수 있습니다.

export SSHPASS='my_pass_here'
echo $SSHPASS
sshpass -e ssh [email  'df -h' 

참고: 위의 예에서 SSHPASS 환경 변수는 임시 목적으로만 사용되며 재부팅 시 제거됩니다.

SSHPASS 환경 변수를 영구적으로 설정하려면 /etc/profile 파일을 열고 파일 시작 부분에 내보내기 문을 입력합니다.

export SSHPASS='my_pass_here'

파일을 저장하고 종료한 후 아래 명령을 실행하여 변경 사항을 적용합니다.

source /etc/profile 

반면에 -f 플래그를 사용하여 비밀번호를 파일에 넣을 수도 있습니다. 이 방법을 사용하면 다음과 같이 파일에서 비밀번호를 읽을 수 있습니다.

sshpass -f password_filename ssh [email  'df -h'

다음과 같이 sshpass를 사용하여 scp를 사용하여 파일을 전송하거나 SSH를 사용하여 rsync를 통해 백업/동기화 파일을 전송할 수도 있습니다.

------- Transfer Files Using SCP ------- 
scp -r /var/www/html/example.com --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/var/www/html

------- Backup or Sync Files Using Rsync -------
rsync --rsh="sshpass -p 'my_pass_here' ssh -l aaronkilik" 10.42.0.1:/data/backup/ /backup/

더 많은 사용법을 보려면 sshpass 매뉴얼 페이지를 읽어보고 다음을 입력하는 것이 좋습니다.

man sshpass

이 글에서는 비대화형 비밀번호 인증을 가능하게 하는 간단한 도구인 sshpass를 설명했습니다. 이 도구가 도움이 될 수 있지만 SSH의 보다 안전한 공개 키 인증 메커니즘을 사용하는 것이 좋습니다.

추가 토론을 위해 아래 피드백 섹션을 통해 질문이나 의견을 남겨주세요.