Need help with scripting mass file edits..


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need help with scripting mass file edits..
# 15  
Old 08-15-2007
Quote:
Originally Posted by ghostdog74
Code:
change1="User_Alias SOME_ADMINS = user1"
awk -v c="$change1" '{print}
/User alias specification/{print c}
' "file" > temp
mv temp file

change2="User_Alias THOSE_ADMINS = user2"
awk -v c="$change2" '{print}
/User alias specification/{print c}
' "file" > temp
mv temp file

How would I run this remotely with ssh on multiple servers?

Last edited by LinuxRacr; 08-15-2007 at 03:23 PM..
# 16  
Old 08-15-2007
Ended up pushing the file out to all the servers, and running a remote ssh to execute them. Worked like a charm. I was more comfortable using Ghostdog74's method, and adapting it to fit my needs. Here is the way I did it below. You just have to make sure all your sudoers files are uniform across your environment first:

Here's how I pushed the files out to the servers:

NOTE: This is assuming you have your ssh key from your jump server distributed to the rest of the hosts, so you don't have to use a password to login.
Code:
#!/bin/ksh

for i in `serverlist.txt`
do
echo $i
ssh $i "/etc/change_sudo.sh"
echo
done > change_sudo.output


change_sudo.sh
Code:
#!/bin/ksh

cd /etc
cp sudoers sudoers.safe

change0="Host_Alias LOCALHOST = `hostname`"
awk -v c="$change0" '{print}
/# Host alias specification/{print c}
' "sudoers" > temp.sudoers
mv temp.sudoers sudoers
chown root:root sudoers
chmod 440 sudoers

change1="User_Alias  ADMINS = someuser"
awk -v c="$change1" '{print}
/# User alias specification/{print c}
' "sudoers" > temp.sudoers
mv temp.sudoers sudoers
chown root:root sudoers
chmod 440 sudoers

sleep 02

change2="Cmnd_Alias MISC_CMDS =  /usr/bin/make, /usr/bin/chmod, /usr/bin/awk, /usr/bin/cat,/usr/bin/chown, /usr/bin/cp, /usr/bin/cut, /usr/bin/diff,/usr/bin/grep, /usr/bin/ls, /usr/bin/mv, /usr/bin/rm,/usr/bin/sed, /usr/bin/sleep, /usr/bin/sort, /usr/bin/tail,/bin/echo, /bin/touch, /usr/bin/which"
awk -v c="$change2" '{print}
/# Cmnd alias specification/{print c}
' "sudoers" > temp.sudoers
mv temp.sudoers sudoers
chown root:root sudoers
chmod 440 sudoers

sleep 02

change3="Cmnd_Alias PROTECTED_CMDS = !/usr/bin/passwd root, !/usr/bin/rm -rf /*, !/usr/bin/chown root"
awk -v c="$change3" '{print}
/# Cmnd alias specification/{print c}
' "sudoers" > temp.sudoers
mv temp.sudoers sudoers
chown root:root sudoers
chmod 440 sudoers

sleep 02

change4="Cmnd_Alias ADMN_CMDS = /usr/sbin/groupadd, /usr/sbin/groupdel, /usr/sbin/groupmod, /usr/bin/last, /usr/bin/listusers, /usr/sbin/logins, /usr/sbin/usermod, /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd, /usr/bin/ypmatch, /usr/bin/yppasswd,/usr/sbin/ypcat, /usr/bin/login"
awk -v c="$change4" '{print}
/# Cmnd alias specification/{print c}
' "sudoers" > temp.sudoers
mv temp.sudoers sudoers
chown root:root sudoers
chmod 440 sudoers

sleep 02

change5="ADMINS  LOCALHOST = MISC_CMDS,ADMIN_CMDS"
awk -v c="$change5" '{print}
/# User privilege specification/{print c}
' "sudoers" > temp.sudoers
mv temp.sudoers sudoers
chown root:root sudoers
chmod 440 sudoers

And here was the result:

Sudoers File Before:

#Host alias specification

# User alias specification

#Cmnd alias specification

# User privilege specification

Sudoers File After:

#Host alias specification
Host_Alias LOCALHOST = servername

# User alias specification
User_Alias ADMINS = someuser

#Cmnd alias specification

Cmnd_Alias ADMIN_CMDS = /usr/sbin/groupadd, /usr/sbin/groupdel, /usr/sbin/groupmod, /usr/bin/last, /usr/bin/listusers, /usr/sbin/logins, /usr/sbin/usermod, /usr/sbin/useradd, /usr/sbin/userdel, /usr/bin/passwd, /usr/bin/ypmatch, /usr/bin/yppasswd,/usr/sbin/ypcat, /usr/bin/login
Cmnd_Alias PROTECTED_CMDS = !/usr/bin/passwd root, !/usr/bin/rm -rf /*, !/usr/bin/chown root
Cmnd_Alias MISC_CMDS = /usr/bin/make, /usr/bin/chmod, /usr/bin/awk, /usr/bin/cat,/usr/bin/chown, /usr/bin/cp, /usr/bin/cut, /usr/bin/diff,/usr/bin/grep, /usr/bin/ls, /usr/bin/mv, /usr/bin/rm,/usr/bin/sed, /usr/bin/sleep, /usr/bin/sort, /usr/bin/tail,/bin/echo, /bin/touch, /usr/bin/which

# User privilege specification
ADMINS LOCALHOST = MISC_CMDS,ADMIN_CMDS

Last edited by LinuxRacr; 08-16-2007 at 12:16 AM..
# 17  
Old 08-15-2007
Excellent.

Thanks for posting your solution back for the benefit of others.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

[solved]removing characters from a mass of file names

I found a closed thread that helped quite a bit. I tried adding the URL, but I can't because I don't have enough points... ? Modifying the syntax to remove ! ~ find . -type f -name '*~\!]*' | while IFS= read -r; do mv -- "$REPLY" "${REPLY//~\!]}"; done These messages are... (2 Replies)
Discussion started by: rabidphilbrick
2 Replies

2. UNIX for Dummies Questions & Answers

multiple text edits inone pass

File_1 looks like: bunch of text Untitled Placemark bunch of text bunch of text Untitled Placemark bunch of text bunch of text Untitled Placemark bunch of text File_2 looks like: Title_001 Title_002 Title_003 First: I need to replace the 1st occurence of "Untitled Placemark"... (2 Replies)
Discussion started by: kenneth.mcbride
2 Replies

3. Homework & Coursework Questions

K&R C code edits

1. The problem statement, all variables and given/known data: 2. Relevant commands, code, scripts, algorithms: We have to do this using 'unix tools' and not use the script as if it were C. Meaning, he wants more uses of grep, sed, awk, cut, etc... than he does while, for, do's and done's.... (23 Replies)
Discussion started by: theexitwound
23 Replies

4. UNIX for Dummies Questions & Answers

OpenLDAP DB_CONFIG edits, changes live? or do I need run something

So I am probably missing something , but when I made edits to my DB_CONFIG file to fix form db_lock issues, the changes are not propagating after a service restart. Anyone know if I need to run anything else, or are the changes live? (0 Replies)
Discussion started by: jcejka
0 Replies

5. Shell Programming and Scripting

Multiple edits to a bunch of html files

I'm trying to upgrade a whole bunch of pages on my site to a new design. I thought one way of doing it would be to enclose the content in special comment tags and then use some form of script to wrap the new html around it. Like this: <!-- content start --> <h1>Blah blah blah</h1> yada yada... (9 Replies)
Discussion started by: dheian
9 Replies

6. Shell Programming and Scripting

mass file mv

I have 100k+ files in a directory. I wanna create new directories and move each 2500 files into a new directory. Thank you very much. (2 Replies)
Discussion started by: Sean2008
2 Replies

7. UNIX for Dummies Questions & Answers

Mass file renaming

Hi :) Is there any command I could use to rename a bunch of files resident of the same location to their original name plus a fixed text string of my own? Example: File1 File2 File3 Output: File1.txt File2.txt File3.txt This is easy using a "for" loop but what I want is a one-line... (5 Replies)
Discussion started by: Indalecio
5 Replies

8. AIX

VI questions : mass changes, mass delete and external insert

Is it possible in VI to do a global change but take the search patterns and the replacement patterns from an external file ? I have cases where I can have 100,200 or 300+ global changes to do. All the new records are inside a file and I must VI a work file to change all of them. Also, can... (1 Reply)
Discussion started by: Browser_ice
1 Replies

9. UNIX for Dummies Questions & Answers

mass delete a certain string in a .log file

Hey all. I have a file that has roughly 115,000 lines in it. There are a few lines of information that I don't want in it, but I don't want to search through all of the lines to find the ones that I don't want. Is there a way to do a mass delete of the lines that I don't want? Thanks for the... (4 Replies)
Discussion started by: jalge2
4 Replies
Login or Register to Ask a Question