Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> 關於 Linux

Linux expect 命令實戰:自動化 SSH 登入、遠端指令執行與互動腳本

編輯:關於 Linux

expect 是基於 Tcl 的自動化互動工具,能模擬人工輸入、等待特定提示並回應,廣泛用於 SSH 自動登入、SCP 自動傳檔、自動化部署腳本等場景。

expect 自動化示意圖

核心指令速查

指令說明
spawn啟動子進程(如 ssh、ftp、telnet)
expect等待輸出出現指定字串
send發送字串給子進程(需以 \r 結尾)
interact將控制權交還使用者(保持連線)
exp_continue繼續匹配下一個 expect 模式
set timeout設定等待超時秒數

基礎範例:自動 SSH 登入

#!/usr/bin/expect
set timeout 30
spawn ssh -l root 192.168.1.188
expect "password:"
send "abc123456\r"
interact

逐行解析

  1. #!/usr/bin/expect:指定解釋器(必須為第一行)。
  2. set timeout 30:設定 30 秒超時。
  3. spawn ssh ...:啟動 ssh 進程,spawn 為 expect 內建指令。
  4. expect "password:":等待出現密碼提示。
  5. send "abc123456\r":發送密碼並送出 Enter(\r 關鍵)。
  6. interact:交還控制台,保持登入狀態。

進階範例 1:遠端執行腳本並退出

#!/usr/bin/expect -f
set timeout 30
spawn ssh -l root 192.168.1.188
expect {
  "yes/no" { send "yes\r"; exp_continue }
  "password:" { send "abc123456\r" }
}
expect -re "](\$|#) "
send "bash /root/test.sh\r"
expect -re "](\$|#) "
send "exit\r"

關鍵點

  • expect { ... } 多分支匹配,處理首次連線的金鑰確認。
  • exp_continue 讓「yes/no」分支匹配後繼續等待密碼提示。
  • expect -re 使用正則匹配 Shell 提示符($ 或 #)。

進階範例 2:單行模式嵌入 Bash 腳本

#!/bin/bash
expect -c "
  spawn ssh root@192.168.1.188 \"ifconfig; whoami; pwd; echo hello;\"
  expect {
    \"*assword\" { set timeout 30; send \"abc123456\r\"; }
    \"yes/no\" { send \"yes\r\"; exp_continue; }
  }
  expect eof
"

優缺點比較

模式優點缺點
獨立 .expect 檔結構清晰、易維護、支援複雜邏輯需額外檔案、執行權限管理
Bash 嵌入 -c單一檔案、方便整合既有腳本跳脫字元複雜、除錯較難

安全性提醒

  • 避免明文密碼:生產環境請改用 SSH 金鑰認證(ssh-copy-id),expect 僅作為無法部署金鑰環境的備案。
  • 腳本檔案權限設為 700,限制擁有者讀寫執行。
  • 考慮使用 sshpass 替代簡單密碼傳遞場景。

expect 能將重複性互動操作自動化,配合 cron 定時任務可實現無人值守維運。掌握其模式匹配與分支邏輯,是 Linux 自動化運維的核心技能之一。

Copyright © Windows教程網 All Rights Reserved