自 Apache Ant 1.6 起
在運行 SSH daemon 的遠端機器上執行命令。
注意:此任務依賴於未包含在 Ant 發行版中的外部庫。有關更多信息,請參閱庫依賴。此任務已經過 JSCh 0.1.29 及以上版本的測試,不適用於早於 0.1.28 版本的 JSCh。
另請參閱scp 任務
屬性 | 描述 | 必填 |
---|---|---|
主機 | 您希望連接的遠端主機的主機名或 IP 地址。 | 是 |
用戶名 | 您正在連接的遠端主機上的用戶名。 | 是 |
命令 | 在遠端主機上運行的命令。 | 兩者中確切地一個 |
commandResource | 包含要在遠端主機上運行的命令的資源(檔案)。自 Ant 1.7.1 起 | |
端口 | 要連接到的遠端主機上的端口。 | 否;默認為 22 |
信任 | 如果設置為 yes或 true,則信任所有未知主機。 注意:如果將其設置為 false(默認值),則您連接的主機必須在您的 knownhosts 檔案中列出,這也意味著檔案存在。 |
否;默認為 no |
knownhosts | 這將設置要用於驗證遠端主機身份的已知主機檔案。此必須是 SSH2 格式檔案。不支援 SSH1 格式。 | 否;默認為 ${user.home}/.ssh/known_hosts |
failonerror | 如果命令未成功完成,是否停止構建。 | 否;默認為 true |
密碼 | 密碼。 | 是,除非您正在使用基於密鑰的身份驗證或密碼已在檔案或 todir 屬性中給出。 |
keyfile | 保存私鑰的檔案位置。 | 如果您正在使用基於密鑰的身份驗證,則是 |
密鑰密碼 | 您的私鑰的密鑰密碼。 | 否;默認為空字符串 |
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 不同,后者期望以秒为单位的超时时间),则停止命令。 |
否;默认为 0,表示 永不 |
input | 执行的命令的标准输入取自的文件。该属性与 inputstring 和 inputproperty 属性互斥。 当通过 commandResource 执行多个命令时,将为每个命令读取输入。自 Ant 1.8.0 起 |
否 |
verbose | 确定是否向用户输出详细信息。 生成的输出类似于带有 -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 Session 的配置設置,這些設置不直接由特定的 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 文件中檢索密碼。