UNIX/LINUX 는 expect 를 사용 하여 인간 과 컴퓨터 의 자동 상호작용 기능 을 실현 한다.
이 줄 은 운영 체제 스 크 립 트 의 코드 를 셸 로 실행 하 라 고 알려 줍 니 다.이곳 의 expect 는 사실 Liux 아래 의 bash, windows 아래 의 cmd 와 같은 것 이다.
메모: 이 줄 은 스 크 립 트 의 첫 줄 에 있어 야 합 니 다.
기본적으로 영 어 를 아 는 사람들 은 모두 이것 이 시간 초과 설정 이라는 것 을 안다. 지금 너 는 그의 시간 단위 가 초 라 는 것 을 기억 하기 만 하면 된다.timeout - 1 은 시간 을 초과 하지 않 습 니 다.
spawn 은 expect 환경 에 들 어가 야 실행 할 수 있 는 expect 내부 명령 입 니 다. expect 를 설치 하지 않 거나 기본 SHELL 에서 실행 하지 않 으 면 spawn 명령 을 찾 을 수 없습니다.그 러 니 "which spawn"과 같은 명령 으로 spawn 명령 을 찾 지 마 세 요. windows 의 dir 는 내부 명령 입 니 다. 이 명령 은 셸 이 직접 가지 고 있 습 니 다. dir. com 이나 dir. exe 의 실행 가능 한 파일 을 찾 을 수 없습니다.
그것 의 주요 기능 은 ssh 실행 프로 세 스에 케이스 를 추가 하여 상호작용 명령 을 전달 하 는 것 이다.
여기 expect 도 expect 의 내부 명령 입 니 다. 좀 어 지 럽 죠? expect 의 셸 명령 은 내부 명령 과 같 지만 하나의 기능 이 아니 라 습관 이 되 었 으 면 좋 겠 습 니 다. 이 명령 은 지난번 출력 결과 에 'password:' 가 포함 되 어 있 는 지 판단 하 는 것 입 니 다.있 으 면 바로 돌아 갑 니 다. 그렇지 않 으 면 일정 시간 을 기 다 렸 다가 돌아 갑 니 다. 여기 서 기다 리 는 시간 은 앞에서 설정 한 30 초 입 니 다.
이것 은 바로 상호작용 동작 을 수행 하고 수 동 으로 비밀 번 호 를 입력 하 는 동작 과 같은 효 과 를 가진다.
따뜻 한 알림: 명령 문자열 의 끝 에 '\r' 를 추가 하 는 것 을 잊 지 마 세 요. 이상 한 대기 상태 가 있 으 면 확인 해 보 세 요.
실행 이 끝 난 후 대화 상 태 를 유지 하고 콘 솔 에 제어 권 을 맡 깁 니 다. 이 때 는 손 으로 작업 할 수 있 습 니 다. 이 로그 인 이 완료 되 지 않 으 면 원 격 터미널 에 있 는 것 이 아니 라 종료 합 니 다. 로그 인 만 하고 실행 하면 됩 니 다.
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
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자동 로그인 서버 expect텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.