bash script (backup)2020. 10. 19. 09:02

 

반달가면 이글루에서 백업 - bahndal.egloos.com/391590

 

앞에서 올린 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 추가.

 

Posted by 반달가면

댓글을 달아 주세요