自 Apache Ant 1.8.0 起
一个任务,它与运行 SSH 守护进程的远程机器建立 SSH 连接,可以选择在该连接上建立任意数量的本地或远程隧道,然后在拆除连接之前执行任何嵌套任务。
注意:此任务依赖于 Ant 分发版中未包含的外部库。有关更多信息,请参见 库依赖项。此任务已在 JSCh 0.1.33 及更高版本上测试,并且无法与早于 0.1.28 的 JSCh 版本一起使用。
| 属性 | 描述 | 必需 |
|---|---|---|
| host | 您要连接到的远程主机的 hostname 或 IP 地址。 | 是 |
| username | 您要连接到的远程主机上的用户名。 | 是 |
| port | 要连接到的远程主机上的端口。 | 否;默认为 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 |
| password | 密码。 | 是,除非您使用基于密钥的身份验证或密码已在文件或 todir 属性中给出 |
| keyfile | 保存私钥的文件的位置。 | 是,如果您使用基于密钥的身份验证 |
| passphrase | 私钥的密码短语。 | 否;默认为空字符串 |
| sshConfig | 保存 OpenSSH 样式配置的文件的位置(例如 ${user.home}/.ssh/config)。用户名和密钥文件从配置文件中读取,除非它们已在任务参数中指定。自 Ant 1.10.8 起 |
否 |
| timeout | 如果在指定时间内(以毫秒为单位)无法建立连接,则放弃。 | 否;默认为 0,这意味着 永不 |
可以选择使用任意数量的 localtunnel 元素来定义通过 SSH 连接的本地端口转发。如果还指定了 localtunnels 参数,则将建立两组隧道。
| 属性 | 描述 | 必需 |
|---|---|---|
| lport | 要转发的本地端口号。 | 是 |
| rhost | 应将本地端口转发到的远程主机的 hostname 或 IP 地址。 | 是 |
| rport | 应将本地端口转发到的远程主机上的端口号。 | 是 |
可以选择使用任意数量的 remotetunnel 元素来定义通过 SSH 连接的远程端口转发。如果还指定了 remotetunnels 参数,则将建立两组隧道。
| 属性 | 描述 | 必需 |
|---|---|---|
| rport | 要转发的远程端口号。 | 是 |
| lhost | 应将远程端口转发到的本地主机的 hostname 或 IP 地址。 | 是 |
| lport | 应将远程端口转发到的本地主机上的端口号。 | 是 |
自 Ant 1.10.10 起
为创建的 JSch 会话添加配置设置,这些设置不受特定 Ant 属性的直接支持。
| 属性 | 描述 | 必需 |
|---|---|---|
| key | 配置设置的键。 | 是 |
| value | 配置设置的值。 | 是 |
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://: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 文件中检索密码。