37779
maven でもって、サーバーに対して ssh 実行を行おうと考えました。少し調べたところ、

  1. maven-exec-plugin でもって ssh するスクリプトを実行する
  2. maven-antrun-plugin でもって、 ant で記述する
  3. wagon-maven-plugin:sshexec でもって実行する

がある様子です。 Windows でも Ubuntu でも実行できたらうれしいので、 3 の sshexec プラグインを試してみようと考えました。

<http://www.mojohaus.org/wagon-maven-plugin/usage.html>
に、最小限の利用方法のようなものは書いてありますが、 Windows でも Ubuntu でも、これを今現在動かせていません。

## 前提条件

  * ssh -i PRIVATEKEY USER@HOST で、疎通はできる。 (Ubuntu で確認)

## 質問

上記の通り、 ssh 可能なサーバーがあったときに、ここに対して sshexec で helloworld
をひとまず行いたいと考えているのですが、これを実現する最小限の、動作する pom.xml
ないし設定はどうなりますでしょうか。ネットで検索しても、動作する設定例が発見できなかったので、質問しています。
CC BY-SA 3.0
2017-09-07T07:01:26.657
37775
2017-09-07T08:34:27.797
754
question
ssh maven
maven の wagon:sshexec で、動作する最低限のサンプルはありますか
結局、 maven-antrun-plugin を使った方がずっと楽だったので、こちらを利用することにしました。

```

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>my.test</groupId>
      <artifactId>test</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>test</name>
    
      <properties>
        <my.ssh.key>/path/to/ssh/key</my.ssh.key>
        <my.target.host>host-name</my.target.host>
        <my.target.user>ssh-user-name</my.target.user>
      </properties>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <version>1.8</version>
            <dependencies>
              <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant-jsch</artifactId>
                <version>1.9.2</version>
              </dependency>
            </dependencies>
            <executions>
              <execution>
                <id>hello-world</id>
                <configuration>
                  <target>
                    <taskdef name="sshexec"
                             classname="org.apache.tools.ant.taskdefs.optional.ssh.SSHExec"
                             classpathref="maven.plugin.classpath"
                    />
                    <sshexec host="${my.target.host}"
                             username="${my.target.user}"
                             keyfile="${my.ssh.key}"
                             command="echo hello"
                             trust="true"
                             />
                    <!-- trust がないと、 known host 以外はエラーになる -->
                  </target>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </project>
    
```

上記 pom を配置したフォルダで、 `mvn antrun:run@hello-world` を実行することで、 ssh
実行ができていることを確認できます。
CC BY-SA 3.0
2017-09-07T08:20:51.567
37779
2017-09-07T08:34:27.797
2017-09-07T08:34:27.797
754
754
37775
answer