SCP

自 Apache Ant 1.6 起

說明

將檔案或 FileSet 複製到或從執行 SSH 程式精靈的(遠端)電腦。FileSet 適用於將檔案從本機複製到遠端電腦。

注意:此任務依賴於未包含在 Ant 發行版中的外部函式庫。請參閱 函式庫依賴項 以取得更多資訊。此任務已使用 jsch-0.1.2 及更新版本進行測試。

另請參閱 sshexec 任務

參數

屬性 說明 必要
file 要複製的檔案。這可以是本機路徑或 user[:password]@host:/directory/path 形式的遠端路徑。如果您使用基於金鑰的身份驗證或指定 password 屬性,則可以省略 :password。識別遠端路徑的方式是它是否包含 @ 字元。如果您的 localPath 包含 @ 字元,則此方式將無法使用。 是,除非使用巢狀 <fileset> 元素
localFile 這是 file 屬性的替代方案。但這必須始終指向本機檔案。新增此項目的原因是,當您提供檔案屬性時,如果它包含 @ 字元,它將被視為遠端。此字元也可能存在於本機路徑中。自 Ant 1.6.2 起 file 屬性的替代方案
remoteFile 這是 file 屬性的替代方案。但這必須始終指向遠端檔案。自 Ant 1.6.2 起 file 屬性的替代方案
todir 要複製到的目錄。這可以是本機路徑或 user[:password]@host:/directory/path 形式的遠端路徑。如果您使用基於金鑰的身份驗證或指定 password 屬性,則可以省略 :password。識別遠端路徑的方式是它是否包含 @ 字元。如果您的 localPath 包含 @ 字元,則此方式將無法使用。
localTodir 這是 todir 屬性的替代方案。但這必須始終指向本機目錄。新增此項目的原因是,當您提供 todir 屬性時,如果它包含 @ 字元,它將被視為遠端。此字元也可能存在於本機路徑中。自 Ant 1.6.2 起 todir 屬性的替代方案
localTofile 在接收檔案時將檔案名稱變更為給定的名稱,僅在接收單一檔案時有用。自 Ant 1.6.2 起 todir 屬性的替代方案
remoteTodir 這是 todir 屬性的替代方案。但這必須始終指向遠端目錄。自 Ant 1.6.2 起 todir 屬性的替代方案
remoteTofile 傳送時將檔案名稱變更為指定的名稱,僅在傳送單一檔案時有用。自 Ant 1.6.2 起 todir 屬性的替代方案
port 連線至遠端主機的埠號。 否;預設為 22
trust 若設定為 yestrue,則信任所有未知主機。
注意:若您將此設定為 false(預設),則您連線的主機必須列在您的 knownhosts 檔案中,這也表示該檔案存在。
否;預設為 no
knownhosts 設定已知主機檔案,用於驗證遠端主機的身分。這必須是 SSH2 格式的檔案。不支援 SSH1 格式。 否;預設為 ${user.home}/.ssh/known_hosts
failonerror 若傳輸失敗,是否停止建置。 否;預設為 true
password 密碼。 是,除非您使用基於金鑰的驗證,或已在檔案或 todir 屬性中提供密碼
keyfile 存放私鑰的檔案位置。 是,如果您使用基於金鑰的驗證
passphrase 私鑰的密語。 否;預設為空字串
sshConfig 存放 OpenSSH 風格組態的檔案位置(例如 ${user.home}/.ssh/config)。使用者名稱和金鑰檔案會從組態檔案中讀取,除非已在任務參數中指定。自 Ant 1.10.8 起
verbose 決定 SCP 是否詳細輸出給使用者。目前這表示輸出點/星號,顯示檔案傳輸的進度。自 Ant 1.6.2 起 否;預設為 false
sftp 決定 SCP 是否使用 sftp 協定。sftp 協定是 SSH2 的檔案傳輸協定。建議您將此設定為 true,如果您要複製到/從不支援 scp1 的伺服器。自 Ant 1.7 起 否;預設為 false
preserveLastModified 決定是否保留已下載檔案的最後修改時間戳記。它僅在從遠端傳輸到本機系統時運作,而且可能無法與不支援 SSH2 的伺服器運作。自 Ant 1.8.0 起 否;預設為 false
filemode 3 位數八進位字串,以標準 Unix 方式指定使用者、群組和其他模式。僅適用於上傳的檔案。請注意,遠端檔案的實際權限將受此設定和遠端伺服器的 UMASK 控制。自 Ant 1.9.5 起 否;預設為 644
dirmode 一個 3 位數的八進位字串,以標準 Unix 方式指定使用者、群組和其他模式。僅適用於上傳的目錄。請注意,遠端目錄的實際權限將受此設定和遠端伺服器上的 UMASK 控制。自 Ant 1.9.5 起 否;預設為 755
serverAliveIntervalSeconds 設定一個逾時區間(單位為秒),在該區間內如果未從伺服器收到任何資料,則此工作會透過加密頻道傳送一則訊息,要求伺服器回應。自 Ant 1.9.7 起 否,預設為 0,表示不會將這些訊息傳送至伺服器
serverAliveCountMax 可以在未收到任何伺服器回應訊息的情況下傳送的伺服器存活訊息數量。僅在 serverAliveIntervalSeconds 不為 0 時使用。自 Ant 1.9.7 起 否;預設為 3
compressed 是否在傳輸期間啟用壓縮。自 Ant 1.9.8 起 否;預設為 false

指定為巢狀元素的參數

資源集合

FileSet 或其他 資源集合 用於選取要複製的檔案群組。若要使用檔案集或資源集合,必須設定 todir 屬性。

在 Ant 1.9.7 之前,僅支援 <fileset> 作為巢狀元素。

additionalConfig

自 Ant 1.10.10 起

新增 JSch 會話建立的組態設定,這些設定不受 Ant 特定屬性直接支援。

屬性 說明 必要
key 組態設定的鍵。
value 組態設定的值。

範例

將單一本機檔案複製到遠端機器

<scp file="myfile.txt" todir="user:password@somehost:/home/chuck"/>

將單一本機檔案複製到遠端機器,並使用個別的 password 屬性

<scp file="myfile.txt" todir="user@somehost:/home/chuck" password="password"/>

使用金鑰基礎驗證將單一本機檔案複製到遠端機器

<scp file="myfile.txt"
     todir="user@somehost:/home/chuck"
     keyfile="${user.home}/.ssh/id_dsa"
     passphrase="my extremely secret passphrase"/>

將單一遠端檔案複製到本機目錄

<scp file="user:password@somehost:/home/chuck/myfile.txt" todir="../some/other/dir"/>

將遠端目錄複製到本機目錄

<scp file="user:password@somehost:/home/chuck/*" todir="/home/sara"/>

將本機目錄複製到遠端目錄

<scp todir="user:password@somehost:/home/chuck/">
  <fileset dir="src_dir"/>
</scp>

將一組檔案複製到目錄

<scp todir="user:password@somehost:/home/chuck">
  <fileset dir="src_dir">
    <include name="**/*.java"/>
  </fileset>
</scp>

將一組檔案複製到遠端目錄,並以最後修改時間倒序排列

<scp todir="user:password@somehost:/home/chuck">
  <sort>
    <reverse>
      <date/>
    </reverse>
    <fileset dir="src_dir">
      <include name="**/*"/>
    </fileset>
  </sort>
</scp>

安全性注意事項:在 scp 工作中硬編碼密碼和/或使用者名稱可能會造成嚴重的安全漏洞。請考慮使用變數替換,並在命令列中包含密碼。例如

<scp todir="${username}:${password}@host:/dir" ...>

使用下列命令列呼叫 Ant

ant -Dusername=me -Dpassword=mypassword target1 target2

稍微好一點,但使用者名稱/密碼會暴露給 Unix 系統上的所有使用者(透過 ps 命令)。最佳方法是使用 <input> 工作和/或從(安全的).properties 檔案中擷取密碼。

Unix 注意:檔案下載時,檔案權限不會保留;它們會變成預設的 UMASK 權限。這是因為在目前的 Java 執行時間中,沒有任何方法可以查詢或設定檔案權限。如果您需要一個保留權限的複製功能,請改用 <exec executable="scp" ... >