type=page
status=published
title=Enabling Centralized Administration of {productName} Instances
next=nodes.html
prev=overview.html
~~~~~~

= Enabling Centralized Administration of {productName} Instances

[[GSHAG00003]][[gkshg]]


[[enabling-centralized-administration-of-glassfish-server-instances]]
== 2 Enabling Centralized Administration of {productName} Instances

{productName} uses the Distributed Component Object Model (DCOM)
remote protocol or secure shell (SSH) to ensure that clusters that span
multiple hosts can be administered centrally. To perform administrative
operations on {productName} instances that are remote from the domain
administration server (DAS), the DAS must be able to communicate with
those instances. If an instance is running, the DAS connects to the
running instance directly. For example, when you deploy an application
to an instance, the DAS connects to the instance and deploys the
application to the instance.

However, the DAS cannot connect to an instance to perform operations on
an instance that is not running, such as creating or starting the
instance. For these operations, the DAS uses DCOM or SSH to contact a
remote host and administer instances there. DCOM or SSH provides
confidentiality and security for data that is exchanged between the DAS
and remote hosts.


[NOTE]
====
The use of DCOM or SSH to enable centralized administration of remote
instances is optional. If the use of DCOM or SSH is not feasible in your
environment, you can administer remote instances locally.
====


The following topics are addressed here:

* link:#gkshz[About Centralized Administration of {productName} Instances]
* link:#CEGIFJJF[Setting Up DCOM and Testing the DCOM Set Up]
* link:#gksiy[Setting Up Cygwin SSH on Windows]
* link:#gkskf[Setting Up the MKS Toolkit on Windows]
* link:#gksja[Setting Up SSH on UNIX and Linux Systems]
* link:#gkslw[Testing the SSH Setup on a Host]
* link:#gkshh[Setting Up SSH User Authentication]
* link:#gkshn[Installing and Removing {productName} Software on Multiple Hosts]

[[gkshz]][[GSHAG00172]][[about-centralized-administration-of-glassfish-server-instances]]

=== About Centralized Administration of {productName} Instances

The use of DCOM or SSH to enable centralized administration of remote
instances is optional and is required only for specific operations.
Instances local to the DAS can be administered without DCOM or SSH. If
DCOM or SSH is not practicable in your environment, you can administer
remote instances locally.

[[GSHAG446]][[sthref4]]


[[determining-whether-to-enable-centralized-administration]]
==== Determining Whether to Enable Centralized Administration

Before setting up a {productName} cluster, use the following
considerations to determine whether to enable centralized administration
of remote instances:

* If you are planning a large cluster of many instances, consider
enabling centralized administration of instances in the cluster.
Centralized administration of instances simplifies the administration of
the cluster by enabling you to perform all administrative operations on
the cluster and its instances from the DAS.
* If you are planning a small cluster of few instances, consider whether
enabling centralized administration requires more effort than logging in
to individual hosts to administer remote instances locally.

How you administer instances and the nodes on which they resides varies
depending on whether and how centralized administration is enabled. The
following table provides cross-references to instructions for
administering nodes and instances depending on the protocol that is used
for enabling centralized administration, if any.

[width="100%",cols="<15%,<42%,<43%",options="header",]
|===
|Protocol |Node Administration Instructions |Instance Administration Instructions

|DCOM
|link:nodes.html#CHDBIHFJ[Creating, Listing, Testing, and Deleting `DCOM` Nodes]
|link:instances.html#gkqal[Administering {productName} Instances Centrally]

|SSH
|link:nodes.html#gkrkn[Creating, Listing, Testing, and Deleting `SSH` Nodes]
|link:instances.html#gkqal[Administering {productName} Instances Centrally]

|None
|link:nodes.html#gkrnp[Creating, Listing, and Deleting `CONFIG` Nodes]
|link:instances.html#gkqdw[Administering {productName} Instances Locally]
|===


[[GSHAG447]][[sthref5]]


[[considerations-for-using-dcom-for-centralized-administration]]
==== Considerations for Using DCOM for Centralized Administration

DCOM enables communications between Windows hosts. In a typical
{productName} deployment, the DAS acts as a DCOM client, and hosts
where instances reside act as DCOM servers. To create or start an
instance on a remote host, the DAS instructs the DCOM server on the host
to start the `asadmin` utility of {productName}. The `asadmin`
utility then performs the required operation on the host to create or
start the instance.

The DCOM service must be running on hosts where instances reside, but is
not required to be running on the DAS host. The DAS uses its own DCOM
client for communicating with hosts where instances reside. On Windows
hosts, the DCOM server is typically running by default as a Windows Service.

DCOM is available only with the Windows operating system. Because DCOM
is typically installed and preconfigured, minimal additional setup is
required to use DCOM with {productName}.

Before setting up DCOM, decide which Windows user {productName} will
use when connecting to remote hosts. For the following reasons,
administration is simplest if the Windows user is the user that starts the DAS:

* Remote instances are started as the Windows user.
* By default, the DAS assumes that the Windows user is the user that is running the DAS.

[[GSHAG320]][[sthref6]]


[[considerations-for-using-ssh-for-centralized-administration]]
==== Considerations for Using SSH for Centralized Administration

In a typical {productName} deployment, the DAS acts as the SSH
client, and hosts where instances reside act as SSH servers. The SSH
Server Daemon `sshd` must be running on hosts where instances reside,
but is not required to be running on the DAS host. The DAS uses its own
SSH client for communicating with hosts where instances reside. However,
to generate keys and test SSH setup, a native SSH client must be
installed on the DAS host.

The requirements for SSH configuration and user management are different
for each operating system on which {productName} is supported.
Therefore, the use of SSH for centralized administration involves using
SSH tools to configure SSH on the operating system that you are using.

On UNIX and Linux systems, SSH is typically installed and preconfigured,
and requires minimal additional setup. On Windows systems, additional
setup is required to install and configure an SSH provider.

[[gksmt]][[GSHAG00262]][[obtaining-ssh-software]]

===== Obtaining SSH Software

On UNIX and Linux systems, SSH software is typically installed as part
of the base operating system.

However, on Windows systems, you must install one of the following SSH providers:

* http://www.cygwin.com/[Cygwin] (`http://www.cygwin.com/`) release 1.7.6
* http://www.mkssoftware.com[MKS Toolkit for Developers]
 (`http://www.mkssoftware.com`) release 9.2

[[gkshj]][[GSHAG00263]][[determining-the-ssh-user]]

===== Determining the SSH User

Before setting up SSH, decide which SSH user {productName} will use
when connecting to remote hosts. For the following reasons,
administration is simplest if the SSH user is the user that starts the
DAS:

* For public key authentication, the user that starts the DAS must be
able to read the SSH user's private key file.
* Remote instances are started as the SSH user.
* By default, the DAS assumes that the SSH user is the user that is
running the DAS.

[[glghe]][[GSHAG00222]][[requirements-for-the-ssh-users-environment]]

===== Requirements for the SSH User's Environment

The environment of the SSH user on any remote host to which the user
will connect must meet the requirements that are stated in
"link:release-notes/release-notes.html#GSRLN00252[Paths and Environment Settings for the JDK Software]"
in {productName} Release Notes.

The SSH user's environment on a host is set by the environment set-up
files that are run when the user uses SSH to run a command on the host.
You must ensure that these files set up the SSH user's environment
correctly.

The files that are run when the user uses SSH to run a command are
different than the files that are run when the user logs in to a host.
For example, in the bash shell, `.profile` and `.bashrc` are run when
the user logs in, but only `.bashrc` is run when the user runs a
command. Therefore, in the bash shell, you must ensure that `.bashrc`
contains the required environment settings for the SSH user.

[[glgfy]][[GSHAG00223]][[file-access-permissions-on-uac-enabled-windows-systems]]

===== File Access Permissions on UAC-Enabled Windows Systems


[NOTE]
====
The http://technet.microsoft.com/en-us/library/cc709691%28WS.10%29.aspx[User
Account Control (UAC)](`http://technet.microsoft.com/en-us/library/cc709691%28WS.10%29.aspx`)
feature is available only on some versions of the Windows operating
system, for example, Windows 7, Windows Vista, and Windows 2008.
====


You might be using a UAC-enabled Windows system and choose to store
files for {productName} instances in a directory other than the SSH
user's home directory. In this situation, the SSH user must have native
(that is, nonvirtual) read and write access to the file system where the
instances are to be stored. The OS-level administrator has such access
by default. You can also configure the system to grant such access to
other users. For more information, see the documentation for the Windows
operating system.

[[CEGIFJJF]][[GSHAG448]][[setting-up-dcom-and-testing-the-dcom-set-up]]

=== Setting Up DCOM and Testing the DCOM Set Up

Setting up DCOM on a host involves the following tasks:

* Verifying Windows operating system settings for the host
* Enabling the Windows user to run scripts on the host
* Setting up password authentication for the Windows user on the host

Set up DCOM on all hosts where instances in your cluster will reside.

After setting up DCOM on a host, test the connection over DCOM to the
host.

[[CEGDAFHD]][[GSHAG449]][[windows-operating-system-settings]]

==== Windows Operating System Settings

To enable access to a host over DCOM, ensure that the following items in
the Windows operating system are set as follows on the host:

* The following services are in the started state and are set to start automatically:

** Server
** Remote Registry

* Network Access: Sharing security model for local accounts is set to Classic.
* The following ports are open:

** DCOM port 135 or 139
** Windows Shares port 445

[[CEGCJGCF]][[GSHAG450]][[to-enable-the-windows-user-to-run-scripts-on-a-remote-host]]

==== To Enable the Windows User to Run Scripts on a Remote Host

To run scripts on a remote host, full control over the following Windows
registry keys must be allowed for the Windows user or the group that
contains the Windows user:

* One of the following keys, depending on the processor architecture of the host:

** 32-bit architecture: +
   HKEY_LOCAl_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\\{76A64158-CB41-11D1-8B02-00600806D9B6}
** 64-bit architecture: +
   HKEY_LOCAl_MACHINE\SOFTWARE\Classes\CLSID\\{76A64158-CB41-11D1-8B02-00600806D9B6}

* HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\\{72C24DD5-D70A-438B-8A42-98424B88AFB8}

In some versions of Windows, only the user `NT SERVICE\TrustedInstaller`
has full control over these Windows registry keys. If your version of
Windows is configured in this way, you must modify these keys to allow
full control over them for the Windows user or the group that contains
the Windows user.


[NOTE]
====
Only the operating-system-level administrator user can edit the Windows registry.
====


Perform this procedure for each Windows registry key that you are
modifying on each host where instances in your cluster will reside.

1. If necessary, start the Registry Editor.
+
[source]
----
regedit.exe
----
The Registry Editor window opens.

2. In the Registry Editor window, navigate to the registry key that you are modifying.

3. Select the key, click mouse button 3, and from the pop-up menu that
opens, select Permissions.
+
The Permissions window for the key opens.

4. Determine whether full control is allowed for the Windows user or
the group that contains the Windows user.
* If full control is allowed, no further action is required.
* If full control is not allowed, allow full control as follows:
[arabic]
.. In the Permissions window, click Advanced. +
The Advanced Security Settings window for the key opens.
.. In the Advanced Security Settings window, select the Owner tab.
.. From the Change owner to list, select the Windows user or the group
that contains the Windows user.
.. Ensure that the Replace owner on subcontainer and objects option is selected.
.. Click Apply, then OK. +
The Advanced Security Settings window closes. The Permissions window
shows that full control is allowed for the Windows user or the group
that contains the Windows user.

.. In the Permissions window, click OK. The Permissions window closes.

5. After modifying all the Windows registry keys over which full
control is required, quit the Registry Editor.

[[GSHAG451]]

Next Steps

Set up password authentication for the Windows user as explained in
link:#CEGCDCEF[To Set Up Password Authentication for the Windows User].

[[CEGCDCEF]][[GSHAG452]][[to-set-up-password-authentication-for-the-windows-user]]

==== To Set Up Password Authentication for the Windows User

When a {productName} subcommand uses DCOM to log in to a remote host,
{productName} requires the Windows user's password to authenticate
the Windows user. To provide this password securely to {productName},
create a {productName} password alias to represent the password and
store this alias in a password file that is passed to the
link:reference-manual/asadmin.html#GSRFM00263[`asadmin`] utility.

[[GSHAG453]]

Before You Begin

Ensure that the following prerequisites are met:

* The Windows user is a valid user on the host to which you are testing
the connection over DCOM.
* Items in the Windows operating system are set on the host as described
in link:#CEGDAFHD[Windows Operating System Settings].
* The Windows user is able to run scripts on the host. For more
information, see link:#CEGCJGCF[To Enable the Windows User to Run
Scripts on a Remote Host].

1. Ensure that the DAS is running. +
Remote subcommands require a running server.

2. [[CEGGAHFH]]
Create an alias for the Windows user's password.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for creating a password
alias, see the link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`(1)] help page.
====
+
[source]
----
asadmin> create-password-alias alias-name
----
+
alias-name::
  Your choice of name for the alias that you are creating.
+
The `create-password-alias` subcommand prompts you to type the password
for which you are creating an alias.

3. In response to the prompt, type the Windows user's password. +
The `create-password-alias` subcommand prompts you to type the password again.

4. In response to the prompt, type the Windows user's password again.

5. Create a plain text file that contains the following entry for the
password alias:
+
[source]
----
AS_ADMIN_WINDOWSPASSWORD=${ALIAS=alias-name}
----
alias-name::
  The alias name that you specified in Step link:#CEGGAHFH[2].
+

[NOTE]
====
When you create a `DCOM` node, pass this file as the `--passwordfile`
option of the `asadmin` utility. For more information, see
link:nodes.html#CHDIGBJB[To Create a `DCOM` Node].
====


[[GSHAG454]][[sthref7]]
Example 2-1 Creating an Alias for the Windows User's Password

This example creates an alias that is named `winuser-password` for the
Windows user's password.

[source]
----
$ asadmin create-password-alias winuser-password
Enter the alias password>
Enter the alias password again>
Command create-password-alias executed successfully.
----

The entry in the password file for the `winuser-password` alias is as
follows:

[source]
----
AS_ADMIN_WINDOWSPASSWORD=${ALIAS=winuser-password}
----

[[GSHAG455]]

See Also

* link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)]
* link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-password-alias` at the command line.

[[GSHAG456]]

Next Steps

Test the DCOM setup as explained in link:#CEGJFADH[To Test the
Connection Over DCOM to a Remote Host].

[[CEGJFADH]][[GSHAG457]][[to-test-the-connection-over-dcom-to-a-remote-host]]

==== To Test the Connection Over DCOM to a Remote Host

Testing the connection over DCOM to a remote host verifies that the
required Windows services are running, the required ports are open, and
the Windows user has a valid user account on the host.

Before attempting to perform any task that the requires the DAS contact
the DCOM server on a remote host, test the connection over DCOM to the
host. If this test fails, any attempt to perform a task that the
requires the DAS contact the DCOM server on the host will also fail.
Examples of such tasks are creating a DCOM node to represent the host or
creating an instance that resides on the host. For more information, see
link:nodes.html#CHDIGBJB[To Create a `DCOM` Node] and
link:instances.html#gkqch[To Create an Instance Centrally].

If you cannot connect to the host over DCOM, troubleshoot the DCOM setup
before proceeding.

[[GSHAG458]]

Before You Begin

Ensure that the following prerequisites are met:

* The Windows user is a valid user on the host to which you are testing
the connection over DCOM.
* Items in the Windows operating system are set on the host as described
in link:#CEGDAFHD[Windows Operating System Settings].
* The Windows user is able to run scripts on the host. For more
information, see link:#CEGCJGCF[To Enable the Windows User to Run
Scripts on a Remote Host].
* Password authentication is set up for the windows user as explained in
link:#CEGCDCEF[To Set Up Password Authentication for the Windows User].

1. Ensure that the DAS is running. +
Remote subcommands require a running server.

2. Run the `validate-dcom` subcommand. +
Specify the file that contains the alias for the Windows user's password
through the `--passwordfile` option of the `asadmin` utility. For more
information about this file, see link:#CEGCDCEF[To Set Up Password
Authentication for the Windows User].

[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for configuring the
node, see the link:reference-manual/validate-dcom.html#GSRFM796[`validate-dcom`(1)] help page.
====

[source]
----
C:\>asadmin --passwordfile filename validate-dcom host-name
----
filname::
  The name of the file that contains the alias for the Windows user's
  password.
host-name::
  The name of the host to which you are testing the connection over
  DCOM.

[[GSHAG459]][[sthref8]]
Example 2-2 Testing the Connection Over DCOM to a Remote Host

This example tests the connection over DCOM to the host `wpmdl2`.

[source]
----
C:\> asadmin --passwordfile aspwalias.txt validate-dcom wpmdl2
Command validate-dcom executed successfully.
----

[[GSHAG460]]

See Also

* link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)]
* link:reference-manual/validate-dcom.html#GSRFM796[`validate-dcom`(1)]
* link:#CEGDAFHD[Windows Operating System Settings]
* link:#CEGCJGCF[To Enable the Windows User to Run Scripts on a Remote Host]
* link:nodes.html#CHDIGBJB[To Create a `DCOM` Node]
* link:instances.html#gkqch[To Create an Instance Centrally]

You can also view the full syntax and options of the subcommand by
typing `asadmin help validate-dcom` at the command line.

[[gksiy]][[GSHAG00173]][[setting-up-cygwin-ssh-on-windows]]

=== Setting Up Cygwin SSH on Windows

Set up Cygwin SSH on the DAS host and on all hosts where instances in
your cluster will reside.

The following topics are addressed here:

* link:#gksjn[To Download and Install Cygwin]
* link:#gksin[To Set the Path for Windows and for the Cygwin Shell]
* link:#gksov[To Set the Home Directory for the Cygwin SSH User]
* link:#gkskx[To Configure and Start the Cygwin SSH Server Daemon
`sshd`]

[[gksjn]][[GSHAG00071]][[to-download-and-install-cygwin]]

==== To Download and Install Cygwin

For centralized {productName} administration, a basic Cygwin
installation that includes the SSH client and the SSH server daemon
`sshd` is sufficient. The default installation options are sufficient to
create such a basic installation.

1. Log in as a user with Administrator privileges.

2. Create the folder `C:\cygwin`.

3. From the http://www.cygwin.com/[Cygwin home page]
(`http://www.cygwin.com/`), download and save the `setup.exe` file to your desktop.

4. Run the `setup.exe` file.

5. Select the default for the following options:
* Install from Internet
* Install Root Directory: `C:\cygwin`
* Install for All Users

6. Specify a folder for the local package directory that is not the
Cygwin root folder, for example, `C:\cygwin\packages`.

7. Specify the connection method. +
For example, if the host is connected to the Internet through a proxy
server, specify the proxy server.

8. Select the mirror site from which to download the software.

9. Select the `openssh` package for installation.
[arabic]
.. Under the Net category, search for `openssh`.
.. Locate the `openssh` package and click Skip. +
The package is selected.
.. Click Next. +
Any unsatisfied dependencies are listed.

10. Leave the Select Required Packages option selected and click Next +
The packages are installed.

11. Click Finish.

[[GSHAG321]]

See Also

For detailed information about installing Cygwin, see
"http://cygwin.com/cygwin-ug-net/setup-net.html#internet-setup[Internet
Setup]" in Cygwin User's Guide
(`http://cygwin.com/cygwin-ug-net/setup-net.html#internet-setup`).

[[gksin]][[GSHAG00072]][[to-set-the-path-for-windows-and-for-the-cygwin-shell]]

==== To Set the Path for Windows and for the Cygwin Shell

To enable {productName} tools to find commands for SSH, each user's
path for Windows and for the Cygwin shell must contain the following directories:
--
* The Cygwin `bin` directory, for example `C:\cygwin\bin`
* The `bin` directory of the JDK software
--

1. Log in as a user with Administrator privileges.
Logging in as a user with Administrator privileges ensures that the
change applies to all users.

2. In the System Information control panel, click Advanced>Environment Variables.

3. Add the following directories to the Path environment variable:

* The Cygwin `bin` directory, for example `C:\cygwin\bin`
* The `bin` directory of the JDK software

[[gksov]][[GSHAG00073]][[to-set-the-home-directory-for-the-cygwin-ssh-user]]

==== To Set the Home Directory for the Cygwin SSH User

The SSH Server Daemon `sshd` locates a user's home directory from the
configuration in the user database, not from environment variables such
as `HOME`. To ensure that all {productName} commands can run without
errors, each SSH user must be configured to have a home directory.

Each user on a Windows host where SSH is set up potentially has two home
directories:

* Windows home directory. {productName} commands, which are run in a
Windows command window, use the Windows home directory.
* SSH home directory. SSH commands, which are run in a shell such as
`bash` or `ksh`, use the SSH home directory.

If these home directories are different, {productName} and SSH each
locate a user's `.ssh` directory in different directories. To simplify
the set up of SSH, configure each user's home directory for SSH and
Windows to be the same directory. A disadvantage of this approach is
that the SSH home directory has spaces in its path name. Spaces in path
names are cumbersome in the UNIX environment.

1. Log in as a user with Administrator privileges.
2. In the `c:\cygwin\etc\passwd` file, edit the home directory setting
for the SSH user to specify the user's home directory for Windows.

[[gkskx]][[GSHAG00074]][[to-configure-and-start-the-cygwin-ssh-server-daemon-sshd]]

==== To Configure and Start the Cygwin SSH Server Daemon `sshd`

[[GSHAG322]]

Before You Begin

Ensure that the following prerequisites are met:

* A user account is created for each user that will log in to the host through SSH.
* A password is set for each user account.

The SSH server daemon `sshd` disallows authentication of any user for
whose account a password is not set.

1. Double-click the Cygwin icon. A Cygwin terminal is started.

2. If necessary, set the password for your user account.
[arabic]
.. Run the `passwd` command as follows:
+
[source]
----
$ passwd user-name
----
user-name::
  The user name for your account.
.. Type a password. The password for your Windows account is also set.

3. Configure SSH on the host.
[arabic]
.. Run the `ssh-host-config` command.
+
[source]
----
$ ssh-host-config
----
+
[TIP]
====
If you are using Windows XP, specify the `-y` option of
`ssh-host-config` to answer `yes` to all prompts. If you run
`ssh-host-config` with the `-y` option, omit Step link:#gkuat[b].
====
+
.. [[gkuat]]
Ensure that the `StrictModes` and `PubkeyAuthentication` options are set
to `yes` in the file `/etc/ssh_config`. +
The file `/etc/ssh_config` can also be accessed as `/cygdrive/c/cygwin/etc/sshd_config`.

4. Start the SSH server daemon `sshd`.
+
[source]
----
$ net start sshd
----
5. Confirm that the SSH server daemon `sshd` is running.
+
[source]
----
$ cygrunsrv --query sshd
 Service             : sshd
 Display name        : CYGWIN sshd
 Current State       : Running
 Controls Accepted   : Stop
 Command             : /usr/sbin/sshd -D
----

[[GSHAG323]]

Next Steps

After you have completed the setup of SSH on a host, test the setup on
the host as explained in link:#gkslw[Testing the SSH Setup on a Host].

[[gkskf]][[GSHAG00174]][[setting-up-the-mks-toolkit-on-windows]]

=== Setting Up the MKS Toolkit on Windows

Set up the MKS Toolkit on the DAS host and on all hosts where instances
in your cluster will reside.

The following topics are addressed here:

* link:#gksmq[To Install the MKS Toolkit]
* link:#gksmu[To Set the Path for Windows and for the MKS Toolkit Shell]
* link:#gksox[To Set the Home Directory for the MKS Toolkit SSH User]
* link:#gksnx[To Configure and Start the MKS Toolkit SSH Server Daemon
`sshd`]

[[gksmq]][[GSHAG00075]][[to-install-the-mks-toolkit]]

==== To Install the MKS Toolkit

For centralized {productName} administration, the default
installation of the MKS Toolkit is sufficient.

Follow the instructions in the MKS Toolkit product documentation to
install OpenSSH from the MKS Toolkit with default installation options.

[[GSHAG324]]

See Also

For detailed information about installing MKS Toolkit, see
"http://www.mkssoftware.com/docs/rn/relnotes_tk94.asp#install[Installing
MKS Toolkit]" in MKS Toolkit v9.4 Release Notes
(`http://www.mkssoftware.com/docs/rn/relnotes_tk94.asp#install`).

[[gksmu]][[GSHAG00076]][[to-set-the-path-for-windows-and-for-the-mks-toolkit-shell]]

==== To Set the Path for Windows and for the MKS Toolkit Shell

To enable {productName} tools to find commands for SSH, each user's
path for Windows and for the MKS Toolkit shell must contain the
following directories:

* The MKS Toolkit `bin` directory, for example
`C:\Program Files\MKS Toolkit\mksnt`
* The `bin` directory of the JDK software

The MKS Toolkit installer automatically adds the MKS Toolkit `bin`
directory to the path. However, you must add the `bin` directory of the
JDK software to the path yourself.

1. Log in as a user with Administrator privileges.
+
Logging in as a user with Administrator privileges ensures that the
change applies to all users.
2. In the System Information control panel, click Advanced>Environment
Variables.
3. Add the `bin` directory of the JDK software to the Path environment
variable.

[[gksox]][[GSHAG00077]][[to-set-the-home-directory-for-the-mks-toolkit-ssh-user]]

==== To Set the Home Directory for the MKS Toolkit SSH User

The SSH Server Daemon `sshd` locates a user's home directory from the
configuration in the user database, not from environment variables such
as `HOME`. To ensure that all {productName} commands can run without
errors, each SSH user must be configured to have a home directory.

Each user on a Windows host where SSH is set up potentially has two home
directories:

* Windows home directory. {productName} commands, which are run in a
Windows command window, use the Windows home directory.
* SSH home directory. SSH commands, which are run in a shell such as
`bash` or `ksh`, use the SSH home directory.

If these home directories are different, {productName} and SSH each
locate a user's `.ssh` directory in different directories. To simplify
the set up of SSH, configure each user's home directory for SSH and
Windows to be the same directory. A disadvantage of this approach is
that the SSH home directory has spaces in its path name. Spaces in path
names are cumbersome in the UNIX environment.

1. [[gkslo]]
Compare the pairs of settings for Windows and the MKS Toolkit that are
listed in the following table.
+
[width="100%",cols="<50%,<50%",options="header",]
|===
|Windows Environment Variable |MKS Toolkit Field
|`HOMEPATH` |Home Directory
|`HOMEDRIVE` |Home Directory Drive
|===
[arabic]
.. In a Windows command window, determine the values of the `HOMEPATH`
and `HOMEDRIVE` environment variables.
.. In an MKS Toolkit shell, determine the current settings of the Home
Directory and Home Directory Drive fields for the user.
+
[source]
----
$ userinfo user-name
----
user-name::
  The user name for the user whose home directory you are setting, for
  example `Administrator`.

+
2. If the settings do not match, update setting of each MKS Toolkit
field to match its corresponding Windows environment variable. +
If the settings match, no further action is required. +
To update the settings, run the following command in an MKS Toolkit shell:
+
[source]
----
$ userinfo -u -fHomeDirDrive:"drive" -fHomeDir:"path" user-name
----
drive::
  The drive identifier of the disk drive on which the user's Windows
  home directory resides, for example, `C:`.
path::
  The path to the user's Windows home directory, for example,
  `\Documents and Settings\Administrator`.
user-name::
  The user name for the user whose home directory you are setting, for
  example `Administrator`.
+
[NOTE]
====
Do not set the `HOME` environment variable explicitly. If Home Directory
and Home Directory Drive are set correctly, the `HOME` environment
variable specifies the correct path by default.
====

3. In an MKS Toolkit shell, confirm that the settings were updated.
+
[source]
----
$ userinfo user-name
----
user-name::
  The user name for the user whose home directory you are setting, for
  example `Administrator`.

4. Log out of the host and log in to the host again.

5. Confirm that the home directories are the same as explained in
Step link:#gkslo[1].

[[GSHAG00014]][[gksnj]]
Example 2-3 Setting the Home Directory for the MKS Toolkit User

This example sets the home directory for the MKS Toolkit user
`Administrator` to `C:\Documents and Settings\Administrator`.

[source]
----
$ userinfo -u -fHomeDirDrive:"C:"
-fHomeDir:"\Documents and Settings\Administrator" Administrator
----

[[gksnx]][[GSHAG00078]][[to-configure-and-start-the-mks-toolkit-ssh-server-daemon-sshd]]

==== To Configure and Start the MKS Toolkit SSH Server Daemon `sshd`


[NOTE]
====
Do not set the command shell to `cmd.exe`. The use of SSH for
centralized {productName} administration requires a shell in the
style of a UNIX shell.
====


1. From the Programs menu, choose MKS Toolkit>Configuration>Configuration Information.

2. Enable password authentication and strict modes.
[arabic]
.. Click the Secure Shell Service tab.
.. Select the Password Authentication option.
.. Click Advanced settings.
.. Click the Login tab.
.. Deselect the Strict Modes option.

3. If you are using SSH key-file authentication, enable `MKSAUTH` password authentication.
[arabic]
.. Click the Authentication tab.
.. Under Enable/Disable Password using MKSAUTH, type the user's password and click the Enable.

4. Start the SSH server daemon `sshd`.

5. Confirm that the SSH server daemon `sshd` is running.
+
[source]
----
$ service query MKSSecureSH
Name:           MKS Secure Shell Service
Service Type:   WIN32_OWN_PROCESS
Current State:  RUNNING
Controls Accepted:      ACCEPT_STOP
Check Point:    0
Wait Hint:      0
Start Type:     AUTO_START
Error Control:  IGNORE
Path:           "C:\Program Files\MKS Toolkit\bin\secshd.exe"
Dependency:     NuTCRACKERService
Dependency:     tcpip
Service Start Name:     LocalSystem
----

[[GSHAG325]]

Next Steps

After you have completed the setup of SSH on a host, test the setup on
the host as explained in link:#gkslw[Testing the SSH Setup on a Host].

[[gksja]][[GSHAG00175]][[setting-up-ssh-on-unix-and-linux-systems]]

=== Setting Up SSH on UNIX and Linux Systems

Setting up SSH on UNIX and Linux systems involves verifying that the SSH
server daemon `sshd` is running and, if necessary, starting this daemon.
Set up SSH on the DAS host and on all hosts where instances in your
cluster will reside.

On UNIX and Linux systems, SSH software is typically installed as part
of the base operating system. If SSH is not installed, download and
install the appropriate http://www.openssh.com/[OpenSSH]
(`http://www.openssh.com/`) SSH package for your operating system.

How to set up SSH on UNIX and Linux systems depends on the flavor of the
operating system that you are running, as explained in the following
sections:

* link:#gksjx[To Set Up SSH on Oracle Solaris Systems]
* link:#gkspz[To Set Up SSH on MacOS Systems]
* link:#gksrd[To Set Up SSH on Linux systems]

[[gksjx]][[GSHAG00079]][[to-set-up-ssh-on-oracle-solaris-systems]]

==== To Set Up SSH on Oracle Solaris Systems

1. Ensure that the following options in the configuration file
`/etc/ssh/sshd_config` are set to `yes`:
* `StrictModes`
* `PubkeyAuthentication`
2. Determine if the SSH server daemon `sshd` is running.
+
[source]
----
$ /usr/bin/svcs ssh
----
3. If the SSH server daemon `sshd` is not running, start this daemon.
+
If the daemon is running, no further action is required.
+
[source]
----
$ /usr/sbin/svcadm enable ssh
----

[[GSHAG00015]][[gkspo]]
Example 2-4 Determining if the `sshd` Daemon Is Running on an Oracle
Solaris System

This example confirms that the SSH server daemon `sshd` is running on an
Oracle Solaris system.

[source]
----
$ /usr/bin/svcs ssh
STATE          STIME    FMRI
online         Jul_06   svc:/network/ssh:default
----

[[GSHAG326]]

See Also

http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN1svcs-1[`svcs`(1)]

[[GSHAG327]]

Next Steps

After you have completed the setup of SSH on a host, test the setup on
the host as explained in link:#gkslw[Testing the SSH Setup on a Host].

[[gkspz]][[GSHAG00080]][[to-set-up-ssh-on-macos-systems]]

==== To Set Up SSH on MacOS Systems

1. Open System Preferences and click Sharing. +
The Sharing window opens.

2. Ensure that Remote Login is selected in the Service list.

3. Ensure that either of the following is allowed access:

* All Users
* The user that running the DAS or instance

4. (MacOS 10.6 systems only) Ensure that the SSH server daemon `sshd`
allows password authentication. +
On MacOS 10.5 systems, the SSH server daemon `sshd` allows password
authentication by default. However, on MacOS 10.6 systems, the SSH
server daemon `sshd` disallows password authentication by default.
[arabic]
.. Edit the configuration file `/etc/sshd_config` to set the `PasswordAuthentication` option to `yes`.
.. Stop the SSH server daemon `sshd`.
+
[source]
----
$ sudo launchctl stop com.openssh.sshd
----
.. Start the SSH server daemon `sshd`.
+
[source]
----
$ sudo launchctl start com.openssh.sshd
----

[[GSHAG328]]

Next Steps

After you have completed the setup of SSH on a host, test the setup on
the host as explained in link:#gkslw[Testing the SSH Setup on a Host].

[[gksrd]][[GSHAG00081]][[to-set-up-ssh-on-linux-systems]]

==== To Set Up SSH on Linux systems

1. Ensure that the following options in the configuration file
`/etc/ssh/sshd_config` are set to `yes`:
* `StrictModes`
* `PubkeyAuthentication`
2. Determine if the SSH server daemon `sshd` is running.
+
[source]
----
$ /sbin/service sshd status
----
3. If the SSH server daemon `sshd` is not running, start this daemon.
+
If the daemon is running, no further action is required.
+
[source]
----
$ /sbin/service sshd start
----

[[GSHAG00016]][[gkssf]]
Example 2-5 Determining if the `sshd` Daemon Is Running on a Linux
System

This example confirms that the SSH server daemon `sshd` is running on a
Linux system.

[source]
----
$ /sbin/service sshd status
openssh-daemon (pid  2373) is running...
----

[[GSHAG329]]

Next Steps

After you have completed the setup of SSH on a host, test the setup on
the host as explained in link:#gkslw[Testing the SSH Setup on a Host].

[[gkslw]][[GSHAG00176]][[testing-the-ssh-setup-on-a-host]]

=== Testing the SSH Setup on a Host

After setting up SSH on a host, test the setup to ensure that you can
use SSH to contact the host from another host. Testing the SSH setup on
a host verifies that the SSH server daemon `sshd` is running and that
the SSH user has a valid user account on the host.

If you cannot use SSH to contact the host, troubleshoot the SSH setup
before setting up SSH user authentication.

[[gkskk]][[GSHAG00082]][[to-test-the-ssh-setup-on-a-host]]

==== To Test the SSH Setup on a Host

1. From another host, use SSH to log in into the host that you are
testing as the SSH user.
+
[source]
----
$ ssh -l user-name host-name
----
user-name::
  The user name for the SSH user's account on the host.
host-name::
  The host name of the host that you are logging in to.
2. In response to the prompt, type your password.
+
If this step succeeds, your setup of SSH is complete.
+
The first time that you connect to a host, you might be warned that the
authenticity cannot be established and be asked if you want to continue
connection. If you trust the host, answer `yes` to connect to the host.

[[GSHAG330]]

Troubleshooting

To obtain diagnostic information, use the `-v` option of the
command-line SSH client and the `-d` option of the SSH server daemon
`sshd`. How to start the SSH server daemon `sshd` manually depends on
the operating system and SSH provider that you are using.

If the SSH server daemon `sshd` is set up on a host that has a firewall,
ensure that a rule is defined to allow inbound traffic on the SSH port.
The default SSH port is port 22.

If your connection is refused, the SSH server daemon `sshd` is not
running and you must start the daemon. For instructions, see the
following sections:

* link:#gkskx[To Configure and Start the Cygwin SSH Server Daemon `sshd`]
* link:#gksnx[To Configure and Start the MKS Toolkit SSH Server Daemon `sshd`]
* link:#gksjx[To Set Up SSH on Oracle Solaris Systems]

If your connection is accepted, but you cannot log in, ensure that the
SSH user has a valid user account on the host.

[[GSHAG331]]

Next Steps

After testing the SSH setup, set up SSH user authentication to enable
SSH to authenticate users without prompting for a password. For more
information, see link:#gkshh[Setting Up SSH User Authentication].

[[gkshh]][[GSHAG00177]][[setting-up-ssh-user-authentication]]

=== Setting Up SSH User Authentication

When a {productName} subcommand uses SSH to log in to a remote host,
{productName} must be able to authenticate the SSH user. Setting up
SSH user authentication ensures that this requirement is met.

Before setting up SSH user authentication, determine the authentication
scheme to use. If SSH is already deployed at your site, the
authentication scheme to use might already be chosen for you.

The following table lists the authentication schemes that {productName} supports. The table also lists the advantages and disadvantages
of each authentication scheme.

[width="100%",cols="<34%,<33%,<33%",options="header",]
|===
|Authentication Scheme |Advantages |Disadvantages
|Public key without encryption |{productName} provides tools to
simplify set up. |SSH must be configured to locate users' key files in
the correct location. File access permissions for key files and the
directory that contains the key files must be set correctly.

|Public key with passphrase-protected encryption |This scheme is more
secure than public key authentication without encryption. |SSH must be
configured to locate users' key files in the correct location. File
access permissions for key files and the directory that contains the key
files must be set correctly. For each SSH user, {productName}
password aliases are required for the encryption passphrase.

|Password |No SSH configuration is required to locate key files or to
ensure that file access permissions are correct. |For each SSH user,
{productName} password aliases are required for the SSH password.
|===


The following topics are addressed here:

* link:#gksqe[To Set Up Public Key Authentication Without Encryption]
* link:#gktaq[To Set Up Encrypted Public Key Authentication]
* link:#gktbd[To Set Up Password Authentication]

[[gksqe]][[GSHAG00083]][[to-set-up-public-key-authentication-without-encryption]]

==== To Set Up Public Key Authentication Without Encryption

Use the `setup-ssh` subcommand in local mode to set up public key
authentication without encryption. This subcommand enables you to set up
public key authentication on multiple hosts in a single operation.

The `setup-ssh` subcommand generates a key pair and distributes the
public key file to specified hosts. The private key file and the public
key file are protected only by the file system's file access
permissions. If you require additional security, set up public key
authentication with passphrase-protected encryption as explained in
link:#gktaq[To Set Up Encrypted Public Key Authentication].

[[GSHAG332]]

Before You Begin

Ensure that the following prerequisites are met:

* SSH is set up on each host where you are setting up public key
authentication. For more information, see the following sections:

** link:#gksiy[Setting Up Cygwin SSH on Windows]
** link:#gkskf[Setting Up the MKS Toolkit on Windows]
** link:#gksja[Setting Up SSH on UNIX and Linux Systems]

* Only the SSH user has write access to the following files and
directories on each host where you are setting up public key
authentication:

** The SSH user's home directory
** The `~/.ssh` directory
** The `authorized_key` file
+
If other users can write to these files and directories, the secure
service might not trust the `authorized_key` file and might disallow
public key authentication.


1. Generate an SSH key pair and distribute the public key file to the
hosts where you are setting up public key authentication.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for setting up an SSH
key, see the link:reference-manual/setup-ssh.html#GSRFM00229[`setup-ssh`(1)] help page.
====
+
[source]
----
asadmin> setup-ssh [--sshuser sshuser] host-list
----
sshuser::
  The SSH user for which you are generating the SSH key pair. If you are
  running the subcommand as the SSH user, you may omit this option.
host-list::
  A space-separated list of the names of the hosts where the SSH public
  key is to be distributed.
+
2. After generating the SSH key pair, the subcommand uses SSH to log in to
each host in host-list as the SSH user to distribute the public key.
Each time a password is required to log in to a host, you are prompted
for the SSH user's password.
+
In response to each prompt for a password, type the SSH user's password.

[[GSHAG00017]][[gktat]]
Example 2-6 Setting Up Public Key Authentication Without Encryption

This example generates and sets up an SSH key for the user `gfuser` on
the hosts `sua01` and `sua02`. The command is run by the user `gfuser`.

[source]
----
asadmin> setup-ssh --generatekey=true sua01 sua02
Enter SSH password for gfuser@sua01>
Created directory /home/gfuser/.ssh
/usr/bin/ssh-keygen successfully generated the identification /home/gfuser/.ssh/id_rsa
Copied keyfile /home/gfuser/.ssh/id_rsa.pub to gfuser@sua01
Successfully connected to gfuser@sua01 using keyfile /home/gfuser/.ssh/id_rsa
Copied keyfile /home/gfuser/.ssh/id_rsa.pub to gfuser@sua02
Successfully connected to gfuser@sua02 using keyfile /home/gfuser/.ssh/id_rsa
Command setup-ssh executed successfully.
----

[[GSHAG333]]

Next Steps

After setting up public key authentication, test the setup by using
`ssh` to log in as the SSH user to each host where the public key was
distributed. For each host, log in first with the unqualified host name
and then with the fully qualified name. If SSH does not prompt for
password, public key authentication is set up correctly on the host.

If you are prompted for a password, verify that the public key file was
copied correctly to the SSH user's `authorized_keys` file.

[[GSHAG334]]

Troubleshooting

Setup might fail because file access permissions in the SSH user's home
directory are too permissive. In this situation, ensure that the file
access permissions in the SSH user's home directory meet the
requirements for performing this procedure.

If you have set the file access permissions in the SSH user's home
directory correctly, setup might still fail if you are using the MKS
Toolkit. In this situation, correct the problem in one of the following
ways:

* On each remote host, copy the public key file to the SSH user's
`~/.ssh` directory and import the file. To import the file, select the
Secure Service tab in the MKS configuration GUI and click Passwordless.
* Disable strict modes.

[[GSHAG335]]

See Also

* link:#gksiy[Setting Up Cygwin SSH on Windows]
* link:#gkskf[Setting Up the MKS Toolkit on Windows]
* link:#gksja[Setting Up SSH on UNIX and Linux Systems]
* link:reference-manual/setup-ssh.html#GSRFM00229[`setup-ssh`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help setup-ssh` at the command line.

[[gktaq]][[GSHAG00084]][[to-set-up-encrypted-public-key-authentication]]

==== To Set Up Encrypted Public Key Authentication

Encrypted key file authentication uses an encrypted private key file
that is protected with a passphrase. This passphrase must be provided to
use the private key to unlock the public key. If you require encrypted
public key authentication, you must use the SSH utility `ssh-keygen` to
generate an SSH key pair with an encrypted private key. You can then use
the `setup-ssh` subcommand to distribute the public key file to
specified hosts.

To use the encrypted key file, {productName} requires the passphrase
with which the key file was encrypted. To provide this passphrase
securely to {productName}, create a {productName} password alias
to represent the passphrase and store this alias in a password file that
is passed to the link:reference-manual/asadmin.html#GSRFM00263[`asadmin`] utility.


[NOTE]
====
Only the options that are required to complete this task are provided in
each step. For information about all the options for the commands and
subcommands in this task, see their help pages or man pages.
====


[[GSHAG336]]

Before You Begin

Ensure that the following prerequisites are met:

* SSH is set up on each host where you are setting up public key
authentication. For more information, see the following sections:

** link:#gksiy[Setting Up Cygwin SSH on Windows]
** link:#gkskf[Setting Up the MKS Toolkit on Windows]
** link:#gksja[Setting Up SSH on UNIX and Linux Systems]

* Only the SSH user has write access to the following files and
directories on each host where you are setting up public key
authentication:

** The SSH user's home directory
** The `~/.ssh` directory
** The `authorized_key` file
+
If other users can write to these files and directories, the secure
service might not trust the `authorized_key` file and might disallow
public key authentication.

1. Generate an SSH key pair with an encrypted private key file.
+
Use the SSH utility
http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN1ssh-keygen-1[`ssh-keygen`]
for this purpose.
+
[source]
----
$ ssh-keygen -t type
----
type::
  The algorithm that is to be used for the key and which must be `rsa`,
  `dsa`, or `rsa1`.
+
The `ssh-keygen` utility prompts you for a file in which to save the key.

2. To simplify the distribution of the key file, accept the default file.
+
The `ssh-keygen` utility prompts you for a passphrase.

3. [[gktbh]]
In response to the prompt, type your choice of passphrase for encrypting
the private key file.
4. The `ssh-keygen` utility prompts you to type the passphrase again.
+
In response to the prompt, type the passphrase that you set in Step link:#gktbh[3].

5. Distribute the public key file to the hosts where you are setting up
public key authentication.
+
Use the link:reference-manual/setup-ssh.html#GSRFM00229[`setup-ssh`]
`asadmin` subcommand for this purpose.
+
[source]
----
$ asadmin setup-ssh --generatekey=false host-list
----
host-list::
  A space-separated list of the names of the hosts where the SSH public
  key is to be distributed.
+
The subcommand uses SSH to log in to each host in host-list as the SSH
user to distribute the public key. Each time a passphrase or a password
is required to log in to a host, you are prompted for the passphrase or
the SSH user's password.

6. In response to each prompt, type the requested information.
+
--
* In response to each prompt for a passphrase, type the passphrase that
  you set in Step link:#gktbh[3].
* In response to each prompt for a password, type the SSH user's password.
--
+
7. [[gktbm]]
Create a {productName} password alias for the passphrase that you set
in Step link:#gktbh[3].
[arabic]
.. Ensure that the DAS is running. +
Remote subcommands require a running server.
.. Run the link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`]
`asadmin` subcommand.
+
[source]
----
$ asadmin create-password-alias alias-name
----
alias-name::
  Your choice of name for the alias that you are creating.
+
The `create-password-alias` subcommand prompts you to type the
passphrase for which you are creating an alias.
.. In response to the prompt, type the passphrase that you set in
Step link:#gktbh[3].
+
The `create-password-alias` subcommand prompts you to type the passphrase again.
.. In response to the prompt, type the passphrase that you set in
Step link:#gktbh[3] again.

8. Create a plain text file that contains the following entry for the passphrase alias:
+
[source]
----
AS_ADMIN_SSHKEYPASSPHRASE=${ALIAS=alias-name}
----
alias-name::
  The alias name that you specified in Step link:#gktbm[7].
+
[NOTE]
====
When you create an `SSH` node, pass this file as the `--passwordfile`
option of the `asadmin` utility. For more information, see
link:nodes.html#gkrnf[To Create an `SSH` Node].
====


[[GSHAG00018]][[gktav]]
Example 2-7 Setting Up Encrypted Public Key Authentication

This example generates an SSH key pair with an encrypted private key for
the user `gfadmin` and distributes the public key to the hosts `sj01`
and `ja02`. The example also creates an alias that is named
`ssh-key-passphrase` for the private key's passphrase.

[source]
----
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/gfadmin/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/gfadmin/.ssh/id_rsa.
Your public key has been saved in /home/gfadmin/.ssh/id_rsa.pub.
The key fingerprint is:
db:b5:f6:0d:fe:16:33:91:20:64:90:1a:84:66:f5:d0 gfadmin@dashost
$ asadmin setup-ssh --generatekey=false sj01 sj02
Key /home/gfadmin/.ssh/id_rsa is encrypted
Enter key passphrase>
Enter SSH password for gfadmin@sj01>
Copied keyfile /home/gfadmin/.ssh/id_rsa.pub to gfadmin@sj01
Successfully connected to gfadmin@sj01 using keyfile /home/gfadmin/.ssh/id_rsa
Successfully connected to gfadmin@sj02 using keyfile /home/gfadmin/.ssh/id_rsa
SSH public key authentication is already configured for gfadmin@sj02
Command setup-ssh executed successfully.
$ asadmin create-password-alias ssh-key-passphrase
Enter the alias password>
Enter the alias password again>
Command create-password-alias executed successfully.
----

The entry in the password file for the `ssh-key-passphrase` alias is as
follows:

[source]
----
AS_ADMIN_SSHKEYPASSPHRASE=${ALIAS=ssh-key-passphrase}
----

[[GSHAG337]]

Troubleshooting

Setup might fail because file access permissions in the SSH user's home
directory are too permissive. In this situation, ensure that the file
access permissions in the SSH user's home directory meet the
requirements for performing this procedure.

If you have set the file access permissions in the SSH user's home
directory correctly, setup might still fail if you are using the MKS
Toolkit. In this situation, correct the problem in one of the following
ways:

* On each remote host, copy the public key file to the SSH user's
`~/.ssh` directory and import the file. To import the file, select the
Secure Service tab in the MKS configuration GUI and click Passwordless.
* Disable strict modes.

[[GSHAG338]]

See Also

* link:#gksiy[Setting Up Cygwin SSH on Windows]
* link:#gkskf[Setting Up the MKS Toolkit on Windows]
* link:#gksja[Setting Up SSH on UNIX and Linux Systems]
* link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)]
* link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`(1)]
* link:reference-manual/setup-ssh.html#GSRFM00229[`setup-ssh`(1)]
* http://www.oracle.com/pls/topic/lookup?ctx=E18752&id=REFMAN1ssh-keygen-1[`ssh-keygen`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help create-password-alias`
* `asadmin help setup-ssh`

[[gktbd]][[GSHAG00085]][[to-set-up-password-authentication]]

==== To Set Up Password Authentication

To use SSH to log in to a remote host, {productName} requires the SSH
user's password. To provide this password securely to {productName},
create a {productName} password alias to represent the password and
store this alias in a password file that is passed to the
link:reference-manual/asadmin.html#GSRFM00263[`asadmin`] utility.

[[GSHAG339]]

Before You Begin

Ensure that SSH is set up on each host where you are setting up password
authentication. For more information, see the following sections:

* link:#gksiy[Setting Up Cygwin SSH on Windows]
* link:#gkskf[Setting Up the MKS Toolkit on Windows]
* link:#gksja[Setting Up SSH on UNIX and Linux Systems]

1. Ensure that the DAS is running. +
Remote subcommands require a running server.

2. [[gktbb]]
Create an alias for the SSH user's password.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for creating a password
alias, see the link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`(1)] help page.
====
+
[source]
----
asadmin> create-password-alias alias-name
----
alias-name::
  Your choice of name for the alias that you are creating.

3. The `create-password-alias` subcommand prompts you to type the password
for which you are creating an alias. +
In response to the prompt, type the SSH user's password. +
The `create-password-alias` subcommand prompts you to type the password again.

4. In response to the prompt, type the SSH user's password again.

5. Create a plain text file that contains the following entry for the password alias:
+
[source]
----
AS_ADMIN_SSHPASSWORD=${ALIAS=alias-name}
----
alias-name::
  The alias name that you specified in Step link:#gktbb[2].

[NOTE]
====
When you create an `SSH` node, pass this file as the `--passwordfile`
option of the `asadmin` utility. For more information, see
link:nodes.html#gkrnf[To Create an `SSH` Node].
====


[[GSHAG00019]][[gktba]]
Example 2-8 Creating an Alias for the SSH User's Password

This example creates an alias that is named `ssh-password` for the SSH user's password.

[source]
----
$ asadmin create-password-alias ssh-password
Enter the alias password>
Enter the alias password again>
Command create-password-alias executed successfully.
----

The entry in the password file for the `ssh-password` alias is as follows:

[source]
----
AS_ADMIN_SSHPASSWORD=${ALIAS=ssh-password}
----

[[GSHAG340]]

See Also

* link:#gksiy[Setting Up Cygwin SSH on Windows]
* link:#gkskf[Setting Up the MKS Toolkit on Windows]
* link:#gksja[Setting Up SSH on UNIX and Linux Systems]
* link:reference-manual/asadmin.html#GSRFM00263[`asadmin`(1M)]
* link:reference-manual/create-password-alias.html#GSRFM00049[`create-password-alias`(1)]

You can also view the full syntax and options of the subcommand by
typing `asadmin help create-password-alias` at the command line.

[[gkshn]][[GSHAG00178]][[installing-and-removing-glassfish-server-software-on-multiple-hosts]]

=== Installing and Removing {productName} Software on Multiple Hosts

{productName} software must be installed on all hosts where {productName} will run. How to install {productName} software on multiple
hosts depends on the degree of control that you require over the
installation on each host.

* If you require complete control over the installation on each host,
install the software from a {productName} distribution on each host
individually. For more information, see link:installation-guide.html#GSING[{productName} Installation Guide].
* If the same set up on each host is acceptable, copy an existing
{productName} installation to the hosts. For more information, see
link:#gksil[To Copy a {productName} Installation to Multiple Hosts].

{productName} also enables you to remove {productName} software
from multiple hosts in a single operation. For more information, see
link:#gktaw[To Remove {productName} Software From Multiple Hosts].

The following topics are addressed here:

* link:#gksil[To Copy a {productName} Installation to Multiple Hosts]
* link:#gktaw[To Remove {productName} Software From Multiple Hosts]

[[gksil]][[GSHAG00086]][[to-copy-a-glassfish-server-installation-to-multiple-hosts]]

==== To Copy a {productName} Installation to Multiple Hosts

Use the `install-node-dcom` subcommand or the `install-node-ssh`
subcommand in local mode to copy an installation of {productName}
software to multiple hosts.

[[GSHAG341]]

Before You Begin

Ensure that DCOM or SSH is set up on the host where you are running the
subcommand and on each host where you are copying the {productName}
software.

Run the appropriate subcommand for the protocol that is set up for
communication between the hosts.

* If DCOM is set up for communication between the hosts, run the
`install-node-dcom` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for copying an
installation of {productName} software, see the
link:reference-manual/install-node-dcom.html#GSRFM626[`install-node-dcom`(1)] help page.
====
+
[source]
----
asadmin> install-node-dcom host-list
----
host-list::
  A space-separated list of the names of the hosts where you are copying
  the installation of {productName} software.
* If SSH is set up for communication between the hosts, run the
`install-node-ssh` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in
this step. For information about all the options for copying an
installation of {productName} software, see the
link:reference-manual/install-node-ssh.html#GSRFM628[`install-node-ssh`(1)] help page.
====
+
[source]
----
asadmin> install-node-ssh host-list
----
host-list::
  A space-separated list of the names of the hosts where you are copying
  the installation of {productName} software.

[[GSHAG461]][[sthref9]]
Example 2-9 Copying a {productName} Installation to Multiple
DCOM-Enabled Hosts

This example copies the {productName} software on the host where the
subcommand is run to the default location on the DCOM-enabled hosts
`wpmdl1.example.com` and `wpmdl2.example.com`.

Some lines of output are omitted from this example for readability.

[source]
----
asadmin> install-node-dcom wpmdl1.example.com wpmdl2.example.com
Created installation zip C:\glassfish8107276692860773166.zip
Copying 85760199 bytes..........................................................
....................................
WROTE FILE TO REMOTE SYSTEM: C:/glassfish7/glassfish_install.zip and C:/glassfish7/unpack.bat
Output from Windows Unpacker:

C:\Windows\system32>C:

C:\Windows\system32>cd "C:\glassfish7"

C:\glassfish7>jar xvf glassfish_install.zip
 inflated: bin/asadmin
 inflated: bin/asadmin.bat
 inflated: glassfish/bin/appclient
 inflated: glassfish/bin/appclient.bat
 inflated: glassfish/bin/appclient.js
 inflated: glassfish/bin/asadmin
 inflated: glassfish/bin/asadmin.bat
...
 inflated: mq/lib/props/broker/default.properties
 inflated: mq/lib/props/broker/install.properties

Command install-node-dcom executed successfully.
----

[[GSHAG342]][[sthref10]]
Example 2-10 Copying a {productName} Installation to Multiple
SSH-Enabled Hosts

This example copies the {productName} software on the host where the
subcommand is run to the default location on the SSH-enabled hosts
`sj03.example.com` and `sj04.example.com`.

[source]
----
asadmin> install-node-ssh sj03.example.com sj04.example.com
Created installation zip /home/gfuser/glassfish2339538623689073993.zip
Successfully connected to gfuser@sj03.example.com using keyfile /home/gfuser
/.ssh/id_rsa
Copying /home/gfuser/glassfish2339538623689073993.zip (81395008 bytes) to
sj03.example.com:/export/glassfish7
Installing glassfish2339538623689073993.zip into sj03.example.com:/export/glassfish7
Removing sj03.example.com:/export/glassfish7/glassfish2339538623689073993.zip
Fixing file permissions of all files under sj03.example.com:/export/glassfish7/bin
Successfully connected to gfuser@sj04.example.com using keyfile /home/gfuser
/.ssh/id_rsa
Copying /home/gfuser/glassfish2339538623689073993.zip (81395008 bytes) to
sj04.example.com:/export/glassfish7
Installing glassfish2339538623689073993.zip into sj04.example.com:/export/glassfish7
Removing sj04.example.com:/export/glassfish7/glassfish2339538623689073993.zip
Fixing file permissions of all files under sj04.example.com:/export/glassfish7/bin
Command install-node-ssh executed successfully
----

[[GSHAG343]]

See Also

* link:reference-manual/install-node-dcom.html#GSRFM626[`install-node-dcom`(1)]
* link:reference-manual/install-node-ssh.html#GSRFM628[`install-node-ssh`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help install-node-dcom`
* `asadmin help install-node-ssh`

[[gktaw]][[GSHAG00087]][[to-remove-glassfish-server-software-from-multiple-hosts]]

==== To Remove {productName} Software From Multiple Hosts

Use the `uninstall-node-dcom` subcommand or the `uninstall-node-ssh`
subcommand in local mode to remove {productName} software from
multiple hosts.

[[GSHAG344]]

Before You Begin

Ensure that the following prerequisites are met:

* DCOM or SSH is set up on the host where you are running the subcommand
and on each host from which you are removing the {productName} software.

* No process is accessing the parent of the base installation directory
for the {productName} software or any subdirectory of this directory.

* The parent of the base installation directory for the {productName}
software is the same on each host from which you are removing the
{productName} software.

* For hosts that use DCOM for remote communication, the configuration of
the following items is the same on each host:

** Windows Domain
** Windows User

* For hosts that use SSH for remote communication, the configuration of
the following items is the same on each host:

** SSH port
** SSH user
** SSH key file

Run the appropriate subcommand for the protocol that is set up for
communication between the hosts.

* If DCOM is set up for communication between the hosts, run the
`uninstall-node-dcom` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in this step.
For information about all the options for removing {productName} software, see the
link:reference-manual/uninstall-node-dcom.html#GSRFM775[`uninstall-node-dcom`(1)] help page.
====
+
[source]
----
asadmin> uninstall-node-dcom host-list
----
host-list::
  A space-separated list of the names of the hosts from which you are
  removing {productName} software.
* If SSH is set up for communication between the hosts, run the
`uninstall-node-ssh` subcommand.
+
[NOTE]
====
Only the options that are required to complete this task are provided in this step.
For information about all the options for removing {productName} software, see the
link:reference-manual/uninstall-node-ssh.html#GSRFM778[`uninstall-node-ssh`(1)] help page.
====
+
[source]
----
asadmin> uninstall-node-ssh host-list
----
host-list::
  A space-separated list of the names of the hosts from which you are
  removing {productName} software.

[[GSHAG462]][[sthref11]]
Example 2-11 Removing {productName} Software From Multiple
DCO\M-Enabled Hosts

This example removes {productName} software on the DCOM-enabled hosts
`wpmdl1.example.com` and `wpmdl2.example.com` from the default location.

[source]
----
asadmin> uninstall-node-dcom wpmdl1 wpmdl2
Command uninstall-node-dcom executed successfully.
----

[[GSHAG345]][[sthref12]]
Example 2-12 Removing {productName} Software From Multiple
SSH-Enabled Hosts

This example removes {productName} software on the SSH-enabled hosts
`sj03.example.com` and `sj04.example.com` from the default location.

[source]
----
asadmin> uninstall-node-ssh sj03 sj04
Successfully connected to gfuser@sj03.example.com using keyfile /home/gfuser
/.ssh/id_rsa
Successfully connected to gfuser@sj04.example.com using keyfile /home/gfuser
/.ssh/id_rsa
Command uninstall-node-ssh executed successfully.
----

[[GSHAG346]]

See Also

* link:reference-manual/uninstall-node-dcom.html#GSRFM775[`uninstall-node-dcom`(1)]
* link:reference-manual/uninstall-node-ssh.html#GSRFM778[`uninstall-node-ssh`(1)]

You can also view the full syntax and options of the subcommands by
typing the following commands at the command line:

* `asadmin help uninstall-node-dcom`
* `asadmin help uninstall-node-ssh`
