UNIX/LINUX 는 expect 를 사용 하여 인간 과 컴퓨터 의 자동 상호작용 기능 을 실현 한다.

expect 용법
  • [#!/usr/bin/expect]

  • 이 줄 은 운영 체제 스 크 립 트 의 코드 를 셸 로 실행 하 라 고 알려 줍 니 다.이곳 의 expect 는 사실 Liux 아래 의 bash, windows 아래 의 cmd 와 같은 것 이다.
    메모: 이 줄 은 스 크 립 트 의 첫 줄 에 있어 야 합 니 다.
  • [set timeout 30]

  • 기본적으로 영 어 를 아 는 사람들 은 모두 이것 이 시간 초과 설정 이라는 것 을 안다. 지금 너 는 그의 시간 단위 가 초 라 는 것 을 기억 하기 만 하면 된다.timeout - 1 은 시간 을 초과 하지 않 습 니 다.
  • [spawn ssh -l username 192.168.1.1]

  • spawn 은 expect 환경 에 들 어가 야 실행 할 수 있 는 expect 내부 명령 입 니 다. expect 를 설치 하지 않 거나 기본 SHELL 에서 실행 하지 않 으 면 spawn 명령 을 찾 을 수 없습니다.그 러 니 "which spawn"과 같은 명령 으로 spawn 명령 을 찾 지 마 세 요. windows 의 dir 는 내부 명령 입 니 다. 이 명령 은 셸 이 직접 가지 고 있 습 니 다. dir. com 이나 dir. exe 의 실행 가능 한 파일 을 찾 을 수 없습니다.
    그것 의 주요 기능 은 ssh 실행 프로 세 스에 케이스 를 추가 하여 상호작용 명령 을 전달 하 는 것 이다.
  • [expect “password:”]

  • 여기 expect 도 expect 의 내부 명령 입 니 다. 좀 어 지 럽 죠? expect 의 셸 명령 은 내부 명령 과 같 지만 하나의 기능 이 아니 라 습관 이 되 었 으 면 좋 겠 습 니 다. 이 명령 은 지난번 출력 결과 에 'password:' 가 포함 되 어 있 는 지 판단 하 는 것 입 니 다.있 으 면 바로 돌아 갑 니 다. 그렇지 않 으 면 일정 시간 을 기 다 렸 다가 돌아 갑 니 다. 여기 서 기다 리 는 시간 은 앞에서 설정 한 30 초 입 니 다.
  • [send “ispass\r”]

  • 이것 은 바로 상호작용 동작 을 수행 하고 수 동 으로 비밀 번 호 를 입력 하 는 동작 과 같은 효 과 를 가진다.
    따뜻 한 알림: 명령 문자열 의 끝 에 '\r' 를 추가 하 는 것 을 잊 지 마 세 요. 이상 한 대기 상태 가 있 으 면 확인 해 보 세 요.
  • [interact]

  • 실행 이 끝 난 후 대화 상 태 를 유지 하고 콘 솔 에 제어 권 을 맡 깁 니 다. 이 때 는 손 으로 작업 할 수 있 습 니 다. 이 로그 인 이 완료 되 지 않 으 면 원 격 터미널 에 있 는 것 이 아니 라 종료 합 니 다. 로그 인 만 하고 실행 하면 됩 니 다.
    7. $argv 매개 변수 배열
    expect 스 크 립 트 는 bash 에서 전 달 된 인 자 를 받 아들 일 수 있 습 니 다. [lindex $argv n] 을 사용 하여 얻 을 수 있 습 니 다. n 은 0 부터 각각 첫 번 째, 두 번 째, 세 번 째... 인 자 를 표시 합 니 다.
    다음 expect 스 크 립 트 의 예
    이 파일 을 실행 합 니 다./runch. exp 1, 2, 3
    화면 에 각각 인자 가 인쇄 됩 니 다.
    send user 는 사용자 에 게 내용 을 보 내 는 데 사 용 됩 니 다.
    매개 변수 운용 에 아직도 많은 기교 가 있다.
    예 를 들 어 argc 는 매개 변수 개 수 를 저장 하고 args 는 하나의 목록 으로 구조 화 되 어 argv 가 존재 합 니 다. argv 0 은 스 크 립 트 이름 으로 초기 화 되 었 습 니 다.
    그 밖 에 첫 줄 (\#! 그 줄) 에서 - d (debug 인자) 를 사용 하면 실행 할 때 유용 한 정 보 를 출력 할 수 있 습 니 다.
    예 를 들 면 당신 이 볼 수 있 습 니 다.
    argv[0] =/usr/bin/expect argv[1] = -d argv[2] = ./launch.exp argv[3] = 1 argv[4] = 2 argv[5] = 3
    이것 을 사용 하면 매개 변수 전달 을 완성 할 수 있 습 니 다.
    8. expect 의 명령 행 인 자 는 c 언어 를 참 조 했 습 니 다. bash 셸 과 는 조금 다 릅 니 다. 그 중에서 argc 는 명령 행 매개 변수 의 개수 이 고 argv 0 은 스 크 립 트 이름 자체 이 며 argv 는 명령 행 매개 변수 입 니 다. [lrrange argv 0] 은 첫 번 째 매개 변 수 를 표시 합 니 다. [lrrange argv 04] 는 첫 번 째 부터 다섯 번 째 매개 변수 입 니 다. c 언어 와 다른 점 은 argv 는 스 크 립 트 이름 자 체 를 포함 하지 않 습 니 다.
    9. exp continue 의 용법
    #!/usr/bin/expect -f
    set ipaddr “localhost”
    set passwd “iforgot”
    spawn ssh root @ $ipaddr\# spawn 은 명령 을 실행 하 는 것 을 의미 합 니 다. expect 내 명령, 셸 에 존재 하지 않 습 니 다.
    expect {
    “yes/no” { send “yes\r”; exp_continue}
    “password:” { send “$passwd\r” }
    }
    expect “]# “
    send "touch a. txt\r"\# 명령 보 내기
    send “exit\r”
    expect eof
    exit
    exp contine 은 아래 의 매 칭 을 계속 실행 할 수 있 습 니 다. 아주 간단 합 니 다. 그리고 한 가 지 는 마지막 몇 글자 와 일치 하지 않 는 다 는 것 을 깨 달 았 습 니 다.
    10. 작은 예 를 들 어 라
    변수 set PASSWD abcd 123 설정
    #!/usr/bin/expect -f
    
    # Expect script to supply root/admin password for remote ssh server
    
    # and execute command.
    
    # This script needs three argument to(s) connect to remote server:
    
    # password = Password of remote UNIX server, for root user.
    
    # ipaddr = IP Addreess of remote UNIX server, no hostname
    
    # scriptname = Path to remote script which will execute on remote server
    
    # If you username and passwd has not pass the rsa trust, your login will fail.
    
    # Usage For example:
    
    # ./sshlogin.exp password 192.168.1.11 who
    
    # ------------------------------------------------------------------------
    
    # Copyright (c) 2004 nixCraft project <http://cyberciti.biz/fb/>
    
    # This script is licensed under GNU GPL version 2.0 or above
    
    # -------------------------------------------------------------------------
    
    # This script is part of nixCraft shell script collection (NSSC)
    
    # Visit http://bash.cyberciti.biz/ for more information.
    
    # ----------------------------------------------------------------------
    
    # set Variables
    
    set password [lrange $argv 0 0]
    
    set ipaddr [lrange $argv 1 1]
    
    set scriptname [lrange $argv 2 2]
    
    set arg1 [lrange $argv 3 3]
    
    set timeout -1
    
    # now connect to remote UNIX box (ipaddr) with given script to execute
    
    spawn ssh yourusername@$ipaddr $scriptname $arg1
    
    match_max 100000
    
    # Look for passwod prompt
    
    expect "*?assword:*"
    
    # Send password aka $password
    
    send -- "$password\r"
    
    # send blank line (\r) to make sure we get back to gui
    
    send -- "\r"
    
    expect eof
    
    
    
    ==============================================================================
    
    
    

    #!/usr/bin/expect
    \# 설정 시간 초과 60 초
    set timeout 60
    \# 로그 인 할 호스트 IP 주소 설정
    set host 192.168.1.46
    \# 어떤 이름 의 사용자 로그 인 을 설정 합 니까?
    set name root
    \# 사용자 이름 의 로그 인 비밀 번 호 를 설정 합 니 다.
    set password 123456
    \# spawn ssh 로그 인 프로 세 스
    spawn ssh host−l name
    \# 응답 을 기다 리 면 첫 번 째 로그 인 은 RSA 를 이 컴퓨터 의 know hosts 목록 에 영구적 으로 저장 할 지 여 부 를 알려 줍 니 다. 대답 한 후에 출력 비밀 번 호 를 알려 줍 니 다. 그 다음 에 비밀 번 호 를 입력 하 는 것 을 알려 줍 니 다.
    expect {
    "(yes/no)?" { 
    
        send "yes
    " expect "assword:" send "$pasword
    " } "assword:" { send "$password
    " }

    }
    expect “#”
    \# $host 에 로그 인 할 지 테스트 합 니 다.
    send “uname”
    expect “Linux”
    send_user “Now you can do some operation on this terminal”
    \# 프로그램 이 끝 난 후에 사용 자 는 $host 터미널 에서 상호작용 을 할 수 있 도록 interact 명령 을 사 용 했 습 니 다.
    Interact
    ==============================================================================
    expect 로 ssh 자동 로그 인 서버 대량 관리
    1. ssh 자동 로그 인 작업 을 수행 하 는 expect 스 크 립 트
    #!/usr/bin/expect -f
    set ipaddress [lindex $argv 0]
    set passwd [lindex $argv 1]
    set timeout 30
    spawn ssh shellqun@$ipaddress
    expect {
    “yes/no” { send “yes\r”;exp_continue }
    “password:” { send “$passwd\r” }
    }
    expect “from”
    send “mkdir -p ./tmp/testfile\r”
    #send “exit\r”
    expect "\#"명령 이 실행 되 었 습 니 다. 결 과 를 기대 하 십시오. 결 과 는 셸 프롬프트 로 돌아 가 는 것 입 니 다. (예:\# 또는 $)
    \# 마지막 13 줄 의 설명:
    사실 interact 라 고 쓰 는 가장 큰 장점 은 로그 인 후 로그아웃 하지 않 고 세 션 연결 을 계속 유지 하 는 것 입 니 다. 다른 작업 을 수 동 으로 처리 할 수 있 습 니 다. 실제 상황 에 따라 스스로 선택 하 십시오.
    2. login. exp 를 호출 하여 대량 관리 완료
    !/bin/bash
    for i in awk '{print $1}' passwd.txt
    do
    j= awk -v I="$i" '{if(I==$1)print $2}' passwd.txt
    expect/root/shell/login.exp i j
    done
    3.passwd.txt
    192.168.0.2 password2
    192.168.0.3 password3
    13.expect {
    "? assword:"{\# 이 대괄호 안 은 조목조목 실 행 됩 니 다. if 관계 send "$PASSWORD\\r"는 존재 하지 않 습 니 다.
    exp_continue
    }
    }

    좋은 웹페이지 즐겨찾기