I received the following errors whilst running dsh on a NIM master recently.
root@nim1 : / # dsh -waixlpar1 date
0042-053 lsnim: there is no NIM object named "aixlpar1"
The node aixlpar1 is not defined in NIM database.
aixlpar1: Mon Aug 4 14:01:57 EET 2014
I had to set the following environment variable, shown below. By setting DSH_CONTEXT to DSH this prevented the dsh command from referring to the NIM database and instead forced it to query a user-defined node list.
root@nim1 : / # export DSH_CONTEXT=DSH
root@nim1 : / # dsh -waixlpar1 date
aixlpar1: Mon Aug 4 14:02:22 EET 2014
root@nim1 : / # env | grep -i dsh
DSH_CONTEXT=DSH
DSH_NODE_RSH=/usr/bin/ssh
root@nim1 : / # dsh -q
DSH:DCP_DEVICE_OPTS=
DSH:DCP_DEVICE_RCP=
DSH:DCP_NODE_OPTS=-q
DSH:DCP_NODE_RCP=/usr/bin/scp
DSH:DSH_CONTEXT=DSH
DSH:DSH_DEVICE_LIST=
DSH:DSH_DEVICE_OPTS=
DSH:DSH_DEVICE_RCP=
DSH:DSH_DEVICE_RSH=
DSH:DSH_ENVIRONMENT=
DSH:DSH_FANOUT=
DSH:DSH_LOG=
DSH:DSH_NODEGROUP_PATH=
DSH:DSH_NODE_LIST=/usr/local/etc/csmnodes.list
DSH:DSH_NODE_OPTS=
DSH:DSH_NODE_RCP=
DSH:DSH_NODE_RSH=/usr/bin/ssh
DSH:DSH_OUTPUT=
DSH:DSH_PATH=
DSH:DSH_REPORT=
DSH:DSH_SYNTAX=
DSH:DSH_TIMEOUT=
DSH:RSYNC_RSH=
Here’s another dsh tip I picked up. By default dsh will use the default port for ssh connections to nodes. For example, by default sshd listens on port 22 on an AIX node. I recently came across a customer environment where they had configured sshd to listen on port 6666 (not the real port number!). They wanted to use dsh from a NIM master which would connect to all the defined nodes in their custom list. When they ran it they got the following error message:
# dsh date
aixlpar1: ssh: connect to host aixlpar1 port 22: Connection refused
dsh: 2617-009 aixlpar1 remote shell had exit code 255
On the AIX node, we could see that sshd was listening on port 6666:
# netstat -a | grep 6666 | grep LIST
tcp6 0 0 *.6666 *.* LISTEN
tcp4 0 0 *.6666 *.* LISTEN
We needed to find a way to force dsh to use a different port number when starting the ssh connection. This was accomplished by setting the DSH_REMOTE_OPTS variable, as shown below.
[root@nim1]/ # export DSH_REMOTE_OPTS=-p6666
[root@nim1]/ # dsh date
aixlpar1: Tue Aug 5 17:37:16 2014
[root@nim1]/ # env | grep DSH
DSH_REMOTE_CMD=/usr/bin/ssh
DSH_NODE_LIST=/etc/ibm/sysmgt/dsm/nodelist
DSH_REMOTE_OPTS=-p6666
DSH_NODE_RSH=/usr/bin/ssh
DSH CONTEXT
The DSH CONTEXT is the in-built context for all the DSH Utilities commands. It permits a user-defined node group database contained in the local file system. The DSH_NODEGROUP_PATH environment variable specifies the path to the node group database. Each file in this directory represents a node group, and contains one host name or TCP/IP address for each node that is a group member. Blank lines and comment lines beginning with a # symbol are ignored. If all nodes are requested for the DSH CONTEXT, a full node list is built from all groups in the DSH_NODEGROUP_PATH directory, and cached in /var/ibm/sysmgt/dsm/dsh/$DSH_NODEGROUP_PATH/AllNodes. This file is recreated each time a group file is modified or added to the DSH_NODEGROUP_PATH directory. Device targets are not supported in the DSH context.
http://www-01.ibm.com/support/knowledgecenter/ssw_aix_71/com.ibm.aix.cmds2/dsh.htm?lang=en
DSH_REMOTE_OPTS
Includes the options specified in the remote command when the command is forwarded to the remote nodes.