Child pages
  • SSH Slaves plugin
Skip to end of metadata
Go to start of metadata

Plugin Information

View SSH Slaves on the plugin site for more information.

Older versions of this plugin may not be safe to use. Please review the following warnings before using an older version:

SSH Slaves plugin

This plugin allows you to manage slaves running on *nix machines over SSH.It adds a new type of slave launch method. This launch method will

  • Open a SSH connection to the specified host as the specified username.
  • Checks the default version of java for that user.
  • [not implemented yet] If the default version is not compatible with Jenkins's slave.jar, tries to find a version of java that is.
  • Once it has a suitable version of java, copies the latest slave.jar via SFTP (falling back to scp if SFTP is not available)
  • Starts the slave process.

Integration with SSH Credentials Plugin

As of version 0.23 this plugin is now integrated with the SSH Credentials Plugin. This changes how slaves are configured. The Node configuration is simplified, e.g. you now just have a Credentials drop down listing all the "Global" and "System" scoped credentials.

If you are upgrading from a previous version, the plugin should try to inject any required SSH credentials in the Credentials Plugin using the credentials that were previously stored in each node's definition.


To define credentials to use when connecting slaves you need to go to the Jenkins » Manage Jenkins » Manage Credentials screen
Once on this screen you can add SSH credentials, either using a Username & Password or using a Username & Private Key
Credential scope controls where the credentials can be used:

  • System scope is only available for the root Jenkins instance (in other words Jenkins can use it to connect build nodes, but the credentials are not available to build jobs)
  • Global scope is available for the root Jenkins instance and any child items (in other words Jenkins can use it to connect build nodes, build jobs can use it for other SSH Credentials enabled plugins) 

When you have a lot of different credentials it can be useful to put those credentials into credential domains, e.g.

The drop-down for selecting credentials will construct a specification that includes the URI Scheme of ssh and the specified hostname and port, so where you have created the appropriate credential domains the choice of credentials will be restricted to those outside of any credential domain and those from matching credential domains. This can help differentiate between multiple keys/password associated with the same username.

Common Pitfalls

Login profile files

When the SSH slaves plugin connects to a slave, it does not run an interactive shell. Instead it does the equivalent of your running "ssh slavehost command..." a few times, eventually to run "ssh slavehost java -jar ...". Exactly what happens on the slave as a result of this depends on the SSHD implementation, but OpenSSH runs this with "bash -c command ..." (or whatever your login shell is.)

This means some of your login profiles that set up your environment is not read by your shell. See this post for more details.

If you need to set additional environment variables for slave, consider using EnvInject Plugin or write a wrapper script around java and specify that in the JavaPath field.

If your login shell does not understand the command syntax used (e.g. the fish shell), use the advanced options Prefix Start Slave Command and Suffix Start Slave Command to wrap the slave command in e.g. sh -c " and ".

Example: For loading ~/.bash_profile on macOS Slaves set Prefix Start Slave Command to "source ~/.bash_profile && " (intended whitespace at the end).
Make sure to reconnect the slave after changing the slaves commands.

Overall recommendations:

Cygwin

See SSH slaves and Cygwin for the discussion of how to use this plugin to talk to Cygwin SSHD server.

Version History

Version 1.26 (Feb 26, 2018)

  • (info) JENKINS-49607 - Report the required Java version when the plugin cannot find Java on the agent
  • (info) JENKINS-43786 - Adapt the adminisitrative monitor to new design in Jenkins 2.103+
  • (info) PR #82 - Do not lookup for credentials in SSHLauncher constructor so that the launcher can be initialized before the Credentials store is fully loaded (for Configuration-as-Code plugin)

Version 1.25.1 (Jan 26, 2018)

  • (error) JENKINS-49032 - Revert usage of "exec" command so that SSH Slaves can connect to Windows agents (regression in 1.25)

Version 1.25 (Jan 05, 2018)

  • (info) JENKINS-48616 - Pass connection timeouts to socket connection logic if launch timeout is defined in agent settings
  • (info) Replace sh with java rather than launching a new process (reverted in 1.25.1)

Version 1.24 (Dec 18, 2017)

  • (error) JENKINS-48613 - Extend the original fix of JENKINS-19465 to prevent the afterDisconnect() handler thread explosion when the SSH connection is locked by the read operation
  • (error) JENKINS-48538 - Prevent NPE in SSHLauncher#isRecoverable() when the exception has empty message
  • (info) JENKINS-48260 - Upgrade the Parent POM to 3.0 and fix Java compatibility tests

Version 1.23 (Dec 12, 2017)

  • (error) JENKINS-44893 - Prevent the "java.lang.ClassNotFoundException: hudson.plugins.sshslaves.verifiers.JenkinsTrilead9VersionSupport" error in logs
  • (error) JENKINS-19465 - Prevent agent hanging and piling up of afterDisconnect() handler threads when the agent gets disconnected before the launch completion
  • (info) PR #73 - Add explicit MIT license definition to the pom.xml file

Version 1.22 (Oct 16, 2017)

  • (error) JENKINS-47448 - Workaround the issue with default JDKInstaller in the plugin by installing Java jdk-8u144
  • (plus) PR #71 - Add Chinese translation

Version 1.21 (Aug 18, 2017)

  • JENKINS-29412 - Minimal required Java Level is determined dynamically. Java 8 is required on agents when Jenkins version is 2.54+
  • JENKINS-38832 - Add support for credential usage tracking
  • PR #58 - Remove obsolete reflection code in SSHLauncher
  • PR #53PR #56, PR #57 - Cleanup typos in the documentation and logs
  • PR #64 - The plugin codebase is now explicitly licensed with MIT License 

Version 1.20 (Jun 13, 2017)

  • JENKINS-44832 IllegalArgumentException under some conditions after update to 1.18 (or 1.19).

Version 1.19 (Jun 12, 2017)

  • JENKINS-44830 NullPointerException after upgrading to 1.18 with slaves configured in 1.14- without a host key verification strategy set since then.

Version 1.18 (Jun 12, 2017)

Version 1.17 (Apr 12, 2017)

  • issue@43481 Updated JRE version which gets automatically installed to 8u121, allowing this mode to work with Jenkins 2.54+ which no longer runs on Java 7.

Version 1.16 (Mar 23, 2017)

  • JENKINS-42969 New Manually trusted key Verification Strategy option introduced in 1.15 did not work in Jenkins 2.30+.

Version 1.15 (Mar 20, 2017)

  • SECURITY-161 (advisory) Host key verification was not performed.
  • JENKINS-42022 Remove 'unix machines' from description.

Version 1.14 (Mar 16, 2017)

Version 1.13 (Jan 28, 2017)

  • PR #41 Do not swallow IOException in case it is not recoverable.
  • JENKINS-40001 Added plugin's description.

Version 1.12 (Dec 01, 2016)

  • JENKINS-40092 slave.jar copy via SCP (fallback when SFTP is unavailable or broken) failed starting with Jenkins 2.33.
  • JENKINS-35522 Improved credentials selection.

Version 1.11 (Apr 27, 2016)

  • Upgrade to new parent pom
  • Improve logging
  • Use JenkinsRule instead of HudsonTestCase for tests.

Version 1.10 (Aug 06, 2015)

  • Update JDK version for auto installer
  • Timeout the afterDisconnect cleanup thread to prevent deadlock JENKINS-23560

Version 1.9 (Nov 04, 2014)

  • Diagnosability improvements in case of a connection loss. See Remoting issue.

Version 1.8 (Oct 07, 2014)

  • SECURITY-158 fix.
  • German localization updated.

Version 1.7.1 (Sep 29, 2014)

  • Fix NPE when trying to launch non-reconfigured slaves after upgrade to 1.7 version of plugin.

Version 1.7 (Sep 26, 2014)

  • Protect against some cases where there is no private key resulting in an NPE (possible fix for JENKINS-20332)
  • Updated help text
  • Localization cleanup
  • Improved error diagnostics
  • Allow connection retries (Pull Request #19)
  • Enforce timeout for connection cleanup (possible fix for JENKINS-14332)

Version 1.6 (Feb 5, 2014)

  • Add initial connection timeout to prevent stalled connections from preventing slave connection.
  • Update credentials plugin to 1.9.4 and ssh-credentials to 1.6.1 to ensure the in-place addition of credentials is available.
  • Change the hard-coded JDK from 1.6.0_16 to 1.6.0_45

Version 1.5 (Oct 16, 2013)

  • Fix to how credentials are sourced for the drop-down list
  • Use credentials plugin's <c:select/> so that when credentials plugin adds the ability for in-place credential addition this can be picked up without modifying ssh-slaves

Version 1.4 (Oct 8, 2013)

Version 1.3 (Oct 4, 2013)

  • Reworked the upgrading of credentials logic. Should be much improved and result in a true minimal initial set

Version 1.2 (Aug 8, 2013)

  • Fixed binary compatibility for plugins depending on this one.

Version 1.1 (Aug 7, 2013)

  • Forced upgrade of dependency SSH Credentials.

Version 1.0 (Aug 7, 2013)

  • Upgrade dependencies to SSH Credentials Plugin 1.0 and Credentials Plugin 1.6 and migrated code from legacy data type to the new StandardCredential based types.
  • NOTE: It will not be possible to downgrade to previous releases without risking the loss of some configuration data.

Version 0.27 (Jun 21, 2013)

  • Reduce the # of threads spawned. Even more so with Jenkins 1.521 and onward.

Version 0.25 (Apr 17, 2013)

  • When upgrading credentials from pre 0.23 format, ensure that the credentials are persisted with the correct security context for persisting system/global credentials (issue #17648)

Version 0.24 (Apr 16, 2013)

  • Removed some unnecessary debug code that remained as a fragment during development of the bulk data transfer improvements in 0.23
  • Added some Japanese localizations
  • Prevented persistence of duplicate credentials under some code paths
  • Restored support for empty username as indicator of the user that Jenkins is running as.
  • Upgrade to latest version of te ssh-credentials plugin. 

Version 0.23 (Mar 21, 2013)

  • Rely on SSH Credentials Plugin for unified credential handling across different places that use SSH
  • Performance improvement on bulk data transfer when used in a large latency/high bandwidth network (JENKINS-7813)

Version 0.22 (Dec 07, 2012)

  • Find slave.jar even when running from hudson-dev:run.
  • Allow environment variables to be declared in the java path, that are then expanded according to environment variables declared on the node or globally.

Version 0.21 (Oct 26, 2011)

  • Slave is slow copying maven artifacts to master (JENKINS-3922).

Version 0.20 (Sep 28, 2011)

  • JDK installation on SSH slaves with newer Jenkins was broken (JENKINS-10641)

Version 0.19 (Aug 25, 2011)

  • Fixed possible NPE during error recovery
  • Improved the error message when the server doesn't support the configured authentication mode (JENKINS-6714)

Version 0.18 (Jul 06, 2011)

  • Ability to programmatically control the JDK to be installed

Version 0.17 (Jun 13, 2011)

  • Fixed an API incompatibility regression introduced in 0.15.

Version 0.16 (Apr 28, 2011)

  • Improved error diagnostics for unreadable SSH private key file.

Version 0.15 (Mar 26, 2011)

  • New field to be able to configure the java command to use to start the slave

Version 0.14 (Nov 2, 2010)

Version 0.13 (Aug 13, 2010)

  • Added Japanese localization.
  • Fixed deprecated api.

Version 0.12 (June 1, 2010)

  • Avoid "password argument is null" error (JENKINS-6620)
  • Version check of JDKs was broken in locales that don't use '.' as the floating point separator (JENKINS-6441)
  • If SFTP is not available on the slave, use SCP (JENKINS-6239)
  • Hudson fails to detect JVM versions when loading older data (JENKINS-4856)

Version 0.10 (May 2, 2010)

  • Launcher was storing password in plaintext (JENKINS-5363)
  • Check node properties for JAVA_HOME and JDK tool path when locating java (JENKINS-5412)
  • Support for openjdk 7 (JENKINS-6005)

Version 0.9 (December 9, 2009)

  • JDK auto installation works on Windows+MKS environment (report)

Version 0.8 (October 23, 2009)

  • Allow OpenJDK in Java discovery (report)
  • Added a fool-proof check to detect a garbage in SSH exec session to avoid SFTP packet length problem (report)

Version 0.7 (July 27, 2009)

  • Supports private keys in the PuTTY format.
  • Fixed possible NPE (report)

Version 0.6 (July 20, 2009)

  • Improved the error reporting if the plugin fails to find usable Java implementation (report)
  • User name can be now omitted, which defaults to the user that's running the Hudson master.

Version 0.5 (April 28, 2009)

  • Added support for specifying the Slave JVM options

Version 0.4 (February 2, 2009)

  • Unknown

Version 0.3 (January 30, 2009)

  • Unknown

Version 0.2 (June 14, 2008)

  • Tidy-ups and i18n enabling the plugin

Version 0.1 (June 9, 2008)

  • Initial release

Save

26 Comments

  1. Unknown User (brucepainter64@gmail.com)

    Anyway to get this page updated with the changes between versions?

  2. Unknown User (michal huniewicz)

    I seem to be unable to upgrade to the latest (0.5.1) version.

    I have version 0.4 now and whenever I ask Hudson to update it and restart, it still says I have 0.4 and that I should update.

    Does anyone have a similiar issue?

  3. Unknown User (brucepainter64@gmail.com)

    This appears to be a known issue:

    http://www.nabble.com/-Issue-3662--New---pom.xml-keeps-0.4-as-version-td23479562.html

    You can manually get the updated plugin by going to:

    https://hudson.dev.java.net/servlets/ProjectDocumentList?folderID=9380

    Then install it through the Plugin Manager -> Advanced Tab

    1. Unknown User (krystian)

  4. Where can you post support questions for this plugin?

  5. Unknown User (gary.mann@baml.com)

    Hi everyone,

    I'm using the SSH slaves plugin (0.13) on a Windows master (Windows Server 2003, Apache Tomcat), and I'm trying to connect to a new RHEL5.0 Linux slave. I have other Linux slaves (RHEL4u5), and these all work fine with user/password authentication. However, I can't get this new slave to connect, and I simply get this error message:

    [10/14/10 18:23:55] [SSH] Opening SSH connection to hostname:22.
    [10/14/10 18:23:56] [SSH] Authenticating as username/******.
    java.io.IOException: Password authentication failed.
        at com.trilead.ssh2.auth.AuthenticationManager.authenticatePassword(AuthenticationManager.java:319)
        at com.trilead.ssh2.Connection.authenticateWithPassword(Connection.java:314)
        at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:560)
        at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.java:174)
        at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:184)
        at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
        at java.util.concurrent.FutureTask.run(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: Authentication method password not supported by the server at this stage.
        at com.trilead.ssh2.auth.AuthenticationManager.authenticatePassword(AuthenticationManager.java:289)
        ... 9 more
    [10/14/10 18:23:56] [SSH] Connection closed.

    At this point I'm completely stuck, and not sure where to go next. Google reveals many people with similar issues, but no solutions.

    A few things spring to mind. Firstly, my RHEL5 slave has a 2048 bit SSH key, whereas the RHEL4 slaves have 1024 bit keys.Could there be an issue with the embedded SSH client?

    Secondly, I'm not sure how to set up SSH properly as I'm unsure as to where the RSA keys used by the Hudson SSH client are kept (assuming they're completely unrelated to Cygwin/Putty).

    Has anyone else out there with the same issue managed to find a solution?

    Thanks in advance,

    Gary

    1. Unknown User (gary.mann@baml.com)

      Hello everyone again,

      I've just found the solution to this issue - essentially it's to do with the way that sshd is configured. I'm not sure if this is a default in RHEL5, or whether this is my company's site configuration, but it all hinges on the following line in /etc/sshd_config (or /etc/ssh/sshd_config):

      # To disable tunneled clear text passwords, change to no here!
      PasswordAuthentication no

      If set to no, Hudson's SSH client won't be able to connect using password authentication. If you comment this line out (which I believe is the OpenSSH default), or set it to yes, then Hudson can connect just fine.

      Hope this helps anyone else with the same issue,

      Gary

      1. It absolutely helped me. Thanks!

  6. Is there a way to have this plugin use the socket of the ssh-agent? I have set the SSH_AUTH_SOCK environment variable and ForwardAgent option, but it seems useless.

    I'm going to have many slaves, and I don't want to copy Jenkins' private key on them, just to enable git access through ssh.

    1. Command execution solved the problem.

  7. Is it possible to configure the port from which the Master will connect to the slave? By default the port is random.

    Thanks

  8. 01/10/12 09:58:30] [SSH] Opening SSH connection to <server name>:22.
    hudson.AbortException: The server doesn't support the password authentication
    at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:699)
    at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.java:283)
    at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:200)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
    [01/10/12 09:58:30] [SSH] Connection closed.

    Hi,After a recent unix server upgrade to our slaves, Hudson now fails to connect over SSH to them with the above message. I believe the issue to be that given the new servers now only support keyboard-interactive authentication, not password anymore, the connection fails. Can we add support to the plugin to either choose an authentication type or failover to keyboard-interactive if password fails? Internally, for other apps, using the same ganymed*. ssh library we've added the same fallback and its a very easy code change .Something like:

     if(connection.isAuthMethodAvailable(usr, "password")){
                            connection.authenticateWithPassword(usr, pwd);
                         } else if(connection.isAuthMethodAvailable(usr, "keyboard-interactive")){
                               connection.authenticateWithKeyboardInteractive(usr, new InteractiveCallback(){
    
  9. Is this not supported on the latest version of Jenkins? It isn't showing up in my "available plugins" list.

  10. I am trying (for the first time) to get a Windows Master to use a Linux slave.

    "Start by SSH" doesn't appear in the new node pull down, so I went looking for the SSH plugin . . . found it, it was disabled so I enabled it.

    On Jenkins restart it disabled itself again.  Upgraded to latest (.22) . . . but same result.

    Is there something I need to install on Windows?

    Frank

  11. After upgrading our ssh slaves & ssh credentials plugin to latest, *all* slaves are unavailable. Did someone meet such behavior?

    1. Well I have the same problem here. No credentials are available anymore. The dropdown box is empty. Although multiple non-domain credentials are defined.

      1. It looks like as if the SSH plugin only finds SSH Key based credentials. Username/password are ignored. But when I specify a key credentials it fails with a different exception:26:30 SSH Opening SSH connection to xxx.intra:22.
        ERROR: Unexpected error in launching a slave. This is probably a bug in Jenkins.
        java.lang.NoSuchMethodError: com.cloudbees.jenkins.plugins.sshcredentials.SSHAuthenticator.newInstance(Ljava/lang/Object;Lcom/cloudbees/jenkins/plugins/sshcredentials/SSHUser;)Lcom/cloudbees/jenkins/plugins/sshcredentials/SSHAuthenticator;
        at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:949)
        at hudson.plugins.sshslaves.SSHLauncher.launch(SSHLauncher.java:488)
        at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:230)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:724)
        26:30 SSH Connection closed.

  12. I am trying to use this plugin in conjunction with the Multi slave config plugin https://wiki.jenkins-ci.org/display/JENKINS/Multi+slave+config+plugin. Unfortunately, it does not seem to be possible to generate several slaves with different host names. Or am I doing something wrong? This would be a great enhancement of the plugin!

  13. Version 1.7 seems to have introduced a bug. We're getting NullPointerException at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:1198). Downgrading to version 1.6 fixes this issue.

    Our Jenkins version is 1.565.2 LTS.

    1. Same behavior on my side. Using latest Jenkins version 1.582

  14. Is there any change to use different SSH credentials to launch the same slave in different jobs?

    For example you have the slave "unix1" that might be used for the job A and B, but job A should use ssh-key-A while job B should use ssh-key-B ... the choice which key to be used might be fixed for a job or might be given as a build parameter.

  15. Where is a 'Once it has a suitable version of java' defined? I need to incorporate some very odd / old slaves.  And i want to make sure I don't run foul of need an unsupported version of java.  

  16. To the author of this plugin. It would be appreciated if the plugin was placed under some kind of license.

    MIT License is the most common for Jenkins plugins.

  17. You should document the way to add host to known_hosts when using version >= 1.15. 

    If the user running jenkins do not have a shell, the following command can be used with openssh on linux:

    mkdir -p /var/lib/jenkins/.ssh
    chmod 700 /var/lib/jenkins/.ssh
    ssh-keyscan -H <hostname> >> /var/lib/jenkins/.ssh/known_hosts
    chown -R jenkins /var/lib/jenkins/.ssh
  18. is there a way to bypass java version validation?

    I need to ssh to a PowerPC Device running Linux without Java.

    The connection was initially succesful. However connection was closed due to failure to find java on the slave device.

    Below is the log file. Appreciate any help.

    [06/16/17 22:37:41] [SSH] Opening SSH connection to joker:22.
    
    [06/16/17 22:37:43] [SSH] WARNING: SSH Host Keys are not being verified. Man-in-the-middle attacks may be possible against this connection.
    
    [06/16/17 22:37:44] [SSH] Authentication successful.
    [06/16/17 22:37:45] [SSH] The remote users environment is:
    BASH=/bin/bash
    BASHOPTS=cmdhist:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
    BASH_ALIASES=()
    BASH_ARGC=()
    BASH_ARGV=()
    BASH_CMDS=()
    BASH_EXECUTION_STRING=set
    BASH_LINENO=()
    BASH_SOURCE=()
    BASH_VERSINFO=([0]="4" [1]="2" [2]="37" [3]="1" [4]="release" [5]="powerpc-unknown-linux-gnu")
    BASH_VERSION='4.2.37(1)-release'
    DIRSTACK=()
    EUID=0
    GROUPS=()
    HOME=/root
    HOSTNAME=Joker
    HOSTTYPE=powerpc
    IFS=$' \t\n'
    LC_ALL=C
    LOGNAME=root
    LS_COLORS=
    LS_OPTIONS=--color=auto
    MACHTYPE=powerpc-unknown-linux-gnu
    MAIL=/var/mail/root
    OPTERR=1
    OPTIND=1
    OSTYPE=linux-gnu
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11
    PERLLIB=/usr/local/NSPT/WDSafe/lib:/usr/local/NSPT/WDShare/lib:/usr/local/NSPT/WDNAS/lib:
    PERLLIB_ALL_PATHS=([0]="/usr/local/NSPT/WDSafe/lib:/usr/local/NSPT/WDShare/lib:/usr/local/NSPT/WDNAS/lib:")
    PERLLIB_PATH=/usr/local/NSPT/WDSafe/lib
    PERLLIB_PATHS=([0]="/usr/local/NSPT/WDNAS/lib" [1]="/usr/local/NSPT/WDShare/lib" [2]="/usr/local/NSPT/WDSafe/lib")
    PIPESTATUS=([0]="0")
    PPID=5512
    PS1='\h:\w\$ '
    PS4='+ '
    PWD=/root
    SHELL=/bin/bash
    SHELLOPTS=braceexpand:hashall:interactive-comments
    SHLVL=1
    SSH_CLIENT='192.168.0.7 50476 22'
    SSH_CONNECTION='192.168.0.7 50476 192.168.0.6 22'
    TERM=dumb
    UID=0
    USER=root
    WDPERLLIB=/usr/local/NSPT/WDSafe/lib:/usr/local/NSPT/WDShare/lib:/usr/local/NSPT/WDNAS/lib:
    _=/etc/nas/NSPT/setPerlVar
    [06/16/17 22:37:45] [SSH] Checking java version of java
    Couldn't figure out the Java version of java
    bash: java: command not found
    
    [06/16/17 22:37:45] [SSH] Checking java version of /usr/bin/java
    Couldn't figure out the Java version of /usr/bin/java
    bash: /usr/bin/java: No such file or directory
    
    [06/16/17 22:37:45] [SSH] Checking java version of /usr/java/default/bin/java
    Couldn't figure out the Java version of /usr/java/default/bin/java
    bash: /usr/java/default/bin/java: No such file or directory
    
    [06/16/17 22:37:45] [SSH] Checking java version of /usr/java/latest/bin/java
    Couldn't figure out the Java version of /usr/java/latest/bin/java
    bash: /usr/java/latest/bin/java: No such file or directory
    
    [06/16/17 22:37:45] [SSH] Checking java version of /usr/local/bin/java
    Couldn't figure out the Java version of /usr/local/bin/java
    bash: /usr/local/bin/java: No such file or directory
    
    [06/16/17 22:37:45] [SSH] Checking java version of /usr/local/java/bin/java
    Couldn't figure out the Java version of /usr/local/java/bin/java
    bash: /usr/local/java/bin/java: No such file or directory
    
    [06/16/17 22:37:45] [SSH] Checking java version of /jdk/bin/java
    Couldn't figure out the Java version of /jdk/bin/java
    bash: /jdk/bin/java: No such file or directory
    
    Linux Joker 2.6.32.11-svn70860 #1 Thu May 17 13:32:51 PDT 2012 ppc GNU/Linux
    java.io.IOException: Could not find any known supported java version in [java, /usr/bin/java, /usr/java/default/bin/java, /usr/java/latest/bin/java, /usr/local/bin/java, /usr/local/java/bin/java, /jdk/bin/java], and we also failed to install JDK as a fallback
    	at hudson.plugins.sshslaves.SSHLauncher.resolveJava(SSHLauncher.java:914)
    	at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:808)
    	at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:792)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.io.IOException: Failed to detect the environment for automatic JDK installation. Please report this to jenkinsci-users@googlegroups.com: Linux Joker 2.6.32.11-svn70860 #1 Thu May 17 13:32:51 PDT 2012 ppc GNU/Linux
    
    	at hudson.plugins.sshslaves.SSHLauncher.attemptToInstallJDK(SSHLauncher.java:1025)
    	at hudson.plugins.sshslaves.SSHLauncher.resolveJava(SSHLauncher.java:912)
    	... 6 more
    [06/16/17 22:37:45] Launch failed - cleaning up connection
    [06/16/17 22:37:45] [SSH] Connection closed.
  19. Hi! I am trying to set environment variable in master as "SLAVE_IP" with an IP address as a value and use it in Slave(Both master and slave in windows) but somehow it won't recognize the environment variable though it is displayed in system configuration. While launching the agent it gives me error as:

    [10/17/17 15:11:22] [SSH] Opening SSH connection to ${SLAVE_IP}:22.
    
    ${SLAVE_IP}
    java.io.IOException: There was a problem while connecting to ${SLAVE_IP}:22
    	at com.trilead.ssh2.Connection.connect(Connection.java:834)
    	at com.trilead.ssh2.Connection.connect(Connection.java:703)
    	at com.trilead.ssh2.Connection.connect(Connection.java:617)
    	at hudson.plugins.sshslaves.SSHLauncher.openConnection(SSHLauncher.java:1284)
    	at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:804)
    	at hudson.plugins.sshslaves.SSHLauncher$2.call(SSHLauncher.java:793)
    	at java.util.concurrent.FutureTask.run(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    	at java.lang.Thread.run(Unknown Source)
    Caused by: java.net.UnknownHostException: ${SLAVE_IP}
    	at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
    	at java.net.InetAddress$2.lookupAllHostAddr(Unknown Source)
    	at java.net.InetAddress.getAddressesFromNameService(Unknown Source)
    	at java.net.InetAddress.getAllByName0(Unknown Source)
    	at java.net.InetAddress.getAllByName(Unknown Source)
    	at java.net.InetAddress.getAllByName(Unknown Source)
    	at java.net.InetAddress.getByName(Unknown Source)
    	at com.trilead.ssh2.transport.TransportManager.createInetAddress(TransportManager.java:166)
    	at com.trilead.ssh2.transport.TransportManager.establishConnection(TransportManager.java:366)
    	at com.trilead.ssh2.transport.TransportManager.initialize(TransportManager.java:480)
    	at com.trilead.ssh2.Connection.connect(Connection.java:774)
    	... 9 more
    [10/17/17 15:11:25] Launch failed - cleaning up connection
    [10/17/17 15:11:25] [SSH] Connection closed.
Write a comment…