Maven Wagon SCP无法建立连接
我试图将资源复制到另一个位置。我使用maven wagon-ssh插件来执行此操作。它在当地很好,我在使用Hudson/Jenkins时遇到了问题。Maven Wagon SCP无法建立连接
我settings.xml
文件看起来像这样:
<servers>
<server>
<id>iq</id>
<configuration>
<knownHostsProvider implementation="org.apache.maven.wagon.providers.ssh.knownhost.NullKnownHostProvider">
<hostKeyChecking>no</hostKeyChecking>
</knownHostsProvider>
</configuration>
<username>user</username>
<password>pass</password>
</server>
</servers>
我想this answer to skipping checking因为我得到:
Are you sure you want to continue connecting? (yes/no): The authenticity of host 'address' can't be established.
RSA key fingerprint is 10:.......:bb.
,但现在我得到:
Could not apply configuration for iq to wagon org.apache.maven.wagon.providers.ssh.jsch.ScpWagon:ClassNotFoundException: Class name which was explicitly given in configuration using 'implementation' attribute: 'org.apache.maven.wagon.providers.ssh.knownhost.NullKnownHostProvider' cannot be loaded
org.codehaus.plexus.component.configurator.ComponentConfigurationException: ClassNotFoundException: Class name which was explicitly given in configuration using 'implementation' attribute: 'org.apache.maven.wagon.providers.ssh.knownhost.NullKnownHostProvider' cannot be loaded
at org.codehaus.plexus.component.configurator.converters.AbstractConfigurationConverter.getClassForImplementationHint(AbstractConfigurationConverter.java:70)
at .....
Caused by: java.lang.ClassNotFoundException: org.apache.maven.wagon.providers.ssh.knownhost.NullKnownHostProvider
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
at org.codehaus.plexus.component.configurator.converters.AbstractConfigurationConverter.getClassForImplementationHint(AbstractConfigurationConverter.java:61)
... 37 more
The authenticity of host 'address' can't be established.
RSA key fingerprint is 10:.......:bb.
Are you sure you want to continue connecting? (yes/no): The authenticity of host 'address' can't be established.
您确定要继续连接吗? (是/否):主机'地址'的真实性无法建立。 RSA密钥指纹为10:.......:bb。
是的,这也发生在我们身上。你似乎已经解决了你的问题,但我想我会为后人添加更多细节。
在Jenkins下运行时,没有控制台,因此没有人确认任何新的ssh密钥或maven服务器的密钥更改。为了解决这个问题,我们以jenkins用户的身份登录到我们的jenkins框,并从命令行手动执行工作区目录中的作业。这会将相应的行添加到jenkins用户的ssh配置文件中。
键入“是”一堆时间似乎增加了知名主机文件的关键并解决了问题,虽然您将需要重新启动作业以确保。
此外,我还没有尝试过,但您可以将以下内容添加到~jenkins/.ssh/config
。见:How to Avoid Maven builds stall on ssh host authenticity problem?
StrictHostKeyChecking no
希望这可以帮助别人。
的问题是, RSA密钥未交换。
所以我做的是,我连接命令行的两台服务器。因此RSA密钥被存储并且
Are you sure you want to continue connecting? (yes/no): The authenticity of host 'address' can't be established.
RSA key fingerprint is 10:.......:bb.
此消息停止。它现在完美运行
maven显然需要一个ssh-rsa条目。您可以通过发行获得支持SSH-RSA进入
SSH-键扫描-t RSA YOUR_REMOTE_HOSTNAME >>的〜/ .ssh/known_hosts中
你是我的救星 – TheCodeKiller
这是我们用来填充的known_hosts詹金斯节点上的文件:
<plugin>
<groupId>org.codehaus.groovy.maven</groupId>
<artifactId>gmaven-plugin</artifactId>
<executions>
<execution>
<id>check-known-hosts</id>
<phase>initialize</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
import com.jcraft.jsch.*;
import org.apache.maven.wagon.providers.ssh.knownhost.*;
def keyString = "<REPLACE_WITH_HOST_KEY>" // host key - the line from known_hosts after key type (ssh-rsa)
FileKnownHostsProvider fkhp = new FileKnownHostsProvider();
JSch sch = new JSch();
sch.setKnownHosts(new ByteArrayInputStream(fkhp.getContents().getBytes()));
def host = project.properties.serverAddress // define <serverAddress>someserveraddress.com</serverAddress> in <properties>
if (host != null) {
HostKeyRepository hkr = sch.getHostKeyRepository();
HostKey[] hk = hkr.getHostKey(host , null);
StringWriter stringWriter = new StringWriter();
String knownHost = host + " " + "ssh-rsa" + " " + keyString;
if (hk != null)
{
PrintWriter w = new PrintWriter(stringWriter)
def containsKey = false;
for (HostKey key : hk)
{
def toAdd = key.getHost() + " " + key.getType() + " " + key.getKey();
w.println(toAdd) ;
containsKey = knownHost.equals(toAdd);
}
if (!containsKey) {
println "Adding key for " + host + " to known_hosts"
w.println(knownHost);
fkhp.storeKnownHosts(stringWriter.toString());
} else {
println "Key for " + host + " is already present in known_hosts"
}
}
}
</source>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ssh-common</artifactId>
<version>2.10</version>
</dependency>
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
</dependencies>
</plugin>
似乎工作得很好。
如果它适合你,你可以接受你自己的答案。 – ArtB
谢谢@ArtB。我忘了那个 –
@Gray我正在通过jenkins执行它,所以按下输入不会有帮助:) –