셸 스 크 립 트 빠 른 입문 - Expect 상호작용 면제 깊이 소개

글 목록
  • 1. 기대 개술
  • 2. 기본 명령
  • 1. 형식
  • 3. Expect 문법
  • 4. 기대 집행 방식
  • 1. 직접 집행
  • 2. 삽입 실행
  • 3. 사례 1: 사용자 tom 만 들 기, 비밀번호 tom 123
  • 4. 사례 2: SSH 로그 인
  • 5. 사례 3: FTP 로그 인
  • 대화 면제: 자동화 처리 의 전제 조건
    1. 기대 개술
  • expect 는 tc | 를 바탕 으로 하 는 도구 이 고 expect 는 자동화 제어 와 테스트 를 하 는 도구 이다.주로 shelI 스 크 립 트 에서 상호작용 할 수 없 는 문 제 를 해결 합 니 다.대규모 Liux 운영 에 도움 이 됩 니 다
  • Liux 운영 과 개발 에서 우 리 는 원 격 로그 인 서버 를 조작 해 야 합 니 다. 로그 인 하 는 과정 은 상호작용 의 과정 으로 yes/no, password 등 정 보 를 입력 해 야 할 수도 있 습 니 다.이러한 입력 을 모 의 하기 위해 서 는 Expect 스 크 립 트 Expect 설치
  • 를 사용 할 수 있 습 니 다.
  • CD 마 운 트
  • 로 컬 YUM 소스 제작
  • 설치 명령 을 실행 합 니 다 yum - y install expect
  • 기본 명령
    1. 격식
    set ip 192.168,110.2       
    spawn ssh root@192.157.1111          
     expect  connetcting (yes/no)                   
    send   yes         
    

    send: 사용자 의 입력 을 모 의 하 는 데 사용 할 문자열 을 프로 세 스에 보 냅 니 다.
  • 자동 으로 차 를 갈 아타 지 못 하고 보통\r (리 턴) expect
  • 를 추가 해 야 합 니 다.
  • expect 의 내부 명령 으로 마지막 출력 결과 에 지정 한 문자열 이 포함 되 어 있 는 지 판단 하고 있 으 면 즉시 되 돌아 갑 니 다. 그렇지 않 으 면 시간 초과 후 되 돌아 갑 니 다
  • spawn 에서 시 작 된 프로 세 스 의 출력 spawn: 프로 세 스 를 시작 하고 후속 인 터 랙 션 정 보 를 추적 할 수 있 습 니 다
  • * * interact: * * 실행 완료 후 상호작용 상 태 를 저장 하고 콘 솔 에 제어 권 을 맡 깁 니 다.
    Timeout: 시간 초과 시간 을 지정 하고 기한 이 지나 면 후속 명령 을 계속 실행 합 니 다.
  • 단 위 는: 초
  • timeout - 1 은 영원히 시간 을 초과 하지 않 는 다
  • 기본적으로 타임 아웃 은 10 초
  • exp_continue
  • expect 가 명령 을 계속 실행 할 수 있 도록 허용 합 니 다
  • send_user
  • 회 현 명령 은 echo
  • 에 해당 합 니 다.
    흐름:
    spawn 시작 추적 -> expect 일치 캡 처 키워드 -> send 를 입력 명령 으로 대체 하 는 것 을 캡 처 합 니 다 -> interact/expect eof
    $argv 매개 변수 배열
  • Expect 스 크 립 트 는 bash 에서 전달 하 는 인 자 를 받 아들 일 수 있 습 니 다. [lindex $argv n] 을 사용 하여 얻 을 수 있 습 니 다. n 은 0 부터 각각 첫 번 째 $1, 두 번 째 $2, 세 번 째 $3... 매개 변수
  • 를 표시 합 니 다.
  • $argvn 에 빈 칸 이 없 으 면 스 크 립 트 이름 을 표시 합 니 다. $argv n 에 빈 칸 이 있 으 면 아래 표 시 를 대표 합 니 다
  • expect 스 크 립 트 는 interact 또는 expect eof 로 끝나 야 합 니 다. 자동화 작업 을 수행 하면 보통 expect eof 로 충분 합 니 다.
  • expect eof 는 종료 표 지 를 기다 리 고 있 습 니 다.spawn 에서 시작 하 는 명령 은 끝 날 때 eof 표 시 를 만 듭 니 다. expect eof 는 이 표 시 를 기다 리 고 있 습 니 다
  • 3. Expect 문법
    send 명령 은 리 턴 기능 이 없 으 며, 일반적으로\r 또는
    단일 분기 문법 expect "password:"{send "mypassword\\r";}
    다 중 분기 모드 문법 방식 1:
    expect “aaa” {send “AAA\r”}
    
    expect “bbb” {send “BBB\r”}
    
    expect “ccc” {send “CCC\r”}
    

    방식 2: aaa 나 bbb 또는 ccc 중 어느 것 이 든 일치 하면 해당 send 문 구 를 실행 한 후 이 expect 문 구 를 종료 합 니 다.
    exoect {
    
    “aaa” {send “AAA\r“}
    
    “bbb” {send “BBB\r”}
    
    “ccc” {send “CCC\r”}
    
    }
    

    방법 3: expcontine 은 뒤의 매 칭 을 계속 하 는 것 을 표시 합 니 다. aa 와 일치 하면 send 문 구 를 실행 한 후에 도 계속 아래로 bb 와 일치 해 야 합 니 다.
    exoect {
    
    “aaa” {send “AAA\r“;exp_continue}
    
    “bbb” {send “BBB\r”;exp_continue}
    
    “ccc” {send “CCC\r”}
    
    }
    

    - re 매개 변 수 는 정규 표현 식 과 일치 합 니 다.
    4. 기대 집행 방식
    사례: ssh 원 격 대화 식 로그 인 면제
    1. 직접 집행
    [root@localhost ~]#vim a.sh
    #!/usr/bin/expect                           //expect    
    set timeout 60
    set hostname [lindex $argv 0]
    set password [lindex $argv 1]
    spawn ssh root@$hostname
    expect {
    "(yes/no)"
    {send "yes\r";exp_continue}
    "*password"
    {send "$password\r"}
    }
    interact
    [root@localhost ~]#chmod +x a.sh
    [root@localhost ~]#./a.sh 192.168.100.100 123abc
    

    2. 삽입 실행
    [root@localhost ~]#vim a.sh
    #!/bin/bash
    hostname=$1
    password=$2
    set timeout 60
    /usr/bin/expect<                           //  expect    
    spawn ssh root@${hostname}
    expect {
    "(yes/no)"
    {send "yes\r";exp_continue}
    "*password"
    {send "$password\r"}
    }
    expect "*]#"             //        
    send "exit\r"            //    
    expect eof               //    
    EOF                          //expect    ,EOF       
    [root@localhost ~]#chmod +x a.sh
    [root@localhost ~]#./a.sh 192.168.100.100 123abc
    

    3. 사례 1: 사용자 tom, 비밀번호 tom 123 만 들 기
    [root@localhost ~]#vim b.sh
    #!/bin/bash
    user=$1
    password=$2
    useradd $user
    expect<<-EOF                           //  expect    
    spawn passwd $user                     //      passwd
    expect {
    "New password:" {send "$password\r";exp_continue}     //            
    "*password" {send "$password\r"}                      //            
    }
    expect eof               //    
    EOF                         
    [root@localhost ~]#chmod +x b.sh
    [root@localhost ~]#./b.sh tom tom123
    

    4. 사례 2: SSH 로그 인
  • 첫 로그 인
  • 정상 로그 인
  • 연결 이 거부 되 었 습 니 다. ssh 가 열 리 지 않 았 거나 포트 가 잘못 되 었 거나 방화벽 제한
  • 일 수 있 습 니 다.
  • 연결 주소 가 없습니다
  • - [root@localhost ~]#vim c.sh
    #!/usr/bin/expect                           //expect    
    set timeout 20
    set hostname [lindex $argv 0]
    set password [lindex $argv 1]
    spawn ssh root@$hostname
    expect {
    "Connection refused" exit
    "Name or service not know" exit
    "(yes/no)" {send "yes\r";exp_continue}
    "*password:" {send "$password\r"}
    }
    interact
    exit
    [root@localhost ~]#chmod +x a.sh
    [root@localhost ~]#./c.sh 192.168.100.100 123abc
    

    5. 사례 3: FTP 로그 인
    [root@localhost ~]#vim d.sh
    #!/bin/bash
    hostname=$1
    expect<<-EOF
    spawn ftp $hostname
    expect {
    "Name" {send "ftp\r";exp_continue}
    "Password" {send "\r"}
    }
    expect eof
    EOF
    [root@localhost ~]#chmod +x d.sh
    [root@localhost ~]#./d.sh 192.168.100.100            //     ftp,      
    

    좋은 웹페이지 즐겨찾기