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 등으로 바꿔가면서 옵션을 전달할 수 있다.