自 Apache Ant 1.8.0 開始
一個任務,它與運行 SSH daemon 的遠端機器建立 SSH 連接,可選地在該連接上建立任意數量的本地或遠端隧道,然後執行任何嵌套任務,最後關閉連接。
注意:此任務依賴於 Ant 分發版中未包含的外部庫。有關詳細信息,請參閱 庫依賴性。此任務消耗 JSCh 0.1.33 及以上版本進行測試,不適用於早於 0.1.28 版本的 JSCh。
屬性 | 描述 | 必填 |
---|---|---|
主機 | 您希望連接的遠程主機的主機名稱或 IP 地址。 | 是 |
用戶名 | 您正在連接的遠程主機上的用戶名。 | 是 |
端口 | 要連接到遠程主機的端口。 | 否;默認為 22 |
localtunnels | 一個以逗號分隔的冒號分隔的 lport:rhost:rport 三元組列表,定義本地端口轉發。 如果還提供了嵌套的 localtunnel 元素,則將建立兩組隧道。 |
否 |
remotetunnels | 一個以逗號分隔的冒號分隔的 rport:lhost:lport 三元組列表,定義遠端端口轉發。 如果還提供了嵌套的 remotetunnel 元素,則將建立兩組隧道。 |
否 |
trust | 如果設置為 yes或 true,則信任所有未知主機。 注意:如果將其設置為 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
元素來定義通過 SSH 連接進行本地端口轉發。如果也指定了 localtunnels 參數,則將建立兩組隧道。
屬性 | 描述 | 必填 |
---|---|---|
本地端口 | 要轉發的本地端口號。 | 是 |
遠程主機 | 要將本地端口轉發到的遠程主機的主機名或 IP 地址。 | 是 |
遠程端口 | 要將本地端口轉發到的遠程主機上的端口號。 | 是 |
可選地,可以使用任意數量的 remotetunnel
元素來定義通過 SSH 連接進行遠程端口轉發。如果也指定了 remotetunnels 參數,則將建立兩組隧道。
屬性 | 描述 | 必填 |
---|---|---|
遠程端口 | 遠程端口號 | 是 |
本地主機 | 要將遠程端口轉發到的本地主機的主機名或 IP 地址。 | 是 |
本地端口 | 要將遠程端口轉發到的本地主機上的端口號。 | 是 |
自 Ant 1.10.10 開始
添加用於 JSch 會話的配置設置,這些設置並不直接受特定 Ant 屬性支持。
屬性 | 描述 | 必填 |
---|---|---|
金鑰 | 配置設置的鍵。 | 是 |
值 | 配置設置的值。 | 是 |
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 檔檔中檢索密碼。