2014-11-19 14:42:19 +00:00
|
|
|
#!/bin/bash
|
2007-10-26 22:44:33 +00:00
|
|
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
|
|
#(C)IBM Corp
|
2013-10-17 15:46:12 +00:00
|
|
|
# This script adds xCAT specific setup to the /etc/ssh/sshd_config and ssh_config file
|
|
|
|
# It calls getcredentials.awk to get from the xcatmaster ssh host keys from the
|
|
|
|
# /etc/xcat/hostkeys directory and puts in /etc/ssh on the node the following keys
|
2014-07-21 16:47:03 +00:00
|
|
|
# ssh_host_dsa_key,ssh_host_rsa_key, ssh_host_ecdsa_key (if supported)
|
2013-10-17 15:46:12 +00:00
|
|
|
# It calls getcredentials.awk to get from the xcatmaster root ssh keys from the
|
|
|
|
# ~/.ssh directory on the xcatmaster and put in ~/.ssh on the node the following keys:
|
|
|
|
# If site.enablesshbetweennodes is yes
|
|
|
|
# id.rsa
|
2007-10-26 22:44:33 +00:00
|
|
|
#
|
2012-10-23 16:22:43 +00:00
|
|
|
# if on the Management Node, exit
|
2014-06-10 15:54:31 +00:00
|
|
|
|
|
|
|
|
2014-07-23 06:16:48 +00:00
|
|
|
if [ "$(uname -s|tr 'A-Z' 'a-z')" = "linux" ];then
|
|
|
|
str_dir_name=`dirname $0`
|
|
|
|
. $str_dir_name/xcatlib.sh
|
|
|
|
fi
|
2014-06-10 15:54:31 +00:00
|
|
|
|
2012-10-23 16:22:43 +00:00
|
|
|
if [ -e /etc/xCATMN ]; then
|
2012-10-23 19:18:52 +00:00
|
|
|
logger -t xcat -p local4.info "remoteshell:Running on the Management Node , exiting "
|
2012-10-23 16:22:43 +00:00
|
|
|
exit 0
|
|
|
|
fi
|
2013-04-09 18:23:51 +00:00
|
|
|
# if -p input, do special PCM setup
|
|
|
|
if [ -n "$1" ]; then
|
|
|
|
if [ $1 = "-p" ]; then
|
|
|
|
SETUPFORPCM=1
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2012-08-17 11:40:56 +00:00
|
|
|
# Linux or if AIX call aixremoteshell -d
|
|
|
|
if [ "$(uname -s)" = "AIX" ]; then
|
|
|
|
./aixremoteshell -d 2>&1
|
|
|
|
logger -t xcat -p local4.info "Install: On AIX , remoteshell calling aixremoteshell -d "
|
|
|
|
exit 0
|
|
|
|
fi
|
2013-07-31 13:29:32 +00:00
|
|
|
master=$MASTER
|
2013-10-09 19:26:55 +00:00
|
|
|
# are we using xcat flow control
|
|
|
|
useflowcontrol=0
|
2013-10-18 07:58:18 +00:00
|
|
|
if [ "$USEFLOWCONTROL" = "YES" ] || [ "$USEFLOWCONTROL" = "yes" ] || [ "$USEFLOWCONTROL" = "1" ]; then
|
2013-10-09 19:26:55 +00:00
|
|
|
useflowcontrol=1
|
|
|
|
fi
|
2013-07-31 13:29:32 +00:00
|
|
|
|
2008-02-05 01:16:40 +00:00
|
|
|
if [ -r /etc/ssh/sshd_config ]
|
|
|
|
then
|
2013-07-10 16:43:02 +00:00
|
|
|
logger -t xcat -p local4.info "remoteshell: setup /etc/ssh/sshd_config and ssh_config"
|
2008-02-05 01:16:40 +00:00
|
|
|
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ORIG
|
2013-07-10 16:43:02 +00:00
|
|
|
#delete all occurance of the attribute and then add xCAT settings
|
|
|
|
sed -i '/X11Forwarding /'d /etc/ssh/sshd_config
|
|
|
|
echo "X11Forwarding yes" >>/etc/ssh/sshd_config
|
|
|
|
sed -i '/KeyRegenerationInterval /'d /etc/ssh/sshd_config
|
|
|
|
echo "KeyRegenerationInterval 0" >>/etc/ssh/sshd_config
|
|
|
|
sed -i '/MaxStartups /'d /etc/ssh/sshd_config
|
|
|
|
echo "MaxStartups 1024" >>/etc/ssh/sshd_config
|
2014-07-21 16:47:03 +00:00
|
|
|
|
2015-01-22 08:32:03 +00:00
|
|
|
if [ "$SETUPFORPCM" = "1" ]; then
|
|
|
|
if [[ $OSVER == sles* ]];then
|
|
|
|
sed -i '/PasswordAuthentication /'d /etc/ssh/sshd_config
|
|
|
|
echo "PasswordAuthentication yes" >>/etc/ssh/sshd_config
|
|
|
|
elif [[ $OSVER == ubuntu* ]];then
|
|
|
|
sed -i 's/^PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config
|
|
|
|
fi
|
2013-04-09 18:23:51 +00:00
|
|
|
fi
|
2008-02-05 01:16:40 +00:00
|
|
|
fi
|
2007-10-26 22:44:33 +00:00
|
|
|
|
2013-10-17 15:46:12 +00:00
|
|
|
if [ -r /etc/ssh/ssh_config ]
|
2008-04-16 20:30:54 +00:00
|
|
|
then
|
2013-07-10 16:43:02 +00:00
|
|
|
sed -i '/StrictHostKeyChecking /'d /etc/ssh/ssh_config
|
|
|
|
echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
|
|
|
|
|
2008-04-16 20:30:54 +00:00
|
|
|
fi
|
2013-08-13 15:49:32 +00:00
|
|
|
xcatpost="xcatpost"
|
2008-04-30 20:54:57 +00:00
|
|
|
if [ -d /xcatpost/_ssh ]
|
2008-02-05 01:16:40 +00:00
|
|
|
then
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -p local4.info -t xcat "Install: setup root .ssh"
|
2008-04-30 20:54:57 +00:00
|
|
|
cd /xcatpost/_ssh
|
2008-02-05 01:16:40 +00:00
|
|
|
mkdir -p /root/.ssh
|
|
|
|
cp -f * /root/.ssh
|
2008-05-07 17:14:46 +00:00
|
|
|
cd - >/dev/null
|
2008-02-05 01:16:40 +00:00
|
|
|
chmod 700 /root/.ssh
|
|
|
|
chmod 600 /root/.ssh/*
|
|
|
|
fi
|
2008-04-30 20:54:57 +00:00
|
|
|
|
2009-06-25 19:18:22 +00:00
|
|
|
if [ ! -x /usr/bin/openssl ]; then
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -t xcat -p local4.err "Install: /usr/bin/openssl is not executable."
|
2009-06-25 19:18:22 +00:00
|
|
|
exit 0
|
2008-05-01 14:45:30 +00:00
|
|
|
fi
|
|
|
|
allowcred.awk &
|
|
|
|
CREDPID=$!
|
2013-10-09 19:26:55 +00:00
|
|
|
sleep 1
|
2009-05-12 12:18:12 +00:00
|
|
|
|
2014-07-21 16:47:03 +00:00
|
|
|
#download the ssh host dsa private keys
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest received response return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
2013-10-09 19:26:55 +00:00
|
|
|
fi
|
2009-05-12 12:18:12 +00:00
|
|
|
getcredentials.awk ssh_dsa_hostkey | grep -E -v '</{0,1}xcatresponse>|</{0,1}serverdone>' | sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /tmp/ssh_dsa_hostkey
|
|
|
|
|
|
|
|
#check the message is an error or not
|
|
|
|
grep -E '<error>' /tmp/ssh_dsa_hostkey
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
#the message received is the data
|
2014-03-03 18:29:29 +00:00
|
|
|
cat /tmp/ssh_dsa_hostkey | grep -E -v '</{0,1}errorcode>|/{0,1}data>|</{0,1}content>|</{0,1}desc>' >/etc/ssh/ssh_host_dsa_key
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: getting ssh_host_dsa_key"
|
2013-09-16 13:29:20 +00:00
|
|
|
MAX_RETRIES=10
|
|
|
|
RETRY=0
|
2013-10-17 15:46:12 +00:00
|
|
|
MYCONT=`cat /etc/ssh/ssh_host_dsa_key`
|
|
|
|
while [ -z "$MYCONT" ]; do
|
2013-10-09 19:26:55 +00:00
|
|
|
# not using flow control , need to sleep
|
|
|
|
if [ $useflowcontrol = "0" ]; then
|
|
|
|
let SLI=$RANDOM%10
|
|
|
|
let SLI=SLI+10
|
|
|
|
sleep $SLI
|
|
|
|
fi
|
|
|
|
|
2013-09-16 13:29:20 +00:00
|
|
|
RETRY=$(($RETRY+1))
|
|
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
|
|
then
|
|
|
|
break
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
2013-10-09 19:26:55 +00:00
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
fi
|
2009-05-12 12:18:12 +00:00
|
|
|
getcredentials.awk ssh_dsa_hostkey | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/ssh/ssh_host_dsa_key
|
|
|
|
MYCONT=`cat /etc/ssh/ssh_host_dsa_key`
|
2013-10-17 15:46:12 +00:00
|
|
|
done
|
|
|
|
chmod 600 /etc/ssh/ssh_host_dsa_key
|
|
|
|
if ! grep "PRIVATE KEY" /etc/ssh/ssh_host_dsa_key > /dev/null 2>&1 ; then
|
|
|
|
rm /etc/ssh/ssh_host_dsa_key
|
2013-03-19 13:35:59 +00:00
|
|
|
else
|
|
|
|
ssh-keygen -y -f /etc/ssh/ssh_host_dsa_key > /etc/ssh/ssh_host_dsa_key.pub
|
|
|
|
chmod 644 /etc/ssh/ssh_host_dsa_key.pub
|
|
|
|
chown root /etc/ssh/ssh_host_dsa_key.pub
|
2013-10-17 15:46:12 +00:00
|
|
|
fi
|
2009-05-12 12:18:12 +00:00
|
|
|
else
|
|
|
|
#the message received is an error, so parse it
|
|
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /tmp/ssh_dsa_hostkey`
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -t xCAT -p local4.err Error: $ERR_MSG
|
2009-05-11 15:47:34 +00:00
|
|
|
fi
|
2009-05-12 12:18:12 +00:00
|
|
|
rm /tmp/ssh_dsa_hostkey
|
2007-10-26 22:44:33 +00:00
|
|
|
|
2014-07-21 16:47:03 +00:00
|
|
|
# download the host rsa key
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
2013-10-09 19:26:55 +00:00
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
fi
|
2014-07-21 16:47:03 +00:00
|
|
|
|
2009-05-12 12:18:12 +00:00
|
|
|
getcredentials.awk ssh_rsa_hostkey | grep -E -v '</{0,1}xcatresponse>|</{0,1}serverdone>' | sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /tmp/ssh_rsa_hostkey
|
|
|
|
|
|
|
|
#check whether the message is an error or not
|
|
|
|
grep -E '<error>' /tmp/ssh_rsa_hostkey
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
#the message received is the data we request
|
2014-03-03 18:29:29 +00:00
|
|
|
cat /tmp/ssh_rsa_hostkey | grep -E -v '</{0,1}errorcode>|/{0,1}data>|</{0,1}content>|</{0,1}desc>' >/etc/ssh/ssh_host_rsa_key
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -t xCAT -p local4.info ssh_rsa_hostkey
|
2009-05-12 12:18:12 +00:00
|
|
|
MYCONT=`cat /etc/ssh/ssh_host_rsa_key`
|
2013-09-16 13:29:20 +00:00
|
|
|
MAX_RETRIES=10
|
|
|
|
RETRY=0
|
2009-05-12 12:18:12 +00:00
|
|
|
while [ -z "$MYCONT" ]; do
|
2013-10-09 19:26:55 +00:00
|
|
|
# not using flow control , need to sleep
|
|
|
|
if [ $useflowcontrol = "0" ]; then
|
|
|
|
let SLI=$RANDOM%10
|
|
|
|
let SLI=SLI+10
|
|
|
|
sleep $SLI
|
|
|
|
fi
|
2013-09-16 13:29:20 +00:00
|
|
|
RETRY=$(($RETRY+1))
|
|
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
|
|
then
|
|
|
|
break
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
2013-10-09 19:26:55 +00:00
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
fi
|
2013-07-31 13:29:32 +00:00
|
|
|
|
2009-05-12 12:18:12 +00:00
|
|
|
getcredentials.awk ssh_rsa_hostkey | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/ssh/ssh_host_rsa_key
|
|
|
|
MYCONT=`cat /etc/ssh/ssh_host_rsa_key`
|
|
|
|
done
|
|
|
|
chmod 600 /etc/ssh/ssh_host_rsa_key
|
|
|
|
if ! grep "PRIVATE KEY" /etc/ssh/ssh_host_rsa_key > /dev/null 2>&1 ; then
|
|
|
|
rm /etc/ssh/ssh_host_rsa_key
|
2013-03-19 13:35:59 +00:00
|
|
|
else
|
|
|
|
ssh-keygen -y -f /etc/ssh/ssh_host_rsa_key > /etc/ssh/ssh_host_rsa_key.pub
|
|
|
|
chmod 644 /etc/ssh/ssh_host_rsa_key.pub
|
|
|
|
chown root /etc/ssh/ssh_host_rsa_key.pub
|
2009-05-12 12:18:12 +00:00
|
|
|
fi
|
|
|
|
else
|
|
|
|
#This is an error message
|
|
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /tmp/ssh_rsa_hostkey`
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -t xCAT -p local4.err Error: $ERR_MSG
|
2009-05-12 12:18:12 +00:00
|
|
|
fi
|
|
|
|
rm /tmp/ssh_rsa_hostkey
|
2008-02-05 01:16:40 +00:00
|
|
|
|
2014-07-21 16:47:03 +00:00
|
|
|
# if there is a ecdsa host key on the node then download the replacement from the MN/SN
|
2014-07-22 14:30:22 +00:00
|
|
|
if [ -f /etc/ssh/ssh_host_ecdsa_key ]; then
|
2014-07-21 16:47:03 +00:00
|
|
|
# download the host ecdsa key
|
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
getcredentials.awk ssh_ecdsa_hostkey | grep -E -v '</{0,1}xcatresponse>|</{0,1}serverdone>' | sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /tmp/ssh_ecdsa_hostkey
|
|
|
|
|
|
|
|
#check whether the message is an error or not
|
|
|
|
grep -E '<error>' /tmp/ssh_ecdsa_hostkey
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
#the message received is the data we request
|
|
|
|
cat /tmp/ssh_ecdsa_hostkey | grep -E -v '</{0,1}errorcode>|/{0,1}data>|</{0,1}content>|</{0,1}desc>' >/etc/ssh/ssh_host_ecdsa_key
|
|
|
|
logger -t xCAT -p local4.info ssh_ecdsa_hostkey
|
|
|
|
MYCONT=`cat /etc/ssh/ssh_host_ecdsa_key`
|
|
|
|
MAX_RETRIES=10
|
|
|
|
RETRY=0
|
|
|
|
while [ -z "$MYCONT" ]; do
|
|
|
|
# not using flow control , need to sleep
|
|
|
|
if [ $useflowcontrol = "0" ]; then
|
|
|
|
let SLI=$RANDOM%10
|
|
|
|
let SLI=SLI+10
|
|
|
|
sleep $SLI
|
|
|
|
fi
|
|
|
|
RETRY=$(($RETRY+1))
|
|
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
|
|
then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
getcredentials.awk ssh_ecdsa_hostkey | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /etc/ssh/ssh_host_ecdsa_key
|
|
|
|
MYCONT=`cat /etc/ssh/ssh_host_ecdsa_key`
|
|
|
|
done
|
|
|
|
chmod 600 /etc/ssh/ssh_host_ecdsa_key
|
|
|
|
if ! grep "PRIVATE KEY" /etc/ssh/ssh_host_ecdsa_key > /dev/null 2>&1 ; then
|
|
|
|
rm /etc/ssh/ssh_host_ecdsa_key
|
|
|
|
else
|
|
|
|
ssh-keygen -y -f /etc/ssh/ssh_host_ecdsa_key > /etc/ssh/ssh_host_ecdsa_key.pub
|
|
|
|
chmod 644 /etc/ssh/ssh_host_ecdsa_key.pub
|
|
|
|
chown root /etc/ssh/ssh_host_ecdsa_key.pub
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
#This is an error message
|
|
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /tmp/ssh_ecdsa_hostkey`
|
|
|
|
logger -t xCAT -p local4.err Error: $ERR_MSG
|
|
|
|
fi
|
|
|
|
rm /tmp/ssh_ecdsa_hostkey
|
|
|
|
fi
|
|
|
|
|
2011-03-01 15:42:57 +00:00
|
|
|
if [[ $NTYPE = service ]]; then
|
2010-03-24 12:05:58 +00:00
|
|
|
mkdir -p /etc/xcat/hostkeys
|
2009-02-12 13:46:13 +00:00
|
|
|
cp /etc/ssh/ssh* /etc/xcat/hostkeys/.
|
|
|
|
fi
|
2008-04-16 21:08:57 +00:00
|
|
|
|
2014-03-03 18:29:29 +00:00
|
|
|
umask 0077
|
|
|
|
# This is where we start getting root ssh keys
|
|
|
|
# This tells credentials.pm where to get the root .ssh keys. If no zone then old path of ~.ssh
|
|
|
|
#rootsshpvtkey=ssh_root_key:$zonename
|
|
|
|
mkdir -p /root/.ssh/
|
|
|
|
# this is for obtaining non-zone keys
|
|
|
|
rootsshpvtkey=ssh_root_key
|
|
|
|
rootsshpubkey=ssh_root_pub_key
|
|
|
|
if [ $ZONENAME ];
|
|
|
|
then
|
|
|
|
# This tells credentials.pm where to get the root .ssh keys. If no zone then old path of ~/.ssh
|
|
|
|
zonename=$ZONENAME
|
|
|
|
rootsshpvtkey=ssh_root_key:$zonename
|
|
|
|
rootsshpubkey=ssh_root_pub_key:$zonename
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: gathering root ssh keys for $zonename"
|
|
|
|
|
|
|
|
fi
|
2007-10-26 22:44:33 +00:00
|
|
|
|
2014-03-03 18:29:29 +00:00
|
|
|
# always get the id_rsa.pub key for the node and put in authorized_keys
|
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
|
|
|
fi
|
2008-04-16 21:08:57 +00:00
|
|
|
|
2014-03-03 18:29:29 +00:00
|
|
|
getcredentials.awk $rootsshpubkey | grep -E -v '</{0,1}xcatresponse>|</{0,1}serverdone>'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /tmp/ssh_root_pub_key
|
|
|
|
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: gathering $rootsshpubkey "
|
|
|
|
#check whether the message is an error or not
|
|
|
|
grep -E '<error>' /tmp/ssh_root_pub_key
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
#The message contains the data we request
|
|
|
|
cat /tmp/ssh_root_pub_key | grep -E -v '</{0,1}errorcode>|</{0,1}data>|</{0,1}content>|</{0,1}desc>' > /root/.ssh/id_rsa.pub
|
|
|
|
# no add to authorized_keys, so the node can ssh to itself
|
|
|
|
cat /tmp/ssh_root_pub_key | grep -E -v '</{0,1}errorcode>|</{0,1}data>|</{0,1}content>|</{0,1}desc>' >> /root/.ssh/authorized_keys
|
|
|
|
logger -t xCAT -p local4.info ssh_root_pub_key
|
|
|
|
MYCONT=`cat /root/.ssh/id_rsa.pub`
|
|
|
|
MAX_RETRIES=10
|
|
|
|
RETRY=0
|
|
|
|
while [ -z "$MYCONT" ]; do
|
|
|
|
if [ $useflowcontrol = "0" ]; then
|
|
|
|
let SLI=$RANDOM%10
|
|
|
|
let SLI=SLI+10
|
|
|
|
sleep $SLI
|
|
|
|
fi
|
|
|
|
RETRY=$(($RETRY+1))
|
|
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
|
|
then
|
|
|
|
break
|
|
|
|
fi
|
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
getcredentials.awk $rootsshpubkey | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /root/.ssh/id_rsa.pub
|
|
|
|
getcredentials.awk $rootsshpubkey | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" >> /root/.ssh/authorized_keys
|
|
|
|
MYCONT=`cat /root/.ssh/id_rsa.pub`
|
|
|
|
done
|
|
|
|
else
|
|
|
|
#This is an error message
|
|
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /tmp/ssh_root_pub_key`
|
|
|
|
logger -t xCAT -p local4.err $rootsshpubkey Error: $ERR_MSG
|
|
|
|
fi
|
|
|
|
rm /tmp/ssh_root_pub_key
|
|
|
|
|
|
|
|
# if sshbetweennodes is enabled then we get id_rsa ( private key)
|
2013-10-17 15:46:12 +00:00
|
|
|
if [ $ENABLESSHBETWEENNODES = "YES" ]; # want nodes to be able to ssh to each other without password
|
2010-11-01 19:12:36 +00:00
|
|
|
then
|
2014-03-03 18:29:29 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell:sshbetweennodes is yes"
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
2013-10-09 19:26:55 +00:00
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
fi
|
2014-03-03 18:29:29 +00:00
|
|
|
getcredentials.awk $rootsshpvtkey | grep -E -v '</{0,1}xcatresponse>|</{0,1}serverdone>'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /tmp/ssh_root_key
|
2009-05-12 12:18:12 +00:00
|
|
|
|
2014-03-03 18:29:29 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: gathering $rootsshpvtkey "
|
2010-11-01 19:12:36 +00:00
|
|
|
#check whether the message is an error or not
|
|
|
|
grep -E '<error>' /tmp/ssh_root_key
|
|
|
|
if [ $? -ne 0 ]; then
|
2009-05-12 12:18:12 +00:00
|
|
|
#The message contains the data we request
|
2014-03-03 18:29:29 +00:00
|
|
|
cat /tmp/ssh_root_key | grep -E -v '</{0,1}errorcode>|/{0,1}data>|</{0,1}content>|</{0,1}desc>' > /root/.ssh/id_rsa
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -t xCAT -p local4.info ssh_root_key
|
2009-05-12 12:18:12 +00:00
|
|
|
MYCONT=`cat /root/.ssh/id_rsa`
|
2013-09-16 13:29:20 +00:00
|
|
|
MAX_RETRIES=10
|
|
|
|
RETRY=0
|
2009-05-12 12:18:12 +00:00
|
|
|
while [ -z "$MYCONT" ]; do
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "0" ]; then
|
|
|
|
let SLI=$RANDOM%10
|
|
|
|
let SLI=SLI+10
|
|
|
|
sleep $SLI
|
|
|
|
fi
|
2013-09-16 13:29:20 +00:00
|
|
|
RETRY=$(($RETRY+1))
|
|
|
|
if [ $RETRY -eq $MAX_RETRIES ]
|
|
|
|
then
|
|
|
|
break
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
if [ $useflowcontrol = "1" ]; then
|
|
|
|
#first contact daemon xcatflowrequest <server> 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
logger -t xCAT -p local4.info "remoteshell: sending xcatflowrequest $master 3001"
|
2013-10-09 19:26:55 +00:00
|
|
|
/$xcatpost/xcatflowrequest $master 3001
|
2013-10-17 15:46:12 +00:00
|
|
|
rc=$?
|
|
|
|
logger -t xCAT -p local4.info "remoteshell:xcatflowrequest return=$rc"
|
|
|
|
if [ $rc -ne 0 ]; then
|
|
|
|
logger -t xCAT -p local4.info "remoteshell: error from xcatflowrequest, will not use flow control"
|
|
|
|
useflowcontrol=0
|
|
|
|
fi
|
2013-10-09 19:26:55 +00:00
|
|
|
fi
|
2014-03-03 18:29:29 +00:00
|
|
|
getcredentials.awk $rootsshpvtkey | grep -v '<'|sed -e 's/</</' -e 's/>/>/' -e 's/&/&/' -e 's/"/"/' -e "s/'/'/" > /root/.ssh/id_rsa
|
2013-10-09 19:26:55 +00:00
|
|
|
MYCONT=`cat /root/.ssh/id_rsa`
|
2009-05-12 12:18:12 +00:00
|
|
|
done
|
2010-11-01 19:12:36 +00:00
|
|
|
else
|
2009-05-12 12:18:12 +00:00
|
|
|
#This is an error message
|
|
|
|
ERR_MSG=`sed -n 's%.*<error>\(.*\)</error>.*%\1%p' /tmp/ssh_root_key`
|
2014-03-03 18:29:29 +00:00
|
|
|
logger -t xCAT -p local4.err $rootsshpvtkey Error: $ERR_MSG
|
2010-11-01 19:12:36 +00:00
|
|
|
fi
|
|
|
|
rm /tmp/ssh_root_key
|
|
|
|
|
|
|
|
if ! grep "PRIVATE KEY" /root/.ssh/id_rsa > /dev/null 2>&1 ; then
|
|
|
|
rm /root/.ssh/id_rsa
|
|
|
|
fi
|
2014-03-03 18:29:29 +00:00
|
|
|
# if public key does not exist then generate one from the private key
|
|
|
|
if [ ! -f /root/.ssh/id_rsa.pub ]; then
|
|
|
|
if [ -r /root/.ssh/id_rsa ]; then
|
2010-11-01 19:12:36 +00:00
|
|
|
ssh-keygen -y -f /root/.ssh/id_rsa > /root/.ssh/id_rsa.pub
|
2014-03-03 18:29:29 +00:00
|
|
|
logger -t xCAT -p local4.err remoteshell:transfer of the id_rsa.pub key failed. Had to generate a public key.
|
|
|
|
fi
|
2010-11-01 19:12:36 +00:00
|
|
|
fi
|
2008-05-05 14:39:07 +00:00
|
|
|
fi
|
2009-06-04 15:33:44 +00:00
|
|
|
|
|
|
|
# start up the sshd for syncfiles postscript to do the sync work
|
2012-05-15 03:03:17 +00:00
|
|
|
logger -t xCAT -p local4.info "start up sshd"
|
2011-09-29 14:55:14 +00:00
|
|
|
|
2013-01-09 07:46:01 +00:00
|
|
|
if [[ $OSVER == ubuntu* || $OSVER == debian* ]]
|
2011-09-29 14:55:14 +00:00
|
|
|
then
|
|
|
|
if [ ! -d /var/run/sshd ]
|
|
|
|
then
|
|
|
|
mkdir /var/run/sshd
|
|
|
|
chmod 0755 /var/run/sshd
|
|
|
|
/usr/sbin/sshd -f /etc/ssh/sshd_config
|
|
|
|
else
|
2014-06-10 15:54:31 +00:00
|
|
|
#service ssh restart
|
|
|
|
restartservice ssh
|
2011-09-29 14:55:14 +00:00
|
|
|
fi
|
|
|
|
else
|
2014-06-10 15:54:31 +00:00
|
|
|
#service sshd restart
|
2013-10-21 03:02:37 +00:00
|
|
|
# sshd is not enabled on SLES 12 by default
|
|
|
|
# does not hurt anything to re-enable if it is enabled already
|
|
|
|
enableservice sshd
|
2014-06-10 15:54:31 +00:00
|
|
|
restartservice sshd
|
2011-09-29 14:55:14 +00:00
|
|
|
fi
|
2009-06-04 15:33:44 +00:00
|
|
|
|
2015-04-01 07:50:28 +00:00
|
|
|
# check whether the sshd daemon has been started successfully
|
|
|
|
# As we known that for rh7 the sshd cannot be started by systemctl in chroot mode
|
|
|
|
ps aux | grep -v grep | grep sshd
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
if [ -e "/usr/sbin/sshd" ]; then
|
|
|
|
/usr/sbin/sshd
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2008-05-01 14:45:30 +00:00
|
|
|
kill -9 $CREDPID
|