Ok Here is a script to add a user to a linux system
And my question is is there a way for this script to add a user to the linux system that it is running on and add the same user to another Linux system?
#!/bin/bash
#
# adduser 1.4: a utility to add users to the system
#
# Copyright (C) 1994 Ian A. Murdock <imurdock@shell.portal.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Written for the Debian Linux distribution (01/21/94). Feel free to use
# it in YOUR distribution, too.
Please note that this is just a simple
# script that _somewhat_ automates the really boring and repetitive task
# of creating new user accounts. It makes no attempt to be sophisticated.
# Let me know if you improve it in any way.
#
# I need to write a man page for this.
#
# Modified by Marc Ewing <marc@redhat.com> for Red Hat Linux
# Modified by Michael K. Johnson <johnsonm@redhat.com> for optional
# shadow password support.
# Modified by Michael K. Johnson <johnsonm@redhat.com> to make it safer
# Everything happens too fast, so don't let the user interrupt.
trap "" 1 2 3 15
# Set a few important variables before getting started.
NUMARG=$#
LOGIN="$1"
EXIST=0
UNAME="$2"
NOHOME="$3"
PASSWD="/etc/passwd"
PBAK="/etc/passwd-" # Some programs use /etc/passwd-, others use
# /etc/passwd.OLD. Take your pick.
PNEW="/etc/passwd.new"
SHADOW="/etc/shadow"
SBAK="/etc/shadow-"
SNEW="/etc/shadow.new"
GROUP="/etc/group"
GBAK="/etc/group-"
GNEW="/etc/group.new"
#PLOCK="/etc/.pwd.lock" # Standard method of locking the password file.
PLOCK="/etc/.plock" # softlink to .pwd.lock
DSHELL="/bin/bash"
DHOME="/home"
SKEL="/etc/skel"
SPOOL="/var/spool/mail"
FIRST_UID=500
FIRST_GID=500
# A few sanity checks...
if [ `id -u` != 0 ]; then
echo "Only root may add users to the system." ; exit 1
fi
if [ $NUMARG = 0 ]; then
echo "You need to specify the login to add; for example, \`adduser redneck'." ; exit 1
# this is the donnie memorial shell script...
fi
if id "$LOGIN" >/dev/null 2>&1 ; then
echo "User $LOGIN already exists"
exit 1
fi
#if [ $(echo "$LOGIN" | wc -c | tr -d ' ') -gt 9 ] ; then
# # that 9 is intentional -- it counts the newline, too...
# echo "$LOGIN is over eight characters"
# exit 1
#fi
if echo "$LOGIN" | grep -q : ; then
echo "$LOGIN contains a \`:' character"
exit 1
fi
id $LOGIN >/dev/null 2>/dev/null && EXIST=1
if [ $EXIST = 1 ]; then
echo "The login $LOGIN already exists."
exit 1
fi
if ln -s /etc/host $PLOCK; then : ; else
echo "$PASSWD is locked. Try again later." ; exit 1
fi
die ()
{
rm -f $PLOCK
exit 1
}
# And now the program begins:
echo "" ; echo -n "Looking for first available UID..."
NUID=`cut -f 3 -d ":" $PASSWD | sort -n | awk -v uid=$FIRST_UID '
{ if ($1 == uid) uid = uid + 1; }
END { print uid; }
'`
if [ $NUID -ge 65535 ]; then
echo "Sorry, ran out of uids."
die
fi
echo " $NUID"
echo -n "Looking for first available GID..."
NGID=`cut -f 3 -d ":" $GROUP | sort -n | awk -v gid=$FIRST_GID '
{ if ($1 == gid) gid = gid + 1; }
END { print gid; }
'`
if [ $NGID -lt $FIRST_GID ]; then
NGID=$FIRST_GID
fi
if [ $NGID -ge 65535 ]; then
echo "Sorry, ran out of gids."
die
fi
echo " $NGID"
echo "" ; echo -n "Adding login: $LOGIN..."
cp $PASSWD $PBAK || die
cp $PASSWD $PNEW || die
if [ -f "$SHADOW" ] ; then
echo "$LOGIN:x:$NUID:$NGID:$UNAME:$DHOME/$LOGIN:$DSHELL" | cat >> $PNEW || die
# need cat because echo won't return a return code
cp $SHADOW $SBAK || die
cp $SHADOW $SNEW || die
# The date invocation is non-standard, but works with GNU date.
# It fills in the "last changed" field with the number of DAYS
# since epoch (86400 seconds per day; %s is second since epoch).
echo "$LOGIN::$(($(date '+%s')/86400))::::::" | cat >> $SNEW || die
else
echo "$LOGIN:*:$NUID:$NGID:$UNAME:$DHOME/$LOGIN:$DSHELL" | cat >> $PNEW || die
fi
# Add user to users group
cp $GROUP $GBAK || die
cp $GROUP $GNEW || die
sed "s/^\(users:.*[^:]\)\$/\1,$LOGIN/"'
'"s/^\(users:.*:\)\$/\1$LOGIN/" < $GBAK > $GNEW || die
echo "$LOGIN::$NGID:$LOGIN" | cat >> $GNEW || die
mv $GNEW $GROUP
if [ -f "$SHADOW" ] ; then
mv $SNEW $SHADOW
fi
mv $PNEW $PASSWD
rm -f $PLOCK
echo "done."
if [ "x$NOHOME" = "x" ]; then
echo -n "Creating home directory: $DHOME/$LOGIN..."
mkdir $DHOME/$LOGIN
chmod 2775 $DHOME/$LOGIN
cp -a $SKEL/.??* $SKEL/* $DHOME/$LOGIN >/dev/null 2>/dev/null
chown -R $NUID.$NGID $DHOME/$LOGIN
chown root $DHOME/$LOGIN/.bash_profile
mkdir /home/$LOGIN/$LOGIN
cp -r /home/httpd/html/generic/* /home/$LOGIN/$LOGIN
chown -R $NUID.$NGID /home/$LOGIN/$LOGIN
ln -s $DHOME/$LOGIN/$LOGIN /home/httpd/html/$LOGIN
# fix directory so is not world writeable, and is not sticky
chmod g-w,-s $DHOME/$LOGIN
echo "done."
fi
echo -n "Creating mailbox: $SPOOL/$LOGIN..."
touch $SPOOL/$LOGIN ; chmod 660 $SPOOL/$LOGIN ; chown $NUID.mail $SPOOL/$LOGIN
echo "done."
echo ""
echo "Don't forget to set the password."
if [ "x$NOHOME" != "x" ]; then
echo ""
echo "The home directory for $LOGIN was set to $DHOME/$LOGIN but the directory"
echo "was not created. Be sure that you set it up properly."
fi
#passwd $LOGIN
#chfn $LOGIN
# Mailout for new users
perl /home/httpd/cgi-bin/cti/mailout.pl $LOGIN
# EOF
And my question is is there a way for this script to add a user to the linux system that it is running on and add the same user to another Linux system?
#!/bin/bash
#
# adduser 1.4: a utility to add users to the system
#
# Copyright (C) 1994 Ian A. Murdock <imurdock@shell.portal.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
# Written for the Debian Linux distribution (01/21/94). Feel free to use
# it in YOUR distribution, too.
# script that _somewhat_ automates the really boring and repetitive task
# of creating new user accounts. It makes no attempt to be sophisticated.
# Let me know if you improve it in any way.
#
# I need to write a man page for this.
#
# Modified by Marc Ewing <marc@redhat.com> for Red Hat Linux
# Modified by Michael K. Johnson <johnsonm@redhat.com> for optional
# shadow password support.
# Modified by Michael K. Johnson <johnsonm@redhat.com> to make it safer
# Everything happens too fast, so don't let the user interrupt.
trap "" 1 2 3 15
# Set a few important variables before getting started.
NUMARG=$#
LOGIN="$1"
EXIST=0
UNAME="$2"
NOHOME="$3"
PASSWD="/etc/passwd"
PBAK="/etc/passwd-" # Some programs use /etc/passwd-, others use
# /etc/passwd.OLD. Take your pick.
PNEW="/etc/passwd.new"
SHADOW="/etc/shadow"
SBAK="/etc/shadow-"
SNEW="/etc/shadow.new"
GROUP="/etc/group"
GBAK="/etc/group-"
GNEW="/etc/group.new"
#PLOCK="/etc/.pwd.lock" # Standard method of locking the password file.
PLOCK="/etc/.plock" # softlink to .pwd.lock
DSHELL="/bin/bash"
DHOME="/home"
SKEL="/etc/skel"
SPOOL="/var/spool/mail"
FIRST_UID=500
FIRST_GID=500
# A few sanity checks...
if [ `id -u` != 0 ]; then
echo "Only root may add users to the system." ; exit 1
fi
if [ $NUMARG = 0 ]; then
echo "You need to specify the login to add; for example, \`adduser redneck'." ; exit 1
# this is the donnie memorial shell script...
fi
if id "$LOGIN" >/dev/null 2>&1 ; then
echo "User $LOGIN already exists"
exit 1
fi
#if [ $(echo "$LOGIN" | wc -c | tr -d ' ') -gt 9 ] ; then
# # that 9 is intentional -- it counts the newline, too...
# echo "$LOGIN is over eight characters"
# exit 1
#fi
if echo "$LOGIN" | grep -q : ; then
echo "$LOGIN contains a \`:' character"
exit 1
fi
id $LOGIN >/dev/null 2>/dev/null && EXIST=1
if [ $EXIST = 1 ]; then
echo "The login $LOGIN already exists."
exit 1
fi
if ln -s /etc/host $PLOCK; then : ; else
echo "$PASSWD is locked. Try again later." ; exit 1
fi
die ()
{
rm -f $PLOCK
exit 1
}
# And now the program begins:
echo "" ; echo -n "Looking for first available UID..."
NUID=`cut -f 3 -d ":" $PASSWD | sort -n | awk -v uid=$FIRST_UID '
{ if ($1 == uid) uid = uid + 1; }
END { print uid; }
'`
if [ $NUID -ge 65535 ]; then
echo "Sorry, ran out of uids."
die
fi
echo " $NUID"
echo -n "Looking for first available GID..."
NGID=`cut -f 3 -d ":" $GROUP | sort -n | awk -v gid=$FIRST_GID '
{ if ($1 == gid) gid = gid + 1; }
END { print gid; }
'`
if [ $NGID -lt $FIRST_GID ]; then
NGID=$FIRST_GID
fi
if [ $NGID -ge 65535 ]; then
echo "Sorry, ran out of gids."
die
fi
echo " $NGID"
echo "" ; echo -n "Adding login: $LOGIN..."
cp $PASSWD $PBAK || die
cp $PASSWD $PNEW || die
if [ -f "$SHADOW" ] ; then
echo "$LOGIN:x:$NUID:$NGID:$UNAME:$DHOME/$LOGIN:$DSHELL" | cat >> $PNEW || die
# need cat because echo won't return a return code
cp $SHADOW $SBAK || die
cp $SHADOW $SNEW || die
# The date invocation is non-standard, but works with GNU date.
# It fills in the "last changed" field with the number of DAYS
# since epoch (86400 seconds per day; %s is second since epoch).
echo "$LOGIN::$(($(date '+%s')/86400))::::::" | cat >> $SNEW || die
else
echo "$LOGIN:*:$NUID:$NGID:$UNAME:$DHOME/$LOGIN:$DSHELL" | cat >> $PNEW || die
fi
# Add user to users group
cp $GROUP $GBAK || die
cp $GROUP $GNEW || die
sed "s/^\(users:.*[^:]\)\$/\1,$LOGIN/"'
'"s/^\(users:.*:\)\$/\1$LOGIN/" < $GBAK > $GNEW || die
echo "$LOGIN::$NGID:$LOGIN" | cat >> $GNEW || die
mv $GNEW $GROUP
if [ -f "$SHADOW" ] ; then
mv $SNEW $SHADOW
fi
mv $PNEW $PASSWD
rm -f $PLOCK
echo "done."
if [ "x$NOHOME" = "x" ]; then
echo -n "Creating home directory: $DHOME/$LOGIN..."
mkdir $DHOME/$LOGIN
chmod 2775 $DHOME/$LOGIN
cp -a $SKEL/.??* $SKEL/* $DHOME/$LOGIN >/dev/null 2>/dev/null
chown -R $NUID.$NGID $DHOME/$LOGIN
chown root $DHOME/$LOGIN/.bash_profile
mkdir /home/$LOGIN/$LOGIN
cp -r /home/httpd/html/generic/* /home/$LOGIN/$LOGIN
chown -R $NUID.$NGID /home/$LOGIN/$LOGIN
ln -s $DHOME/$LOGIN/$LOGIN /home/httpd/html/$LOGIN
# fix directory so is not world writeable, and is not sticky
chmod g-w,-s $DHOME/$LOGIN
echo "done."
fi
echo -n "Creating mailbox: $SPOOL/$LOGIN..."
touch $SPOOL/$LOGIN ; chmod 660 $SPOOL/$LOGIN ; chown $NUID.mail $SPOOL/$LOGIN
echo "done."
echo ""
echo "Don't forget to set the password."
if [ "x$NOHOME" != "x" ]; then
echo ""
echo "The home directory for $LOGIN was set to $DHOME/$LOGIN but the directory"
echo "was not created. Be sure that you set it up properly."
fi
#passwd $LOGIN
#chfn $LOGIN
# Mailout for new users
perl /home/httpd/cgi-bin/cti/mailout.pl $LOGIN
# EOF