type=page
status=published
title=Enabling Centralized Administration of GlassFish Server Instances
next=nodes.html
prev=overview.html
~~~~~~

= Enabling Centralized Administration of GlassFish Server Instances

[[GSHAG00003]][[gkshg]]


[[enabling-centralized-administration-of-glassfish-server-instances]]
== 2 Enabling Centralized Administration of GlassFish Server Instances

GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server Software on Multiple Hosts]

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

=== About Centralized Administration of GlassFish Server 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 GlassFish Server 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 GlassFish Server Instances Centrally]

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

|None
|link:nodes.html#gkrnp[Creating, Listing, and Deleting `CONFIG` Nodes]
|link:instances.html#gkqdw[Administering GlassFish Server 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
GlassFish Server 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 GlassFish Server. 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 GlassFish Server.

Before setting up DCOM, decide which Windows user GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server Open Source Edition 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 GlassFish Server 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 GlassFish Server subcommand uses DCOM to log in to a remote host,
GlassFish Server requires the Windows user's password to authenticate
the Windows user. To provide this password securely to GlassFish Server,
create a GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server 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. GlassFish Server 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, GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server 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. GlassFish Server 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, GlassFish Server 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 GlassFish Server 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 GlassFish Server subcommand uses SSH to log in to a remote host,
GlassFish Server 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 GlassFish
Server 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 |GlassFish Server 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, GlassFish Server
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,
GlassFish Server 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, GlassFish Server requires the passphrase
with which the key file was encrypted. To provide this passphrase
securely to GlassFish Server, create a GlassFish Server 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 GlassFish Server 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, GlassFish Server requires the SSH
user's password. To provide this password securely to GlassFish Server,
create a GlassFish Server 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 GlassFish Server Software on Multiple Hosts

GlassFish Server software must be installed on all hosts where GlassFish
Server will run. How to install GlassFish Server 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 GlassFish Server distribution on each host
individually. For more information, see link:../installation-guide/toc.html#GSING[GlassFish Server
Open Source Edition Installation Guide].
* If the same set up on each host is acceptable, copy an existing
GlassFish Server installation to the hosts. For more information, see
link:#gksil[To Copy a GlassFish Server Installation to Multiple Hosts].

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

The following topics are addressed here:

* link:#gksil[To Copy a GlassFish Server Installation to Multiple Hosts]
* link:#gktaw[To Remove GlassFish Server Software From Multiple Hosts]

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

==== To Copy a GlassFish Server Installation to Multiple Hosts

Use the `install-node-dcom` subcommand or the `install-node-ssh`
subcommand in local mode to copy an installation of GlassFish Server
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 GlassFish Server
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 GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server software.

[[GSHAG461]][[sthref9]]
Example 2-9 Copying a GlassFish Server Installation to Multiple
DCOM-Enabled Hosts

This example copies the GlassFish Server 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 GlassFish Server Installation to Multiple
SSH-Enabled Hosts

This example copies the GlassFish Server 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 GlassFish Server Software From Multiple Hosts

Use the `uninstall-node-dcom` subcommand or the `uninstall-node-ssh`
subcommand in local mode to remove GlassFish Server 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 GlassFish Server software.

* No process is accessing the parent of the base installation directory
for the GlassFish Server software or any subdirectory of this directory.

* The parent of the base installation directory for the GlassFish Server
software is the same on each host from which you are removing the
GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server 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 GlassFish Server software.

[[GSHAG462]][[sthref11]]
Example 2-11 Removing GlassFish Server Software From Multiple
DCO\M-Enabled Hosts

This example removes GlassFish Server 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 GlassFish Server Software From Multiple
SSH-Enabled Hosts

This example removes GlassFish Server 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`
