【发布时间】:2011-12-14 10:58:30
【问题描述】:
我遇到了sshsession Ant 任务的问题。
我正在编写一个部署脚本,其中 bzip 源,scp 存档到远程服务器,然后在远程服务器上解压缩源并将文件复制到正确的目录树中。
(...)
<bzip2 src="/tmp/${selected.target}.tar" destfile="/tmp/${selected.target}.tar.bz2"/>
<scp file="/tmp/${selected.target}.tar.bz2" todir="user@server:/tmp/" keyfile="${user.home}/.ssh/id_rsa" trust="yes" passphrase="thisisasecret"/>
<sshsession host="server" username="user" keyfile="${user.home}/.ssh/id_rsa" trust="yes">
<sequential>
<untar src="/tmp/${selected.target}.tar.bz2" dest="/tmp/prova_untar" compression="bzip2"/>
(copy files)
</sequential>
</sshsession>
(...)
我的问题是在 sshsession 中指定的任务,因为它们是在本地而不是在远程服务器上执行的。我认为(但显然我错了)在 sshsession 标记中指定的命令将在我刚刚连接到的服务器上执行。我在文档中读到您可以使用 localtunnel 和 remotetunnel 指定隧道,但我不确定我是否正确理解这些隧道的用途。有没有人遇到过同样的问题,或者有解决方案?我正在使用的 Ant 版本是 1.8.2。 谢谢,
阿尔伯托
【问题讨论】:
-
我认为你需要使用sshexec。 sshsession 似乎是用于连接隧道而不是用于远程执行。
-
谢谢oers。我选择 sshsession 是因为我需要执行远程命令列表,而 sshexec 每次都会打开一个新会话..
-
我们也有类似的情况——执行一个远程命令列表,我们要做的就是写一个“remote-build.xml”和其他文件一起复制到远程机器上。当然,我们必须在远程机器上安装 ant,但我认为这样就可以了。
-
Localtunnel 是将本地端口转发到远程端口,这样您就可以在本地应用程序中使用 localhost:localport 连接到 remotehost:remoteport。远程隧道反转。它将您的本地端口转发到远程端口,以便当您希望远程应用程序连接到计算机中的一个端口并且您不想在防火墙中设置异常时,也不要将所需的 ssh 证书放入远程主机。对于ant任务,很多都是用纯java写的(只是扩展了ant的任务类),所以应该不能用sshsession远程运行。
-
谢谢@coolcfan!同时,我通过使用带有简单命令列表(由分号分隔)的 sshexec 解决了我的问题 - 这很尴尬,但它确实有效。你的方法看起来更干净,我试试看。
标签: ant