首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Linux 符號連結操作指南與 Expect 自動化 SCP 部署腳本

     編輯:Java 相關知識

Linux 符號連結操作指南與 Expect 自動化 SCP 部署腳本

本文分為兩大主題:第一部分詳細說明 Linux 符號連結 (Symbolic Link) 的建立、查詢、刪除等常用操作;第二部分提供 Expect 腳本實現自動化 SCP 檔案傳輸,並搭配 Shell 腳本達成批量部署多台伺服器。

第一部分:符號連結 (Symlink) 完整操作

基本概念

  • 符號連結是指向另一個檔案/目錄的特殊檔案,類似 Windows 捷徑但更底層。
  • 刪除連結**不會**影響原始檔案。
  • ls -l 輸出權限欄位首字母為 l 表示符號連結,後面顯示 link_name -> target。

建立連結

ln -s /path/to/target /path/to/link_name
# 範例:在家目錄建立指向 /var/www 的 web 連結
ln -s /var/www/ ~/web

查詢與列出連結

# 1. ls 配合 grep/awk 列出當前目錄所有連結
ls -l | grep "^l" | awk '{print $9}'

# 2. find 專門搜尋連結檔案 (含子目錄)
find . -type l -print

# 3. 顯示連結指向的真實路徑
ls -l link_name | awk '{print $11}'
# 或更簡潔的
readlink link_name

刪除連結

rm link_name    # 僅刪除連結檔案本身
unlink link_name # 同義

第二部分:Expect 自動化 SCP 免密碼傳輸

Expect 是自動化互動式程式 (如 ssh, scp, ftp) 的神器,透過「期望字串 → 發送回應」模式處理密碼提示。

單機 Expect 腳本 (expect_scp)

#!/usr/bin/expect
set host_ip [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set src_file [lindex $argv 3]
set dest_file [lindex $argv 4]

spawn scp $src_file $username@$host_ip:$dest_file
expect {
    "yes/no" { send "yes\r"; exp_continue }  # 首次連線接受金鑰
    "password:" { send "$password\r" }
}
expect eof

批量部署 Shell 腳本 (batch_scp.sh)

#!/bin/bash
# 用法: ./batch_scp.sh hosts.list /local/src /remote/dest
list_file=$1
src_file=$2
dest_file=$3

while read -r line; do
    # 格式: IP username password
    host_ip=$(echo $line | awk '{print $1}')
    username=$(echo $line | awk '{print $2}')
    password=$(echo $line | awk '{print $3}')
    
    echo "Deploying to $host_ip ..."
    ./expect_scp "$host_ip" "$username" "$password" "$src_file" "$dest_file"
done < "$list_file"

主機清單檔案 (hosts.list)

192.168.1.10  root  password123
192.168.1.11  admin my$ecretPass  # 特殊字符需轉義或用單引號包裹

執行流程

  1. 確保 expect_scp 有執行權限:chmod +x expect_scp
  2. 執行批量腳本:./batch_scp.sh hosts.list /root/app.jar /opt/app/app.jar

進階提示與坑點

  • 密碼特殊字符:Expect 腳本中密碼含 $, [, ] 等需轉義,建議改用 SSH 金鑰認證徹底解決。
  • StrictHostKeyChecking:首次連線會提示 yes/no,Expect 腳本已處理;亦可在 ~/.ssh/config 設定 StrictHostKeyChecking no。
  • 並行化:大量主機可用 xargs -P 或 GNU Parallel 平行執行 Expect 腳本。
  • 安全性:明文密碼存於清單檔風險極高,**生產環境強制使用 SSH Key + ssh-agent**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved