expect는 자동화된 상호작용을 처리하는 스크립트 언어이다.
보통 SSH, FTP, Telnet, 패스워드 입력 등의 자동화에 사용된다.
spawn은 expect 스크립트에서 특정 프로그램을 실행하는 명령어로,
이 프로그램과의 상호작용을 관리할 수 있도록 해준다.
1. spawn의 역할
- spawn은 지정한 명령어를 실행하고 해당 프로세스와 상호작용할 수 있도록 만든다.
- 보통 expect, send와 함께 사용되어 입력을 자동으로 처리할 수 있다.
2. SSH 자동 로그인
ex) SH 자동 로그인을 수행하는 expect 스크립트
#!/usr/bin/expect # SSH로 원격 서버 접속 자동화 예제
set timeout 10 # 타임아웃 설정 (초)
set user "your_user" # 사용자명
set host "your_host" # 접속할 호스트
set password "your_password" # 비밀번호
spawn ssh $user@$host expect "password:" send "$password\r" expect "$ " # 로그인 후 프롬프트 대기
send "echo 'Login Successful'\r"
send "exit\r"
expect eof
실행법:
- expect가 설치되어 있는지 확인 (which expect 또는 expect -v)
- 실행 권한 부여:
chmod +x ssh_login.exp
- 실행:
./ssh_login.exp
3. spawn과 expect의 동작 흐름
- spawn → ssh $user@$host 실행
- expect "password:" → 비밀번호 입력 프롬프트 대기
- send "$password\r" → 비밀번호 입력
- expect "$ " → 로그인 후 프롬프트 대기
- send "echo 'Login Successful'\r" → 로그인 성공 메시지 출력
- send "exit\r" → SSH 종료
- expect eof → 프로세스 종료
4. 패스워드 입력 자동화 (sudo)
ex) sudo 명령어 실행 시 패스워드를 자동 입력
#!/usr/bin/expect
set timeout 5
set password "your_sudo_password"
spawn sudo ls /root expect "password for"
send "$password\r"
expect eof
실행법:
chmod +x sudo_expect.exp ./sudo_expect.exp
5. FTP 자동 로그인
ex) FTP 서버에 자동 로그인
#!/usr/bin/expect
set timeout 10 # expect Password의 문자열을 기다리는데 대기하는 시간
set user "ftp_user"
set password "ftp_password"
set host "ftp.example.com"
spawn ftp $host expect "Name*:"
send "$user\r"
expect "Password:"
send "$password\r"
expect "ftp>"
send "bye\r"
expect eof
spawn 요약
- spawn은 외부 프로그램 실행 (ssh, ftp, sudo, scp 등)
- expect은 특정 문자열을 기다림 (예: "password:")
- send는 특정 입력을 보냄 (예: "your_password\r")
- expect eof는 프로세스 종료까지 대기
'Linux' 카테고리의 다른 글
Linux - Shebang (0) | 2025.03.16 |
---|---|
Linux - crontab (0) | 2025.03.09 |
Linux - find (0) | 2025.03.02 |
Linux - grep (0) | 2025.03.02 |
Linux - TOP (0) | 2025.01.12 |