[bash: expect] ssh 자동 접속 리눅스 bash script

앞에서 올린 telnet 자동 접속 방법으로 ssh 접속은 불가능하다.

ssh 로그인을 자동화하려면 우선 expect를 설치해야 한다. 패키지 관리자에서 expect를 검색해서 설치하면 된다.

터미널창에서 설치하고 싶다면 아래와 같이 입력하면 되겠다.

sudo apt-get install expect
(데비안/우분투 계열 배포판)

또는

sudo zypper install expect
(오픈수세)

expect가 설치되었으면 이제 ssh 자동 접속을 해 보자.

예를 들어 ssh 서버가 192.168.0.10이고 사용자명은 john, 암호는 my_password라고 가정하자. 또한 서버에 로그인하면 셸 프롬프트(shell prompt)는 john> 이렇게 나온다고 가정하자. (셸 프롬프트가 어떤 형태로 표시되는지 미리 알고 있어야 한다)

처음 접속할 때는 암호화 통신을 위한 열쇠(RSA key)를 받아야 되니까 처음 한번은 수동으로 접속해서 열쇠를 받고, 그 다음부터 자동화 스크립트를 이용하면 되겠다. (만약 열쇠를 무조건 자동으로 받고 싶다면 ssh 접속에서 -o StrictHostKeyChecking=no 항목을 추가해야 한다. 아래 예시의 내용을 참고하자)

문서편집기를 이용해서 자동화 스크립트 ssl_login.exp를 아래와 같이 작성한다. #으로 시작되는 줄은 주석(comment)이다. 서버 192.168.0.10에 john이라는 사용자가 ssh 접속을 해서 서버의 커널 버전을 확인하기 위해 uname -r 명령을 실행한 경우이다.
 
# script file: ssl_login.exp
# spawn ssh process
spawn ssh john@192.168.0.10
# to accept RSA key automatically, set StrictHostKeyChecking=no
# spawn ssh -o StrictHostKeyChecking=no john@192.168.0.10
# wait for password request
expect -nocase "password"
# send password (\r is for return key)
send "my_password\r"
# wait for shell prompt
expect "john>"
# execute commands (in this example, identify kernel version with 'uname -r' command)
send "uname -r\r"
# wait for user prompt
expect "john>"
# exit
send "exit\r"

위와 같이 스크립트를 만들었으면, 아래의 명령으로 실행하면 된다.
expect -f ssl_login.exp

여기에 사용된 expect 스크립트 명령어에 대해 간단히 적어 보자면,
spawn: 새로운 프로세스를 실행한다
expect: 특정 문자열이 나올 때까지 기다린다. -nocase 옵션을 주면 대소문자를 구별하지 않는다.
send: 특정 문자열을 실행중인 프로세스로 보낸다. 명령어를 입력하고 엔터를 누르는 경우 마지막에 \r 추가.



핑백

  • 반달가면 : 자동 접속 script 사용할 때 명심할 점 2013-03-07 22:32:58 #

    ... 앞에 게시한 ftp, telnet, ssh 자동접속 script를 사용할 경우 script에 접속 암호가 그대로 표시된다. 그러므로 반드시 해당 파일에 대한 접근권한을 제대로 설정해 주어야만 한다. 예를 ... more

  • SSH 원격 명령어 입력 자동화 – expect – EJLab 2016-01-27 16:40:04 #

    ... 행할 명령어 입력send "echo hello > hello.txt\r" # 완료될때까지 대기expect "#"# 종료send "exit\r" http://bahndal.egloos.com/391590 관련 expect, ssh, 리눅스. permalink. Post navigation jquery로 html 바꾸기 Search for: 최근 글 S ... more

덧글

  • costzero 2013/03/07 00:20 # 답글

    허억...ssh도 자동으로.
  • 반달가면 2013/03/07 22:13 #

    네.. 이런 것도 됩니다;
  • NABU 2013/03/07 08:46 # 답글

    어지간한 곳이면 그냥 키인증...
  • 반달가면 2013/03/07 22:21 #

    키 인증도 좋은 방법입니다만, 사실 이 스크립트는 로그인 못지 않게 로그인한 후에 실행할 명령어들을 자동화할 수 있다는 부분이 매우 유용합니다.
  • 밀리네스 2013/03/07 10:29 # 답글

    sshpass http://sourceforge.net/projects/sshpass/ 를 이용하시면 좀더 쉽게 쓰실수 있습니다.

    sshpass -p PASSWORD ssh ID@ADDRESS
    sshpass -p PASSWORD scp FROM TO

    이런식으로 사용하실수 있습니다.

  • 반달가면 2013/03/07 22:22 #

    아 네 그것도 쓸모 있겠네요. 로그인 후에 좀 복잡한 작업을 하게 하려면 어쨌든 expect는 써야 할 것 같습니다.
  • SiroTan。◕‿‿◕。 2013/03/07 12:15 # 답글

    우분투가 역시 편해 ~ ㅋ
  • 반달가면 2013/03/07 22:24 #

    리눅스 자체가 좀 복잡해 보이긴 해도 알고 보면 편리한 기능이 꽤 많지요.
  • 코퍼스 2013/03/11 11:11 # 삭제 답글

    저의 경우에는 예전에 Perl의 Expect 모듈을 이용한 자동작업 프로그램을 짜서,, 업무에 꽤 큰도움을 받은 적이 있었죠..
    블로그에 유용한 팁이 많이 있네요..
    자주 찾아와 도움 받겠습니다.^_^
  • 반달가면 2013/03/11 21:54 #

    도움 되신다니 다행입니다~
댓글 입력 영역
* 비로그인 덧글의 IP 전체보기를 설정한 이글루입니다.

Google Analytics


B-Side


adsense(w160_h600)2

통계 위젯 (화이트)

73854
4683
1112232

ad_widget_2