Skip to content

Instantly share code, notes, and snippets.

@lauer
Created August 23, 2011 12:11
Show Gist options
  • Save lauer/1164958 to your computer and use it in GitHub Desktop.
Save lauer/1164958 to your computer and use it in GitHub Desktop.
copy unix users member of a specific group to another server
#!/bin/sh
# Move users from a specific group to an other server, including their
# .ssh-files. The script was created for migration of svn users to an
# other server.
# version 0.0.5
# Created by Jesper Grann Laursen <powerlauer@gmail.com>
# Gist: https://gist.github.com/1164958
# --- TODO ---
# * Ensure that users and groups not already are on the remote server
# * Update users homedir path in passwd on remote server
# * Test! :)
# --- Setup ---
# Group name to copy users
groupname="svn"
# lists of members
users=$(grep $groupname /etc/group |cut -f 4 -d ':'|sed 's/,/|/g')
# tmpdir
tmpdir="~/tmp/MOVE"
remotetmpdir="MOVE"
# --- Action ----
echo "Save userdata to $tmpdir"
if [ "$(id -u)" != "0" ]; then
echo "Need to be root!"
exit 1
fi
mkdir -p $tmpdir
# Copy users and group
awk -v USERS=$users -F: '$1 ~ "^("USERS")$" {print $0}' /etc/passwd >$tmpdir/passwd.move
awk -v GROUP=$groupname -F: '$1 ~ "^("GROUP")$" {print $0}' /etc/group >$tmpdir/group.move
# Shadow files
awk -v USERS=$users -F: '$1 ~ "^("USERS")$" {print $0}' /etc/shadow >$tmpdir/shadow.move
awk -v GROUP=$groupname -F: '$1 ~ "^("GROUP")$" {print $0}' /etc/gshadow >$tmpdir/gshadow.move
# Copy userdirs
userdatalist=$(awk -v USERS=$users -F: '$1 ~ "^("USERS")$" {print $1","$6}' /etc/passwd)
newuserlist=""
for userdata in $userdatalist; do
user=$(echo "$userdata" | cut -f 1 -d ',')
userdir=$(echo $userdata | cut -f 2 -d ',')
if [ -r $userdir/.ssh ]; then
cd $userdir
tar -zcpf $tmpdir/$user.tar.gz .ssh
echo "Saved: " $tmpdir/$user.tar.gz
fi
newuserlist="$newuserlist $user"
done
# done copy
echo "Done copying to $tmpdir"
echo "---"
echo "Complete the move by moving the files to the new server"
echo "scp -r $tmpdir $(whoami)@server:$remotetmpdir"
echo "Run these commands as root on the _remote_ server"
echo "-"
cat << EOF
cat $remotetmpdir/passwd.move >>/etc/passwd
cat $remotetmpdir/group.move >>/etc/group
cat $remotetmpdir/shadow.move >>/etc/shadow
cat $remotetmpdir/gshadow.move >>/etc/gshadow
EOF
# export userdirs
if [ ! -z "$newuserlist" ]; then
cat << EOF
cd $remotetmpdir
for user in $newuserlist; do
mkdir -p /home/\$user
chown -R \$user /home/\$user
cd /home/\$user
if [ -f $remotetmpdir/\$user.tar.gz ]; then
tar -zxvf $remotetmpdir/\$user.tar.gz
fi
done
EOF
fi
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment