셸 스 크 립 트 빠 른 입문 - Expect 상호작용 면제 깊이 소개
1. 기대 개술
1. 격식
set ip 192.168,。110.2
spawn ssh root@192.157.1111
expect connetcting (yes/no)
send yes
send: 사용자 의 입력 을 모 의 하 는 데 사용 할 문자열 을 프로 세 스에 보 냅 니 다.
Timeout: 시간 초과 시간 을 지정 하고 기한 이 지나 면 후속 명령 을 계속 실행 합 니 다.
흐름:
spawn 시작 추적 -> expect 일치 캡 처 키워드 -> send 를 입력 명령 으로 대체 하 는 것 을 캡 처 합 니 다 -> interact/expect eof
$argv 매개 변수 배열
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 로그 인
- [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,
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
셸 스 크 립 트 (다 중 스 레 드 대량 생 성 사용자)예 를 들 어 백업 데이터 베 이 스 는 100 개의 라 이브 러 리 가 있 고 정상 적 인 백업 효율 이 매우 낮 습 니 다.다 중 스 레 드 가 있 으 면 백업 하 는 데 10 시간 이 걸 릴 수도 있 었 는데 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.