웹사이트 검색

예상 스크립트 SSH 예제 자습서


Expect 스크립트는 훌륭한 리눅스/유닉스 유틸리티입니다. 직장에서든 호스팅 서버에서든 일상 생활에서 많은 유닉스 서버를 처리해야 합니다. 따라서 많은 SSH 사용자, 그들의 암호, SU 사용자 및 암호를 기억해야 합니다. 서버 수가 많으면 좀 지저분합니다. 그래서 자동으로 서버에 로그인하는 스크립트를 작성하려고 생각했습니다. 이 작업을 처음 시작했을 때 일반 유닉스 쉘은 로그인 프롬프트가 표시될 때 암호를 보낼 방법이 없기 때문에 SSH 암호를 입력하는 방법이 막혔습니다. 그런 다음 입력을 위해 터미널을 여는 프로그램과의 상호 작용을 자동화할 수 있는 예상 스크립트에 대해 알게 되었습니다.

예상 스크립트

예상 스크립트 SSH 예

다음은 SSH 서버에 자동으로 로그인한 다음 슈퍼 유저로 로그인한 다음 간단한 명령을 실행하기 위해 만든 스크립트입니다. sshsudologin.expect

#!/usr/bin/expect

#Usage sshsudologin.expect <host> <ssh user> <ssh password> <su user> <su password>

set timeout 60

spawn ssh [lindex $argv 1]@[lindex $argv 0]

expect "yes/no" { 
	send "yes\r"
	expect "*?assword" { send "[lindex $argv 2]\r" }
	} "*?assword" { send "[lindex $argv 2]\r" }

expect "# " { send "su - [lindex $argv 3]\r" }
expect ": " { send "[lindex $argv 4]\r" }
expect "# " { send "ls -ltr\r" }
interact

예상 스크립트에 대한 중요 사항

  1. 예상 스크립트가 인터프리터로 사용됨을 지정하는 첫 번째 줄에 주목하십시오.
  2. 예상 스크립트 기본 시간 제한은 10초이므로 로그인 프롬프트가 표시되는 데 시간이 걸리는 경우 시간 제한 문제를 방지하기 위해 시간 제한을 60초로 설정했습니다.
  3. expect 명령 뒤에 정규식과 응답으로 보내야 할 내용을 확인하십시오. 원격 서버 키를 아직 가져오지 않은 경우 실패하지 않도록 첫 번째 예/아니요 선택 항목이 추가되었습니다.
  4. 다른 예상 정규식은 서버마다 다릅니다. 내 서버의 경우 "#\로 끝나지만 일부 다른 서버의 경우 "$\로 끝날 수 있으므로 적절하게 편집해야 할 수 있습니다. 확인해야 할 유일한 사항은 expect 명령에 대한 정규식이 일치해야 해당 명령 또는 암호를 보낼 수 있다는 것입니다.
  5. 마지막 expect 명령은 서버에 로그인한 후에도 명령을 보낼 수 있음을 보여줍니다.

다음은 올바른 매개변수를 사용하여 위의 예상 스크립트를 실행할 때의 출력입니다.

pankaj@Pankajs-MacBook-Pro:~$/Users/pankaj/scripts/sshloginsudo.expect 'journaldev.com' 'pankaj' 'ssh_pwd' 'su_user' 'su_pwd'
spawn ssh pankaj@journaldev.com
pankaj@journaldev.com's password: 
Last login: Sun Jun  9 19:54:17 2013 from c-67-161-57-160.hsd1.ca.comcast.net
pankaj@journal [~]# su - su_user
Password: 
su_user@journal [~]# ls -ltr
total 708
...

스크립트 기대에 대한 추가 팁

  1. 모든 정보가 인수로 전달되기 때문에 expect 스크립트를 재사용할 수 있으므로 빠른 로그인을 위해 각 정보에 대한 별칭을 만들고 모든 매개변수를 입력하는 시간을 절약하는 것이 가장 좋습니다. 예: alias journal=/Users/pankaj/scripts/sshloginsudo.expect journaldev.com pankaj ssh_pwd su_user su_pwd
  2. 인수를 전달할 때 항상 작은따옴표를 사용하는 것이 가장 좋습니다. 대부분의 경우 암호에는 특수 문자가 포함되어 있어 따옴표로 묶지 않으면 이상한 결과를 초래할 수 있기 때문입니다.

참고: 위 스크립트는 Mac OS 및 Linux 시스템에서 테스트되었습니다. 참조: SourceForge 페이지