Linux

Linux - expect, spawn, send etc..

개발 일기92 2025. 3. 16. 11:40

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

실행법:

  1. expect가 설치되어 있는지 확인 (which expect 또는 expect -v)
  2. 실행 권한 부여:
    chmod +x ssh_login.exp
  3. 실행:
     
    ./ssh_login.exp

3. spawn과 expect의 동작 흐름

  1. spawn → ssh $user@$host 실행
  2. expect "password:" → 비밀번호 입력 프롬프트 대기
  3. send "$password\r" → 비밀번호 입력
  4. expect "$ " → 로그인 후 프롬프트 대기
  5. send "echo 'Login Successful'\r" → 로그인 성공 메시지 출력
  6. send "exit\r" → SSH 종료
  7. 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