自 Apache Ant 1.6 起
在运行 SSH 守护程序的远程机器上运行命令。
注意:此任务依赖于 Ant 分发版中未包含的外部库。有关更多信息,请参见 库依赖项。此任务已在 JSCh 0.1.29 及更高版本上测试,并且无法与早于 0.1.28 的 JSCh 版本一起使用。
另请参见 scp 任务
| 属性 | 描述 | 必需 |
|---|---|---|
| host | 您要连接到的远程主机的 hostname 或 IP 地址。 | 是 |
| username | 您要连接到的远程主机上的用户名。 | 是 |
| command | 要在远程主机上运行的命令。 | 两者之一 |
| commandResource | 包含要在远程主机上运行的命令的资源(文件)。自 Ant 1.7.1 起 | |
| port | 要连接到的远程主机上的端口。 | 否;默认为 22 |
| 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 起 |
否 |
| suppresssystemout | 是否抑制系统输出。自 Ant 1.9.0 起 | 否;默认为 false |
| suppresssystemerr | 是否抑制 System.err。自 Ant 1.9.4 起 |
否;默认为 false |
| output | 要写入输出的文件的名称。 | 否 |
| errorOutput | 应将命令的标准错误重定向到的文件。自 Ant 1.9.4 起 | 否 |
| append | 是否应追加到 output 文件或覆盖它。 | 否;默认为 false,这意味着覆盖任何现有文件 |
| errAppend | 是否应追加到 errorOutput 文件或覆盖它。自 Ant 1.9.4 起 | 否;默认为 false,这意味着覆盖任何现有文件 |
| outputproperty | 应在其中存储命令输出的属性的名称。如果您使用 commandResource 属性,则每个命令的输出将以命令本身为前缀。 | 否 |
| errorproperty | 应在其中存储命令的标准错误的属性的名称。自 Ant 1.9.4 起 | 否 |
| resultproperty | 应在其中存储命令的返回值的属性的名称。仅当 failonerror=false时才感兴趣。自 Ant 1.9.4 起 |
否 |
| timeout | 如果命令在指定时间内(以毫秒为单位给出,与 telnet 不同,telnet 期望以秒为单位的超时)未完成,则停止该命令。 |
否;默认为 0,这意味着 从不 |
| input | 一个文件,从中获取执行的命令的标准输入。此属性与 inputstring 和 inputproperty 属性互斥。 当通过 commandResource 执行多个命令时,将为每个命令读取输入。自 Ant 1.8.0 起 |
否 |
| verbose | 确定 sshexec 是否详细地输出给用户。与带有 -v 选项的 ssh 命令行工具生成类似的输出。自 Ant 1.8.0 起 |
否;默认为 false |
| inputproperty | 属性名称,其内容用作执行的命令的输入流。此属性与 input 和 inputstring 属性互斥。 当通过 commandResource 执行多个命令时,将为每个命令读取输入。自 Ant 1.8.0 起 |
否 |
| inputstring | 用作执行的命令的输入流的字符串。此属性与 input 和 inputproperty 属性互斥。 当通过 commandResource 执行多个命令时,将为每个命令读取输入。自 Ant 1.8.3 起 |
否 |
| usepty | 是否分配一个伪终端(如 ssh -t)。自 Ant 1.8.3 起 | 否;默认为 false |
| useSystemIn | 是否将当前标准输入传递到远程进程。自 Ant 1.9.4 起 | 否;默认为 false |
| serverAliveIntervalSeconds | 设置一个超时间隔(以秒为单位),如果在此间隔后未从服务器收到任何数据,则任务将通过加密通道发送一条消息以请求服务器的响应。自 Ant 1.9.7 起 | 否,默认值为 0,表示不会将这些消息发送到服务器 |
| serverAliveCountMax | 在未从服务器收到任何消息的情况下,可以发送的服务器存活消息的数量。仅当 serverAliveIntervalSeconds 不为 0时才使用。自 Ant 1.9.7 起 |
否;默认为 3 |
自 Ant 1.10.10 起
为创建的 JSch 会话添加配置设置,这些设置不受特定 Ant 属性的直接支持。
| 属性 | 描述 | 必需 |
|---|---|---|
| key | 配置设置的键。 | 是 |
| value | 配置设置的值。 | 是 |
使用密码身份验证在远程机器上运行命令
<sshexec host="somehost"
username="dude"
password="yo"
command="touch somefile"/>
使用密钥身份验证在远程机器上运行命令
<sshexec host="somehost"
username="dude"
keyfile="${user.home}/.ssh/id_dsa"
passphrase="yo its a secret"
command="touch somefile"/>
使用密钥身份验证(无密码短语)在远程机器上运行命令
<sshexec host="somehost"
username="dude"
keyfile="${user.home}/.ssh/id_dsa"
command="touch somefile"/>
使用密钥身份验证(无密码短语)从远程机器上的命令资源(文件)运行一组命令
<sshexec host="somehost"
username="dude"
keyfile="${user.home}/.ssh/id_dsa"
commandResource="to_run"/>
安全注意事项:在 sshexec 任务中硬编码密码和/或用户名可能是一个严重的安全性漏洞。考虑使用变量替换并在命令行中包含密码。例如
<sshexec host="somehost"
username="${username}"
password="${password}"
command="touch somefile"/>
使用以下命令行调用 Ant
ant -Dusername=me -Dpassword=mypassword target1 target2
稍微好一点,但用户名/密码会暴露给 Unix 系统上的所有用户(通过 ps 命令)。最佳方法是使用 <input> 任务和/或从(安全).properties 文件中检索密码。