SSHSESSION

自 Apache Ant 1.8.0 開始

描述

一個任務,它與運行 SSH daemon 的遠端機器建立 SSH 連接,可選地在該連接上建立任意數量的本地或遠端隧道,然後執行任何嵌套任務,最後關閉連接。

注意:此任務依賴於 Ant 分發版中未包含的外部庫。有關詳細信息,請參閱 庫依賴性。此任務消耗 JSCh 0.1.33 及以上版本進行測試,不適用於早於 0.1.28 版本的 JSCh。

另請參閱 sshexecscp 任務

參數

屬性 描述 必填
主機 您希望連接的遠程主機的主機名稱或 IP 地址。
用戶名 您正在連接的遠程主機上的用戶名。
端口 要連接到遠程主機的端口。 否;默認為 22
localtunnels 一個以逗號分隔的冒號分隔的 lport:rhost:rport 三元組列表,定義本地端口轉發。
如果還提供了嵌套的 localtunnel 元素,則將建立兩組隧道。
remotetunnels 一個以逗號分隔的冒號分隔的 rport:lhost:lport 三元組列表,定義遠端端口轉發。
如果還提供了嵌套的 remotetunnel 元素,則將建立兩組隧道。
trust 如果設置為 yestrue,則信任所有未知主機。
注意:如果將其設置為 false(默認值),則您連接的主機必須在您的 knownhosts 文件中列出,這也意味著該文件存在。
否;默認為 no
knownhosts 這將設置用於驗證遠程主機身份的已知主機文件。這必須是 SSH2 格式文件。不支持 SSH1 格式。 否;默認為 ${user.home}/.ssh/known_hosts
failonerror 如果命令未成功完成,是否停止構建。 否;默認為 true
密碼 密碼。 是,除非您使用基於密鑰的身份驗證或密碼已在文件或 todir 屬性中給出
密鑰檔案 保存私鑰的檔案位置。 是,如果您正在使用基於金鑰的驗證
密碼 您私鑰的密碼。 否;默認為空字符串
sshConfig 保存 OpenSSH 風格配置的檔案位置(例如 ${user.home}/.ssh/config)。除非在任務參數中已經指定了用戶名和金鑰檔案,否則將從配置檔中讀取。 自 Ant 1.10.8 開始
超時 如果在指定的時間內(以毫秒表示)無法建立連接,則放棄。 否;默認為 0,表示 永不

作為巢狀元素指定的參數

localtunnel

可選地,可以使用任意數量的 localtunnel 元素來定義通過 SSH 連接進行本地端口轉發。如果也指定了 localtunnels 參數,則將建立兩組隧道。

屬性 描述 必填
本地端口 要轉發的本地端口號。
遠程主機 要將本地端口轉發到的遠程主機的主機名或 IP 地址。
遠程端口 要將本地端口轉發到的遠程主機上的端口號。

remotetunnel

可選地,可以使用任意數量的 remotetunnel 元素來定義通過 SSH 連接進行遠程端口轉發。如果也指定了 remotetunnels 參數,則將建立兩組隧道。

屬性 描述 必填
遠程端口 遠程端口號
本地主機 要將遠程端口轉發到的本地主機的主機名或 IP 地址。
本地端口 要將遠程端口轉發到的本地主機上的端口號。

additionalConfig

自 Ant 1.10.10 開始

添加用於 JSch 會話的配置設置,這些設置並不直接受特定 Ant 屬性支持。

屬性 描述 必填
金鑰 配置設置的鍵。
配置設置的值。

sequential

sequential 元素是一個必需的參數。它是一個容器,用於在建立 SSH 連接並建立所有本地和/或遠程隧道後執行巢狀任務。

示例

使用密碼驗證連接到遠程機器,將本地 CVS 端口轉發到遠程主機,並在本地執行 CVS 命令,該命令可以使用該隧道。

<sshsession host="somehost"
            username="dude"
            password="yo"
            localtunnels="2401:localhost:2401">
  <sequential>
    <cvs command="update ${cvs.parms} ${module}"
         cvsRoot="${cvs.root}"
         dest="${local.root}"
         failonerror="true"/>
  </sequential>
</sshsession>

使用巢狀的 localtunnel 元素執行相同的操作。

<sshsession host="somehost"
            username="dude"
            password="yo">
  <localtunnel lport="2401" rhost="localhost" rport="2401"/>
  <sequential>
    <cvs command="update ${cvs.parms} ${module}"
         cvsRoot="${cvs.root}"
         dest="${local.root}"
         failonerror="true"/>
  </sequential>
</sshsession>

使用金鑰驗證連接到遠程機器,將端口 1080 轉發到不直接可訪問的內部網絡服務器的端口 80,然後使用該隧道運行 get 任務。

<sshsession host="somehost"
            username="dude"
            keyfile="${user.home}/.ssh/id_dsa"
            passphrase="yo its a secret"/>
  <LocalTunnel lport="1080" rhost="intranet.mycomp.com" rport="80"/>
  <sequential>
    <get src="https://127.0.0.1:1080/somefile" dest="temp/somefile"/>
  </sequential>
</sshsession>

安全注意:在 sshsession 任務中硬編碼密碼或密碼和/或用戶名可能會造成嚴重的安全漏洞。請考慮使用變量替換,並在命令行中包含密碼。例如

<sshsession host="somehost"
            username="${username}"
            password="${password}"
            localtunnels="2401:localhost:2401">
  <sequential>
    <sometask/>
  </sequential>
</sshsession>

使用以下命令行調用 Ant

ant -Dusername=me -Dpassword=mypassword target1 target2

稍微好一點,但是用戶名/密碼對所有 Unix 系統用戶(通過 ps 命令)都是可見的。最好的方法是使用 <input> 任務和/或從(安全的).properties 檔檔中檢索密碼。