Jenkins主从:密钥交换未完成,连接已关闭

vatpfxk5  于 2023-10-17  发布在  Jenkins
关注(0)|答案(5)|浏览(158)

我想连接一个从站到Master-Jenkins,但当尝试连接时,我得到以下错误:

[05/02/18 15:26:59] [SSH] Opening SSH connection to <IP>
Key exchange was not finished, connection is closed.
java.io.IOException: There was a problem while connecting to <IP>:22
    at com.trilead.ssh2.Connection.connect(Connection.java:818)
    at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:1324)
    at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:831)
    at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:820)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: Key exchange was not finished, connection is closed.
    at com.trilead.ssh2.transport.KexManager.getOrWaitForConnectionInfo(KexManager.java:93)
    at com.trilead.ssh2.transport.TransportManager.getConnectionInfo(TransportManager.java:230)
    at com.trilead.ssh2.Connection.connect(Connection.java:770)
    ... 7 more
Caused by: java.io.IOException: Cannot negotiate, proposals do not match.
    at com.trilead.ssh2.transport.KexManager.handleMessage(KexManager.java:405)
    at com.trilead.ssh2.transport.TransportManager.receiveLoop(TransportManager.java:777)
    at com.trilead.ssh2.transport.TransportManager$1.run(TransportManager.java:489)
    ... 1 more
[05/02/18 15:26:59] Launch failed - cleaning up connection
[05/02/18 15:26:59] [SSH] Connection closed.

节点配置:-启动方式:通过SSH启动从机-主机名:IP -访问数据:为SSH访问创建的用户i- >公共密钥在从属节点上的授权密钥中

如果我在我的主人作为用户“Jenkins”,并做一个ssh jenkins@<IP>,我可以登录没有问题(公钥是从)。
为什么它不适用于“UI-Jenkins”。
Jenkins版本:1.658
操作系统:Ubuntu 14.04
SSH-Slave插件:1.26

kgqe7b3p

kgqe7b3p1#

这就“解决”了问题:
“解决方法是在Jenkins Slave的/etc/ssh/sshd_config中注解掉MAC和KexAlgorithm行,并重新启动sshd(Ubuntu上的服务ssh重新启动)
更新:截至2017年4月29日,问题已得到解决“
Jenkins master fails to connect to the slave over SSH

pieyvz9o

pieyvz9o2#

我想把我的经历写在这篇文章里:我的环境有一个Windows主代理,以及混合的Windows和Linux代理。一个Windows代理拒绝连接到主服务器,即使在主服务器将“jenkins-agent”和其他支持文件推送到代理之后。
此代理安装了6个不同版本的JDK和JRE。我重新安装了所有这些,只重新安装了我们需要的最新JDK,并设置了JAVA_HOME。这解决了连接问题。

hof1towb

hof1towb3#

在目标节点上执行此命令。
sudo -i su -c 'sed -i -e“s/MAC/MAC hmac-sha1,/g”/etc/ssh/sshd_config;服务sshd重新启动'

fcwjkofz

fcwjkofz4#

最近在使用Docker时遇到了这个问题
找到Java路径

/home/jenkins # which java
/opt/java/openjdk/bin/java

导出Java路径。在本例中,我使用docker-compose

...
  exp_agent:
    image: jenkins/ssh-agent:alpine
    restart: always
    environment:
      JENKINS_AGENT_SSH_PUBKEY: $ENV_JENKINS_AGENT_SSH_PUBKEY
      JAVA_HOME: $ENV_JAVA_HOME
    container_name: jenkins-ssh-agent
    ports:
      - 22:22
    networks:
      - jenkins
...

主机仍然抱怨Java的路径,因为/opt/java/openjdk/bin/java不在预期的路径中

...
[12/04/21 11:44:07] [SSH] Checking java version of /usr/bin/java
...

在java路径和docker容器中的一个预期路径之间创建一个符号链接(这可以在Dockerfile中自动完成)

ln -s /opt/java/openjdk/bin/java /usr/bin/java
vxbzzdmp

vxbzzdmp5#

也有同样的问题,通过将从服务器的SSH指纹添加到主服务器来解决。
从master运行此命令:

ssh-keyscan -H <SLAVE_IP/SLAVE_HOSTNAME> >> /var/lib/jenkins/.ssh/known_hosts

或日志输出中显示的任何known_hosts文件路径

相关问题