Created
August 23, 2011 12:11
-
-
Save lauer/1164958 to your computer and use it in GitHub Desktop.
copy unix users member of a specific group to another server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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 <[email protected]> | |
# 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