sshpass
와 함께 혹은 대신 사용하여 로그인 자동화가 가능하다.sshpass -f 파일경로
사용시 파일 경로에 ~
로 사용자 디렉토리 지칭하는 것이 작동하지 않았다.spawn 명령어
: 명령어를 실행한다.expect “특정문자열”
: “if 특정 문자열이 나타나면” 정도의 의미send “보낼문자열\r”
: 문자열을 전송한다. \r
은 엔터키를 의미한다.interact
: 이제는 expect를 끝내고 사용자에게 제어권을 넘긴다.set 변수 [lindex $argv 0]
: 0번째 명령행 인자를 변수에 지정한다.send “$변수”
: 변수에 저장된 문자열을 전송한다.expect eof
: expect 종료-nocase
: 대소문자 구별안함#!/usr/bin/expect set timeout 20 set ip [lindex $argv 0] set user [lindex $argv 1] set password [lindex $argv 2] spawn ssh "$user\@$ip" expect "Password:" send "$password\r"; interact
#!/bin/bash # 원하는 bash script 작업 SOME_ENV_VAR1="값" SOME_ENV_VAR2="값2" expect <<EOF # expect script들 기록 # "$SOME_ENV_VAR1", "$SOME_ENV_VAR2" 형태로 shell script의 변수 사용가능 expect eof EOF # 이제 다시 원하는 셸 스크립트 작업
<<EOF
방식을 사용하면 STDIN이 이걸로 소진돼 버려서 interact
가 작동하지 않는다. 이 경우에는 -f expect명령모음파일명
옵션으로 외부 파일로 expect 스크립트를 빼두면 된다.expect -f 파일명 옵션1 옵션2
등으로 실행하고 set 변수명 [lindex $argv 0]
혹은 숫자 1 등으로 바꿔가면서 옵션을 전달할 수 있다.