bash script2020. 10. 19. 09:54

 

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

 

지난번에 적어 놓은 ssh 자동 접속 방법을 조금 확장시켜 볼 수 있겠다.

expect는 인자(argument)를 사용할 수 있기 때문에, 접속 주소나 암호 등을 script에 넣지 않고 인자로 지정할 수 있다. 실행 명령에 사용된 인자는 argv라는 이름의 변수로 가져온다.

 

예제 script 이름은 ssl_login2.exp로 하자. 인자 순서는 접속주소, 접속암호, 셸 프롬프트(shell prompt) 문자열 순서로 정하면 실행은 이런 식이 될 것이다.

 

expect -f ssl_login2.exp john@192.168.0.10 my_password "john>"

 

ssh서버 192.168.0.10에 john이라는 계정으로 접속하고 암호는 my_password인 경우이다. 로그인했을 경우 셸 프롬프트에 john>이라는 문자열이 들어있다고 가정했다. 셸 프롬프트를 인자로 가져오는 경우 bash에서 사용되는 특수 기호(>, | 등)가 포함되어 있다면 위의 예와 같이 반드시 따옴표 처리를 해 주자.

 

ssl_login2.exp script는 아래와 같이 만들면 되겠다. 인자로 받은 주소, 접속암호, 셸 프롬프트 문자열 값을 각각 addr, password, prompt 변수에 할당했다. 로그인 후에 하는 작업은 지난번처럼 그냥 커널 버전 확인만 하는 것으로 했다.

 

# script file: ssl_login2.exp

# version 2 (with argument support)

# set variables

set addr [lindex $argv 0]

set password [lindex $argv 1]

set prompt [lindex $argv 2]

# spawn ssh session

spawn ssh $addr

expect -nocase "password"

send "$password\r"

expect "$prompt"

# execute commands (in this example, 'uname -r')

send "uname -r\r"

expect "$prompt"

send "exit\r"

exit 0

 

각기 다른 서버에 들어가 같은 종류의 반복작업을 해야 할 경우 나름 편리하게 사용할 수 있다.

 

728x90
Posted by 반달가면