반달가면 이글루에서 백업 - 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
각기 다른 서버에 들어가 같은 종류의 반복작업을 해야 할 경우 나름 편리하게 사용할 수 있다.
'bash script' 카테고리의 다른 글
[bash: RANDOM] 난수 생성 (0) | 2020.10.21 |
---|---|
[bash: expr, bc] 산수 계산 (정수 및 실수 연산) (0) | 2020.10.20 |
자동 접속 script 사용할 때 명심할 점 (0) | 2020.10.19 |
[bash: expect] ssh 자동 접속 (0) | 2020.10.19 |
[bash: telnet] telnet 자동 접속 (0) | 2020.10.16 |