Remoting Plugin Manual

    Preface

    This document describes the functionality provided by the XL Deploy Remoting plugin.

    Overview

    The Remoting plugin is an XL Deploy plugin that allows XL Deploy to manipulate files and execute commands on remote hosts. It does so by using the Overthere framework. Overthere is a Java library to manipulate files and execute processes on remote hosts, i.e. do stuff "over there". See the Overthere Github repository for more information.

    Features

    • Supports SSH for connectivity to Unix, Windows and z/OS hosts.
    • Supports CIFS, Telnet and WinRM for connectivity to Windows hosts.
    • Allows SSH jumpstations to be used to access hosts to which a direct network connection is not possible.
      • N.B.: Not only SSH connection can be tunneled through an SSH jumpstation, CIFS, Telnet and WinRM can be tunneled too!
    • All connection methods are implemented internally in XL Deploy itself, so no external dependencies are required.
      • An exception is the WINRM_NATIVE connection type which uses the Windows winrs command, but a winrs proxy can be used to use this connection type when XL Deploy runs on a Unix host.

    Requirements

    • XL Deploy requirements
      • XL Deploy: version 4.0+
      • Other XL Deploy Plugins: None

    Host types

    The Remoting plugin defines three CI types that define the protocol that is used to access the target host:

    Connection types

    The overthere.SshHost and overthere.CifsHost types each have a connectionType property that defines more precisely how to connect to the remote host.

    SSH connection types

    The connectionType property of an overthere.SshHost defines how files are transferred and how commands are executed on the remote host. Possible values are:

    • SFTP - uses SFTP to transfer files to a Unix host or a z/OS host. Requires the SFTP subsystem to be enabled, which is the default for most SSH servers.
      This is the only connection type available for z/OS hosts.
    • SFTP_CYGWIN - uses SFTP to transfer files to a Windows host running OpenSSH on Cygwin.
      This connection type can only be used for Windows hosts.
    • SFTP_WINSSHD - uses SFTP to transfer files to a Windows host running WinSSHD.
      This connection type can only be used for Windows hosts.
    • SCP - uses SCP to transfer files to a Unix host. The is the fastest connection type available for Unix hosts.
    • SUDO - like the SCP connection type, but uses the sudo command to execute commands and to copy files from and to their actual locations. Requires all commands to be executed to have been configured with NOPASSWD in the /etc/sudoers configuration file.
      If this connection type is selected, the sudoUsername property should be set to specify the user that does have the necessary permissions.
    • INTERACTIVE_SUDO - like the SUDO connection type, but does not require the NOPASSWD option to have been configured for all commands. It enables detection of the password prompt that is shown by the sudo command when the login user (username) tries to execute a commands as the privileged user (sudoUsername) when that command has not been configured with NOPASSWD, and causes the password of username to be sent in reply.
      N.B.: Because the password of the login user (username) is needed to answer this prompt, this connection type is incompatible with the privateKeyFile property that can be used to authenticate with a private key file.

    For more details on how to configure the remote hosts and your XL Deploy server for SSH, see the section on SSH of this document. Troubleshooting tips are included too.

    CIFS connection types (includes WinRM and Telnet)

    The connectionType property of an overthere.CifsHost defines how commands are executed on the remote host. Files are always transferred using CIFS. Possibles values are:

    • WINRM_INTERNAL - uses WinRM over HTTP(S) to execute remote commands. The port property specifies the Telnet port to connect to. The default value is 5985 for HTTP and 5986 for HTTPS.
      A Java implementation of WinRM internal to XL Deploy is used.
    • WINRM_NATIVE - like WINRM_INTERNAL but uses the native Windows implementation of WinRM, i.e. the winrs command.
      If the XL Deploy server is not running on a Windows host, a winrs proxy must be configured.
    • TELNET - uses Telnet to execute remote commands. The port property specifies the Telnet port to connect to. The default value is 23.

    All CIFS connection types can only be used for Windows hosts. For more details on how to configure the remote hosts and your XL Deploy server for CIFS, WinRM and Telnet, see the relevant section of this document. Troubleshooting tips are included too.

    Which host type and connection type to choose?

    To determine what kind of host to create and what connection type to choose, please follow these guidelines.

    • Is the remote host the XL Deploy server itself?
      • Yes -> Create an overthere.LocalHost CI. Done.
    • Is the remote host a Unix host?
      • Yes -> Create an overthere.SshHost CI, set the os to UNIX, and answer the questions below:
      • Can you connect to the target system with the user that has the privileges to manipulate the files and execute the commands required?
        • Yes -> Use the SCP connection type. Done.
      • Do you need to log in as one user and then use sudo (or a similar command like sx but not su) to execute commands and manipulate files as a different user?
        • Yes -> Answer the questions below:
        • Are the commands you need configured with NOPASSWD in the /etc/sudoers configuration file? In other words, are you not prompted for a password when executing sudo COMMAND?
          • Yes -> Use the SUDO connection type. Done.
          • No -> Use the INTERACTIVE_SUDO connection type. Done.
      • Do you need to log in as one user and then use su to execute commands and manipulate files as a different user?
        • Yes -> Use the SU connection type. Done.
    • Is the remote host a Windows host?
      • Yes -> Answer the questions below.
      • Have you configured WinRM on the remote host?
        • Yes -> Create an overthere.CifsHost CI and answer the questions below:
          • Is the XL Deploy server running on a Windows host?
            • Yes -> Use the WINRM_NATIVE connection type. Done.
            • No -> Use the WINRM_INTERNAL connection type. Done.
      • Have you installed WinSSHD on the remote host?
        • Yes -> Create an overthere.SshHost CI, set the os to WINDOWS, and use the SFTP_WINSSHD connection type. Done.
      • Have you installed OpenSSH (e.g. Cygwin or Copssh) on the remote host?
        • Yes -> Create an overthere.SshHost CI, set the os to WINDOWS, and use the SFTP_CYGWIN connection type. Done.
      • Have you configured Telnet on the remote host?
        • Yes -> Create an overthere.CifsHost CI and use the TELNET connection type. Done.
      • If you have not yet configured either WinRM, SSH or Telnet, please configure WinRM and start from the top.
    • Is the remote host a z/OS host?
      • Yes -> Create an overthere.SshHost CI, set the os to ZOS, and use the SFTP connection type. Done.

    SSH

    The SSH protocol support of XL Deploy uses the SSH protocol to connect to remote hosts to manipulate files and execute commands. Most Unix systems already have an SSH server installed and configured and a number of different SSH implementations are available for Windows although not all of them are supported by XL Deploy.

    Compatibility

    XL Deploy uses the sshj library for SSH and supports all algorithms and formats supported by that library:

    • Ciphers: aes{128,192,256}-{cbc,ctr}, blowfish-cbc, 3des-cbc
    • Key Exchange methods: diffie-hellman-group1-sha1, diffie-hellman-group14-sha1
    • Signature formats: ssh-rsa, ssh-dss
    • MAC algorithms: hmac-md5, hmac-md5-96, hmac-sha1, hmac-sha1-96
    • Compression algorithms: zlib and zlib@openssh.com (delayed zlib)
    • Private Key file formats: pkcs8 encoded (the format used by OpenSSH)

    Host setup for SSH

    SSH

    To connect to a remote host using the SSH protocol, you will need to install an SSH server on that remote host. For Unix platforms, we recommend OpenSSH. It is included in all Linux distributions and most other Unix flavours. For Windows platforms two SSH servers are supported:

    • OpenSSH on Cygwin. We recommend Copssh as a convenient packaging of OpenSSH and Cygwin. It is a free source download but since 22/11/2011 the binary installers are a paid solution.
    • WinSSHD is a commercial SSH server that has a lot of configuration options.

    N.B.: The SFTP, SCP, SUDO and INTERACTIVE_SUDO connection types are only available for Unix hosts. To use SSH with z/OS hosts, use the SFTP connection type. To use SSH with Windows hosts, choose either the SFTP_CYGWIN or the SFTP_WINSSHD connection type.

    SFTP

    To use the SFTP connection type, make sure SFTP is enabled in the SSH server. This is enabled by default in most SSH servers.

    SFTP_CYGWIN

    To use the SFTP_CYGWIN connection type, install Copssh on your Windows host. In the Copssh control panel, add the users as which you want to connect and select Linux shell and Sftp in the shell dropdown box. Check Password authentication and/or Public key authentication depending on the authentication method you want to use.
    N.B.: XL Deploy will take care of the translation from Windows style paths, e.g. C:\Program Files\IBM\WebSphere\AppServer, to Cygwin-style paths, e.g. /cygdrive/C/Program Files/IBM/WebSphere/AppServer, so that your code can use Windows style paths.

    SFTP_WINSSHD

    To use the SFTP_WINSSHD connection type, install WinSSHD on your Windows host. In the Easy WinSSHD Settings control panel, add the users as which you want to connect, check the Login allowed checkbox and select Allow full access in the Virtual filesystem layout dropdown box. Alternatively you can check the Allow login to any Windows account to allow access to all Windows accounts.
    N.B.: XL Deploy will take care of the translation from Windows style paths, e.g. C:\Program Files\IBM\WebSphere\AppServer, to WinSSHD-style paths, e.g. /C/Program Files/IBM/WebSphere/AppServer, so that your code can use Windows style paths.

    SUDO and INTERACTIVE_SUDO

    To use the SUDO connection type, the /etc/sudoers configuration will have to be set up in such a way that the user configured with the username property can execute the commands below as the user configured with the sudoUsername property. The arguments passed to these commands depend on the exact usage of the XL Deploy connection. Check the INFO messages on the com.xebialabs.overthere.ssh.SshConnection category to see what commands get executed.

    • chmod
    • cp
    • ls
    • mkdir
    • mv
    • rm
    • rmdir
    • tar
    • Any other command that might be invoked by the middleware plugins, e.g. wsadmin.sh or wlst.sh.

    The commands mentioned above must be configured with the NOPASSWD setting in the /etc/sudoers file. Otherwise you will have to use the INTERACTIVE_SUDO connection type. When the INTERACTIVE_SUDO connection type is used, every line of the output will be matched against the regular expression configured with the sudoPasswordPromptRegex property. If a match is found, the value of the password property is sent.

    Troubleshooting SSH

    This section lists a number of common configuration errors that can occur when using XL Deploy with SSH.

    Cannot start a process on an SSH server because the server disconnects immediately.

    If the terminal type requested using the allocatePty property or the allocateDefaultPty property is not recognized by the SSH server, the connection will be dropped. Specifically, the dummy terminal type configured by allocateDefaultPty property, will cause OpenSSH on AIX and WinSSHD to drop the connection. Try a safe terminal type such as vt220 instead.

    To verify the behaviour of your SSH server with respect to pty allocation, you can manually execute the ssh command with the -T (disable pty allocation) or -t (force pty allocation) flags.

    Command executed using SUDO or INTERACTIVE_SUDO fails with the message sudo: sorry, you must have a tty to run sudo

    The sudo command requires a tty to run. Set the allocatePty property or the allocateDefaultPty property to ask the SSH server allocate a pty.

    Command executed using SUDO or INTERACTIVE_SUDO appears to hang.

    This may be caused by the sudo command waiting for the user to enter his password to confirm his identity. There are two ways to solve this:

    1. Use the NOPASSWD tag in your /etc/sudoers file.
    2. Use the INTERACTIVE_SUDO**] connection type instead of the SUDO connection type.
    3. If you are already using the INTERACTIVE_SUDO connection type and you still get this error, please verify that you have correctly configured the sudoPasswordPromptRegex property. If you have trouble determining the proper value for the sudoPasswordPromptRegex property, set the log level for the com.xebialabs.overthere.ssh.SshInteractiveSudoPasswordHandlingStream category to TRACE and examine the output.

    CIFS, WinRM and Telnet

    The CIFS protocol implementation of XL Deploy uses the CIFS protocol, also known as SMB, for file manipulation and, depending on the settings, uses either WinRM or Telnet for process execution. You will most likely not need to install new software although you might need to enable and configure some services:

    • The built-in file sharing capabilities of Windows are based on CIFS and are therefore available and enabled by default.
    • WinRM is available on Windows Server 2008 and up. XL Deploy supports basic authentication for local accounts and Kerberos authentication for domain accounts. Overthere has a built-in WinRM library that can be used from all operating systems by setting the connectionType property to WINRM_INTERNAL. When connecting from a host that runs Windows, or when using a winrs proxy that runs Windows, the native WinRM capabilities of Windows, i.e. the winrs command, can be used by setting the connectionType property to WINRM_NATIVE.
    • A Telnet Server is available on all Windows Server versions although it might not be enabled.

    Password limitations

    Due to a limitation of the winrs command, passwords containing a single quote (') or a double quote (") cannot be used when using the _WINRMNATIVE connection type.

    Domain accounts

    Windows domain accounts are supported by the WINRM_INTERNAL, WINRM_NATIVE and TELNET connection types, but the syntax of the username is different:

    • For the _WINRMINTERNAL connection type, domain accounts must be specified using the new-style domain syntax, e.g. USER@FULL.DOMAIN.
    • For the TELNET connection type, domain accounts must be specified using the old-style domain syntax, e.g DOMAIN\USER.
    • For the _WINRMNATIVE connection type, domain accounts may be specified using either the new-style (USER@FULL.DOMAIN) or old-style (DOMAIN\USER) domain syntax.
    • For all three connection types, local accounts must be specified without an at-sign (@) or a backslash (\).

    N.B.: When using domain accounts with the WINRM_INTERNAL connection type, the Kerberos subsystem of the Java Virtual Machine must be configured correctly. Please read the section on how to set up Kerberos for the source host and the remote hosts.

    Administrative shares

    By default XL Deploy will access the administrative shares on the remote host. These shares are only accessible for users that are part of the Administrators on the remote host. If you want to access the remote host using a regular account, use the pathShareMapping property to configure the shares to use for the paths XL Deploy will be connecting to. Of course, the user configured with the username property should have access to those shares and the underlying directories and files.

    N.B.: XL Deploy will take care of the translation from Windows paths, e.g. C:\Program Files\IBM\WebSphere\AppServer, to SMB URLs that use the administrative shares, e.g. smb://username:password@hostname/C$/Program%20Files/IBM/WebSphere/AppServer (which corresponds to the UNC path \\hostname\C$\Program Files\IBM\WebSphere\AppServer), so that your code can use Windows style paths.

    Host setup for CIFS, WinRM and Telnet

    CIFS

    To connect to a remote host using the CIFS protocol, ensure the host is reachable on port 445.

    If you will be connecting as an administrative user, ensure the administrative shares are configured. Otherwise, ensure that the user you will be using to connect has access to shares that correspond to the directory you want to access and that the pathShareMappings property is configured accordingly.

    Telnet

    To use the TELNET connection type, you'll need to enable and configure the Telnet Server according to these instructions:

    1. (Optional) If the Telnet Server is not already installed on the remote host, add it using the Add Features Wizard in the Server Manager console.

    2. (Optional) If the remote host is running Windows Server 2003 SP1 or an x64-based version of Windows Server 2003, install the Telnet server according to these instructions from the Microsoft Support site.

    3. Enable the Telnet Server Service on the remote host according to these instructions on the Microsoft Technet site.

    4. After you have started the Telnet Server, open a command prompt as the Administrator user on the remote host and enter the command tlntadmn config mode=stream to enable stream mode.

    When the Telnet server is enabled any user that is in the Administrators group or that is in the TelnetClients group and that has the Allow logon locally privilege can log in using Telnet. See the Microsoft Technet to learn how to grant a user or group the right to logon locally on Windows Server 2008 R2.

    WinRM

    To use the WINRM_INTERNAL or the WINRM_NATIVE connection type, you'll need to setup WinRM on the remote host by following these instructions:

    1. If the remote host is running Windows Server 2003 SP1 or SP2, or Windows XP SP2, install the WS-Management v.1.1 package.

    2. If the remote host is running Windows Server 2003 R2, go to the Add/Remove System Components feature in the Control Panel and add WinRM under the section Management and Monitoring Tools. Afterwards install the WS-Management v.1.1 package to upgrade the WinRM installation.

    3. If the remote host is running Windows Vista or Windows 7, the Windows Remote Management (WS-Management) service is not started by default. Start the service and change its Startup type to Automatic (Delayed Start) before proceeding with the next steps.

    4. On the remote host, open a Command Prompt (not a PowerShell prompt!) using the Run as Administrator option and paste in the following lines when using the WINRM_INTERNAL connection type:

      winrm quickconfig
      y
      winrm set winrm/config/service/Auth @{Basic="true"}
      winrm set winrm/config/service @{AllowUnencrypted="true"}
      winrm set winrm/config/winrs @{MaxMemoryPerShellMB="1024"}
      

      Or the following lines when using the WINRM_NATIVE connection type:

      winrm quickconfig
      y
      winrm set winrm/config/service/Auth @{Basic="true"}
      winrm set winrm/config/winrs @{MaxMemoryPerShellMB="1024"}
      

      Or keep reading for more detailed instructions. :-)

    5. Run the quick config of WinRM to start the Windows Remote Management service, configure an HTTP listener and create exceptions in the Windows Firewall for the Windows Remote Management service:

      winrm quickconfig
      

      N.B.: The Windows Firewall needs to be running to run this command. See Microsoft Knowledge Base article #2004640.

    6. (Optional) By default basic authentication is disabled in WinRM. Enable it if you are going to use local accounts to access the remote host:

      winrm set winrm/config/service/Auth @{Basic="true"}
      
    7. (Optional) By default Kerberos authentication is enabled in WinRM. Disable it if you are not going to use domain accounts to access the remote host:

      winrm set winrm/config/service/Auth @{Kerberos="false"}
      

      N.B.: Do not disable Negotiate authentication as the winrm command itself uses that to configure the WinRM subsystem!

    8. (Only required for WINRM_INTERNAL or when the property winrsUnencrypted is set to true) Configure WinRM to allow unencrypted SOAP messages:

      winrm set winrm/config/service @{AllowUnencrypted="true"}
      
    9. Configure WinRM to provide enough memory to the commands that you are going to run, e.g. 1024 MB:

      winrm set winrm/config/winrs @{MaxMemoryPerShellMB="1024"}
      

      N.B.: This is not supported by WinRM 3.0, included with the Windows Management Framework 3.0. This update has been temporarily removed from Windows Update because of numerous incompatibility issues with other Microsoft products. However, if you have already installed WMF 3.0 and cannot downgrade, Microsoft Knowledge Base article #2842230 describes a hotfix that can be installed to re-enable the MaxMemoryPerShellMB setting.

    10. To use the WINRM_INTERNAL or WINRM_NATIVE connection type with HTTPS, i.e. winrmEnableHttps set to true, follow the steps below:

      1. (Optional) Create a self signed certificate for the remote host by installing selfssl.exe from the IIS 6 resource kit and running the command below or by following the instructions in this blog by Hans Olav:
          C:\Program Files\IIS Resources\SelfSSL>selfssl.exe /T /N:cn=HOSTNAME /V:3650
          Microsoft (R) SelfSSL Version 1.0
          Copyright (C) 2003 Microsoft Corporation. All rights reserved.
      
          Do you want to replace the SSL settings for site 1 (Y/N)?Y
          The self signed certificate was successfully assigned to site 1.
      
      1. Open a PowerShell window and enter the command below to find the thumbprint for the certificate for the remote host:
          PS C:\Windows\system32> Get-childItem cert:\LocalMachine\Root\ | Select-String -pattern HOSTNAME
      
          [Subject]
            CN=HOSTNAME
      
          [Issuer]
            CN=HOSTNAME
      
          [Serial Number]
            527E7AF9142D96AD49A10469A264E766
      
          [Not Before]
            5/23/2011 10:23:33 AM
      
          [Not After]
            5/20/2021 10:23:33 AM
      
          [Thumbprint]
            5C36B638BC31F505EF7F693D9A60C01551DD486F
      
      1. Create an HTTPS WinRM listener for the remote host with the thumbprint you've just found:
          winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="HOSTNAME"; CertificateThumbprint="THUMBPRINT"}
      

    For more information on WinRM, please refer to the online documentation at Microsoft's DevCenter. As a quick reference, have a look at the list of useful commands below:

    • Do a quickconfig for WinRM with HTTPS: winrm quickconfig -transport:https
    • View the complete WinRM configuration: winrm get winrm/config
    • View the listeners that have been configured: winrm enumerate winrm/config/listener
    • Create an HTTP listener: winrm create winrm/config/listener?Address=*+Transport=HTTP (also done by winrm quickconfig)
    • Allow all hosts to connect to the WinRM listener: winrm set winrm/config/client @{TrustedHosts="*"}
    • Allow a fixed set of hosts to connect to the WinRM listener: winrm set winrm/config/client @{TrustedHosts="host1,host2..."}

    Kerberos - XL Deploy host

    N.B.: You will only need to configure Kerberos if you are going to use Windows domain accounts to access the remote host with the WINRM_INTERNAL connection type.

    In addition to the setup described in the WINRM section, using Kerberos authentication requires that you follow the Kerberos Requirements for Java on the host that runs the XL Deploy server.

    Create a file called krb5.conf (Unix) or krb5.ini (Windows) with at least the following content:

    [realms]
    EXAMPLE.COM = {
        kdc = KDC.EXAMPLE.COM
    }
    

    Replace the values with the name of your domain/realm and the hostname of your domain controller (multiple entries can be added to allow the XL Deploy server host to connect to multiple domains) and place the file in the default location for your operating system:

    • Linux: /etc/krb5.conf
    • Solaris: /etc/krb5/krb5.conf
    • Windows: C:\Windows\krb5.ini

    Alternatively, place the file somewhere else and edit the server.sh or server.cmd startup script and add the following Java system property to the command line: -Djava.security.krb5.conf=/path/to/krb5.conf. Replace the path with the location of the file you just created.

    See the Kerberos V5 System Administrator's Guide at MIT for more information on the krb5.conf format.

    Kerberos - remote host

    N.B.: You will only need to configure Kerberos if you are going to use Windows domain accounts to access the remote host with the WINRM_INTERNAL connection type.

    By default, XL Deploy will request access to a Kerberos service principal name of the form WSMAN/HOST, for which an SPN should be configured automatically when you configure WinRM for a remote host.

    If that was not configured correctly, e.g. if you have overridden the default SPN for which a ticket is requested through the winrmKerberosAddPortToSpn or the winrmKerberosUseHttpSpn properties, you will have configure the service principal names manually.

    This can be achieved by invoking the setspn command, as an Administrator, on any host in the domain, as follows:

     setspn -A PROTOCOL/ADDRESS:PORT WINDOWS-HOST 
    where:

    • PROTOCOL is either WSMAN (default) or HTTP (if winrmKerberosUseHttpSpn has been set to true).
    • ADDRESS is the address used to connect to the remote host,
    • PORT (optional) is the port used to connect to the remote host (usually 5985 or 5986, only necessary if winrmKerberosAddPortToSpn has been set to true), and
    • WINDOWS-HOST is the short Windows hostname of the remote host.

    Some other useful commands:

    • List all service principal names configured for the domain: setspn -Q */*
    • List all service principal names configured for a specific host in the domain: setspn -L _WINDOWS-HOST_

    Troubleshooting CIFS, WinrRM and Telnet

    This section lists a number of common configuration errors that can occur when using XL Deploy with CIFS, WinRM and/or Telnet.

    For more troubleshooting tips for Kerberos, please refer to the Kerberos troubleshooting guide in the Java SE documentation.

    CIFS connections are very slow to set up.

    The JCIFS library, which XL Deploy uses to connect to CIFS shares, will try and query the Windows domain controller to resolve the hostname in SMB URLs. JCIFS will send packets over port 139 (one of the [NetBIOS over TCP/IP] ports) to query the DFS. If that port is blocked by a firewall, JCIFS will only fall back to using regular hostname resolution after a timeout has occurred.

    Set the following Java system property to prevent JCIFS from sending DFS query packets: -Djcifs.smb.client.dfs.disabled=true.

    See this article on the JCIFS mailing list for a more detailed explanation.

    CIFS connections time out

    If the problem cannot be solved by changing the network topology, try increasing the JCIFS timeout values documented in the JCIFS documentation. Another system property not mentioned there but only on the JCIFS homepage is jcifs.smb.client.connTimeout.

    To get more debug information from JCIFS, set the system property jcifs.util.loglevel to 3.

    Kerberos authentication fails with the message Unable to load realm info from SCDynamicStore

    The Kerberos subsystem of Java cannot start up. Did you configure it as described in the section on Kerberos setup for the source host?

    Kerberos authentication fails with the message Cannot get kdc for realm …

    The Kerberos subsystem of Java cannot find the information for the realm in the krb5.conf file. The realm name specified in the Kerberos configuration on the source host is case sensitive and must be entered in upper case in the krb5.conf file.

    Alternatively, you can use the dns_lookup_kdc and dns_lookup_realm options in the libdefaults section to automatically find the right realm and KDC from the DNS server if it has been configured to include the necessary SRV and TXT records:

    [libdefaults]
        dns_lookup_kdc = true
        dns_lookup_realm = true
    

    Kerberos authentication fails with the message Server not found in Kerberos database (7)

    The service principal name for the remote host has not been added to Active Directory. Did you add the SPN as described in the section on Kerberos setup for remote hosts?

    Kerberos authentication fails with the message Pre-authentication information was invalid (24) or Identifier doesn't match expected value (906)

    The username or the password supplied was invalid. Did you supply the correct credentials?

    Kerberos authentication fails with the message Integrity check on decrypted field failed (31)

    Is the target host part of a Windows 2000 domain? In that case, you'll have to add rc4-hmac to the supported encryption types:

    [libdefaults]
        default_tgs_enctypes = aes256-cts-hmac-sha1-96 des3-cbc-sha1 arcfour-hmac-md5 des-cbc-crc des-cbc-md5 des-cbc-md4 rc4-hmac
        default_tkt_enctypes = aes256-cts-hmac-sha1-96 des3-cbc-sha1 arcfour-hmac-md5 des-cbc-crc des-cbc-md5 des-cbc-md4 rc4-hmac
    

    Kerberos authentication fails with the message Message stream modified (41)

    The realm name specified in the Kerberos configuration on the source host does not match the case of the Windows domain name. The realm name is case sensitive and must be entered in upper case in the krb5.conf file.

    I am not using Kerberos authentication and I still see messages saying Unable to load realm info from SCDynamicStore

    The Kerberos subsystem of Java cannot start up and the remote WinRM server is sending a Kerberos authentication challenge. If you are using local accounts, the authentication will proceed successfully despite this message. To remove these messages either configure Kerberos as described in the section on Kerberos setup for the source host or disallow Kerberos on the WinRM server as described in step 4 of the section on WinRM setup.

    Telnet connection fails with the message VT100/ANSI escape sequence found in output stream. Please configure the Windows Telnet server to use stream mode (tlntadmn config mode=stream).

    The Telnet service has been configured to be in "Console" mode. Did you configure it as described in the section on Telnet setup?

    The winrm configuration command fails with the message There are no more endpoints available from the endpoint mapper

    The Windows Firewall has not been started. See Microsoft Knowledge Base article #2004640 for more information.

    The winrm configuration command fails with the message The WinRM client cannot process the request

    This can occur if you have disabled the Negotiate authentication method in the WinRM configuration. To fix this situation, edit the configuration in the Windows registry under the key HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WSMAN\ and restart the Windows Remote Management service.

    Courtesy of this blog by Chris Knight

    WinRM command fails with the message java.net.ConnectException: Connection refused

    The Windows Remote Management service is not running or is not running on the port that has been configured. Start the service or configure XL Deploy to use a different port.

    WinRM command fails with a 401 response code

    Multiple causes can lead to this error message:

    1. The Kerberos ticket is not accepted by the remote host:

      1. Did you set up the correct service principal names (SPNs) as described in the section on Kerberos setup for remote hosts? The hostname is case insensitive, but it has to be the same as the one used in the address property, i.e. a simple hostname or a fully qualified domain name. Domain policies may prevent the Windows Management Service from creating the required SPNs. See this blog by LazyJeff for more information.
      1. Has the reverse DNS of the remote host been set up correctly? See Principal names and DNS for more information. Please note that the rdns option is not available in Java's Kerberos implementation.
    2. The WinRM service is not set up to accept unencrypted traffic. Did you execute step #8 of the host setup for WinRM?

    3. The user is not allowed to log in. Did you uncheck the "User must change password at next logon" checkbox when you created the user in Windows?

    4. The user is not allowed to perform a WinRM command. Did you grant the user (local) administrative privileges?

    WinRM command fails with a 500 response code

    Multiple causes can lead to this error message:

    1. If the command was executing for a long time, this might have been caused by a timeout. You can increase the WinRM timeout specified by the winrmTimeout property to increase the request timeout. Don't forget to increase the MaxTimeoutms setting on the remote host as well. For example, to set the maximum timeout on the server to five minutes, enter the following command:

      winrm set winrm/config @{MaxTimeoutms="300000"}

    2. If a lot of commands are being executed concurrently, increase the MaxConcurrentOperationsPerUser setting on the server. For example, to set the maximum number of concurrent operations per user to 100, enter the following command:

      winrm set winrm/config/service @{MaxConcurrentOperationsPerUser="100"}

    Other configuration options that may be of use are Service/MaxConcurrentOperations and MaxProviderRequests (WinRM 1.0 only).

    WinRM command fails with an unknown error code

    If you see an unknown WinRM error code in the logging, you can use the winrm helpmsg command to get more information, e.g.

    winrm helpmsg 0x80338104
    The WS-Management service cannot process the request. The WMI service returned an 'access denied' error.
    

    Courtesy of this PowerShell Magazine blog by Shay Levy

    Advanced configurations

    Connecting through an SSH jumpstation

    When XL Deploy cannot reach a remote host directly, but that host can be reached by setting up one (or more) SSH tunnels, configure one (or more) overthere.SshJumpstation CIs as follows:

    1. Create an overthere.SshJumpStation CI that represents a host to which XL Deploy can connect directly.
    2. For each remote host that cannot be reached directly by XL Deploy, create an overthere.Host as usual, but set the jumpstation property to refer to the overthere.SshJumpStation CI created in step 1.

    When XL Deploy creates a connection to the remote host and determines that it needs to connect through a jumpstation, and will first open a connection to that jumpstation and then setup a SSH tunnel ("local port forward") to the remote host.

    N.B.: Jumpstations can also refer to other jumpstations for even more complex network setups, but cycles are not allowed.

    Exposing more Overthere properties in XL Deploy

    Most of the Overthere connection properties defined in the Overthere documentation are available as regular properties or as hidden properties on the overthere.SshHost and overthere.CifsHost types. If you need access to any additional properties, you can create a type-modification in the ext/synthetic.xml file like this:

    <type-modification type="overthere.SshHost">
        <property name="listFilesCommand" hidden="true" default="/bin/ls -a1 {0}" />
        <property name="getFileInfoCommand" hidden="true" default="/bin/ls -ld {0}" />
    </type-modification>
    

    CI Reference

    Configuration Item Overview

    Containers

    CI Description
    overthere.CifsHost Machine that can be connected to using either WinRM or Telnet and can perform file manipulation via the CIFS protocol
    overthere.Host Machine that runs middleware, on which scripts can be executed, etc
    overthere.Jumpstation Base class for jumpstations
    overthere.LocalHost Machine on which the XL Deploy Server is running
    overthere.RemoteHost Description unavailable
    overthere.SshHost Machine that can be connected to using SSH
    overthere.SshJumpstation Machine that can be used to create a tunneled connection to a destination host

    Other Configuration Items

    CI Description
    overthere.CifsHost Machine that can be connected to using either WinRM or Telnet and can perform file manipulation via the CIFS protocol
    overthere.Host Machine that runs middleware, on which scripts can be executed, etc
    overthere.Jumpstation Base class for jumpstations
    overthere.LocalHost Machine on which the XL Deploy Server is running
    overthere.RemoteHost Description unavailable
    overthere.SshHost Machine that can be connected to using SSH
    overthere.SshJumpstation Machine that can be used to create a tunneled connection to a destination host

    Configuration Item Details

    overthere.CifsHost

    Type Hierarchy overthere.RemoteHost >> overthere.Host >> udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Machine that can be connected to using either WinRM or Telnet and can perform file manipulation via the CIFS protocol

    Public Properties
     
     
    address : STRING
    Address of the host
     
     
    connectionType : ENUM [TELNET, WINRM_INTERNAL, WINRM_NATIVE]  = WINRM_INTERNAL
    Type of CIFS connection to create
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]  = WINDOWS
    Operating system the host runs
     
     
    password : STRING
    Password to use for authentication
     
     
    username : STRING
    Username to connect with
     
     
    cifsPort : INTEGER  = 445
    Port on which the CIFS server runs
     
     
    jumpstation : CI<overthere.Jumpstation >
    Jumpstation that should be used to reach this host
     
     
    pathShareMappings : MAP_STRING_STRING
    Mapping from Windows paths to Windows share names, e.g. C:\IBM\WebSphere -> WebSphereShare
     
     
    port : INTEGER
    Port on which the Telnet or WinRM server runs
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
     
     
    temporaryDirectoryPath : STRING
    Directory into which temporary files are stored. Will be cleaned up when the connection is closed.
     
     
    winrmEnableHttps : BOOLEAN  = false
    Enable SSL communication to the WinRM server
     
     
    winrsAllowDelegate : BOOLEAN  = false
    Specifies that the user's credentials can be used to access a remote share, for example, found on a different machine than the target endpoint (WINRM_NATIVE only)
     
     
    winrsProxy : CI<overthere.Host >
    Host on which to run the winrs command. Defaults to localhost. (WINRM_NATIVE only)
    Hidden Properties
     
     
    connectionTimeoutMillis : INTEGER  = 1200000
    Number of milliseconds Overthere waits for a connection to a remote host to be established
     
     
    protocol : STRING  = cifs
    Protocol to use when connecting to this host
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    winrmContext : STRING  = /wsman
    Context used by the WinRM server (WINRM only)
     
     
    winrmEnvelopSize : INTEGER  = 153600
    Envelop size for WinRM messages (WINRM only)
     
     
    winrmHttpsCertificateTrustStrategy : ENUM [STRICT, SELF_SIGNED, ALLOW_ALL]  = STRICT
    HTTPS certifiacte trust strategy for WinRM over HTTPS (WINRM_INTERNAL only)
     
     
    winrmHttpsHostnameVerificationStrategy : ENUM [STRICT, BROWSER_COMPATIBLE, ALLOW_ALL]  = STRICT
    HTTPS host name verification strategy for WinRM over HTTPS (WINRM_INTERNAL only)
     
     
    winrmLocale : STRING  = en-US
    Locale to use for WinRM messages (WINRM only)
     
     
    winrmTimeout : STRING  = PT60.000S
    Timeout to use for WinRM messages in XML schema duration format
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
     
     
    winrmKerberosAddPortToSpn : BOOLEAN  = false
    Add the port number (e.g. 5985) to the service principal name (SPN) for which a Kerberos ticket is requested (WINRM_INTERNAL only)
     
     
    winrmKerberosDebug : BOOLEAN  = false
    Enable Kerberos debug messages (WINRM only)
     
     
    winrmKerberosUseHttpSpn : BOOLEAN  = false
    Use the HTTP protocol in the service principal name (SPN) for which a Kerberos ticket is requested, instead of the default WSMAN protocol (WINRM_INTERNAL only)
     
     
    winrsCompression : BOOLEAN  = false
    Turn on compression. Older installations on remote machines may not support compression so it is off by default (WINRM_NATIVE only)
     
     
    winrsNoecho : BOOLEAN  = false
    Specifies that echo should be disabled. This may be necessary to ensure that user's answers to remote prompts are not displayed locally (WINRM_NATIVE only)
     
     
    winrsNoprofile : BOOLEAN  = false
    Specifies that the user's profile should not be loaded. By default the server will attempt to load the user profile. If the remote user is not a local administrator on the target system then this option will be required (the default willresult in error) (WINRM_NATIVE only)
     
     
    winrsUnencrypted : BOOLEAN  = false
    Disable encryption. Requires the remote host to have been configured to allow that (WINRM_NATIVE only)
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.


    overthere.Host

    Virtual Type
    Type Hierarchy udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Machine that runs middleware, on which scripts can be executed, etc.

    Public Properties
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]
    Operating system the host runs
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
     
     
    temporaryDirectoryPath : STRING
    Directory into which temporary files are stored. Will be cleaned up when the connection is closed.
    Hidden Properties
     
     
    protocol : STRING
    Protocol to use when connecting to this host
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.


    overthere.Jumpstation

    Virtual Type
    Type Hierarchy overthere.RemoteHost >> overthere.Host >> udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Base class for jumpstations

    Public Properties
     
     
    jumpstation : CI<overthere.Jumpstation >
    Jumpstation that should be used to reach this host
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
    Hidden Properties
     
     
    connectionTimeoutMillis : INTEGER  = 1200000
    Number of milliseconds Overthere waits for a connection to a remote host to be established
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]  = UNIX
    Operating system the host runs
     
     
    protocol : STRING
    Protocol to use when connecting to this host
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    temporaryDirectoryPath : STRING
    The default platform value (/tmp) suffices as no temporary files will be placed on the jumpstation
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.


    overthere.LocalHost

    Type Hierarchy overthere.Host >> udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Machine on which the XL Deploy Server is running

    Public Properties
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]
    Operating system the host runs
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
     
     
    temporaryDirectoryPath : STRING
    Directory into which temporary files are stored. Will be cleaned up when the connection is closed.
    Hidden Properties
     
     
    protocol : STRING  = local
    Protocol to use when connecting to this host
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.


    overthere.RemoteHost

    Virtual Type
    Type Hierarchy overthere.Host >> udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Description unavailable

    Public Properties
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]
    Operating system the host runs
     
     
    jumpstation : CI<overthere.Jumpstation >
    Jumpstation that should be used to reach this host
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
     
     
    temporaryDirectoryPath : STRING
    Directory into which temporary files are stored. Will be cleaned up when the connection is closed.
    Hidden Properties
     
     
    connectionTimeoutMillis : INTEGER  = 1200000
    Number of milliseconds Overthere waits for a connection to a remote host to be established
     
     
    protocol : STRING
    Protocol to use when connecting to this host
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.


    overthere.SshHost

    Type Hierarchy overthere.RemoteHost >> overthere.Host >> udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Machine that can be connected to using SSH

    Public Properties
     
     
    address : STRING
    Address of the host
     
     
    connectionType : ENUM [SFTP, SFTP_CYGWIN, SFTP_WINSSHD, SCP, SU, SUDO, INTERACTIVE_SUDO, TUNNEL]  = SFTP
    Type of SSH connection to create
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]
    Operating system the host runs
     
     
    port : INTEGER  = 22
    Port on which the SSH server runs
     
     
    username : STRING
    Username to connect with
     
     
    jumpstation : CI<overthere.Jumpstation >
    Jumpstation that should be used to reach this host
     
     
    passphrase : STRING
    Optional passphrase for the private key in the private key file
     
     
    password : STRING
    Password to use for authentication
     
     
    privateKeyFile : STRING
    Private key file to use for authentication
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    suPassword : STRING
    Password of user to su to when accessing files or executing commands
     
     
    suUsername : STRING
    Username to su to when accessing files or executing commands
     
     
    sudoUsername : STRING
    Username to sudo to when accessing files or executing commands
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
     
     
    temporaryDirectoryPath : STRING
    Directory into which temporary files are stored. Will be cleaned up when the connection is closed.
    Hidden Properties
     
     
    connectionTimeoutMillis : INTEGER  = 1200000
    Number of milliseconds Overthere waits for a connection to a remote host to be established
     
     
    interactiveKeyboardAuthRegex : STRING  = .*Password:[ ]?
    Regular expression to look for in keyboard-interactive authentication before sending the password
     
     
    protocol : STRING  = ssh
    Protocol to use when connecting to this host
     
     
    suCommandPrefix : STRING  = su - {0} -c
    Su command to prefix to the original command. The placeholder {0} is replaced with the sudoUsername
     
     
    suPasswordPromptRegex : STRING  = .*[Pp]assword.*:
    Regular expression to look for before sending the password
     
     
    sudoCommandPrefix : STRING  = sudo -u {0}
    Sudo command to prefix to the original command. The placeholder {0} is replaced with the sudoUsername
     
     
    sudoPasswordPromptRegex : STRING  = .*[Pp]assword.*:
    Regular expression to look for in interactive sudo before sending the password
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    allocateDefaultPty : BOOLEAN  = false
    If true, a default PTY (dummy:80:24:0:0) is allocated when executing a command
     
     
    allocatePty : STRING
    Specification for the PTY to be allocated when executing a command. The format is TERM:COLS:ROWS:WIDTH:HEIGHT, e.g. xterm:80:24:0:0
     
     
    suOverrideUmask : BOOLEAN  = true
    If true, permissions are explicitly changed with chmod -R go+rX after uploading a file or directory
     
     
    suPreserveAttributesOnCopyFromTempFile : BOOLEAN  = true
    If true, files are copied from the connection temporary directory using the -p flag to the cp command
     
     
    suPreserveAttributesOnCopyToTempFile : BOOLEAN  = true
    If true, files are copied to the connection temporary directory using the -p flag to the cp command
     
     
    suQuoteCommand : BOOLEAN  = true
    If true, the original command is quoted when it is prefixed with suCommandPrefix
     
     
    sudoOverrideUmask : BOOLEAN  = true
    If true, permissions are explicitly changed with chmod -R go+rX after uploading a file or directory
     
     
    sudoPreserveAttributesOnCopyFromTempFile : BOOLEAN  = true
    If true, files are copied from the connection temporary directory using the -p flag to the cp command
     
     
    sudoPreserveAttributesOnCopyToTempFile : BOOLEAN  = true
    If true, files are copied to the connection temporary directory using the -p flag to the cp command
     
     
    sudoQuoteCommand : BOOLEAN  = false
    If true, the original command is quoted when it is prefixed with sudoCommandPrefix
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.


    overthere.SshJumpstation

    Type Hierarchy overthere.Jumpstation >> overthere.RemoteHost >> overthere.Host >> udm.BaseContainer >> udm.BaseConfigurationItem
    Interfaces udm.Taggable, udm.ConfigurationItem, udm.Container, overthere.HostContainer

    Machine that can be used to create a tunneled connection to a destination host

    Public Properties
     
     
    address : STRING
    Address of the host
     
     
    port : INTEGER  = 22
    Port on which the SSH server runs
     
     
    username : STRING
    Username to connect with
     
     
    jumpstation : CI<overthere.Jumpstation >
    Jumpstation that should be used to reach this host
     
     
    passphrase : STRING
    Optional passphrase for the private key in the private key file
     
     
    password : STRING
    Password to use for authentication
     
     
    privateKeyFile : STRING
    Private key file to use for authentication
     
     
    stagingDirectoryPath : STRING
    Directory into which staged files are stored. Will be cleaned up when the task is finished.
     
     
    tags : SET_OF_STRING
    If set, only deployables with the same tag will be automatically mapped to this container.
    Hidden Properties
     
     
    connectionTimeoutMillis : INTEGER  = 1200000
    Number of milliseconds Overthere waits for a connection to a remote host to be established
     
     
    connectionType : ENUM [SFTP, SFTP_CYGWIN, SFTP_WINSSHD, SCP, SU, SUDO, INTERACTIVE_SUDO, TUNNEL]  = TUNNEL
    Connection Type
     
     
    interactiveKeyboardAuthRegex : STRING  = .*Password:[ ]?
    Regular expression to look for in keyboard-interactive authentication before sending the password
     
     
    os : ENUM [WINDOWS, UNIX, ZOS]  = UNIX
    Operating system the host runs
     
     
    portAllocationRangeStart : INTEGER  = 1025
    Port from where to start looking for freely available ports to use as the local part of an SSH port forward
     
     
    protocol : STRING  = ssh
    Protocol to use when connecting to this host
     
     
    tmpFileCreationRetries : INTEGER  = 1000
    Number of times Overthere attempts to create a temporary file with a unique name
     
     
    temporaryDirectoryPath : STRING
    The default platform value (/tmp) suffices as no temporary files will be placed on the jumpstation
     
     
    tmpDeleteOnDisconnect : BOOLEAN  = true
    If true, delete the temporary connection directory when the connection is closed
    Control task Parameter CI Attributes Description
    checkConnection

    Checks whether XL Deploy can transfer files to and execute commands on this host.