scp command inside bash script not working under non-root user - linux

I wrote a bash script which should move a file to remote server.
this is my code:
#!/bin/sh
# ensure running as root
if [ "$(id -u)" != "0" ]; then
exec sudo "$0" "$#"
fi
cat <<EOF > /etc/name.txt
EOF
sshpass -p 'password' scp -r /etc/name.txt root#192.168.1.50:/etc/name.txt
when I run this script under root user it works perfectly. but when I run this script under non-root user the scp part doesn't work. when I check $UID after this part:
if [ "$(id -u)" != "0" ]; then
exec sudo "$0" "$#"
fi
it shows 0 and $USER is root which means user changed to root but I don't know why it's not working. Any help?

Related

Working around sudo in shell script child process

So the reason I am asking this is because I'm running two programs simultaneously that are persistent, on the child process a programm is running that requires sudo rights.
#!/bin/bash
echo "Name the file:"
read filename
while [[ 1 -lt 2 ]]
do
if [ -f /home/max/dump/$filename.eth ]; then
echo "File already exist."
read filename
else
break
fi
done
#Now calling a new terminal for dumping
gnome-terminal --title="tcpdump" -e "sh /home/max/dump/dump.sh $filename.eth"
ping -c 1 0 > /dev/null **Waiting for tcpdump to create file**
#Packet analysis program is being executed
Script dump.sh
#!/bin/bash
filename=$1
echo password | sudo tcpdump -i 2 -s 60000 -w /home/max/dump/$filename -U
host 192.168.3.2
#Sudo still asks me for my password though password is piped into stdin

bash script accessing ec2 instance

This script required an ip and the script or file that we have to run on the remote server i gave a file in which i have wrote commands like
touch /root/test
ls /root/test
this make the file but do not show and it is displaying an error
tcgetattr: Inappropriate ioctl for device
connection closed
How can I resolve this is there any suggestion ??
#!/bin/bash
# The private key used to identify this machine
IDENTITY_KEY=/home/admnew.pem
syntax()
{
echo "Syntax: Ec2.sh server_ip scriptFile]"
echo "For example: ./Ec2.sh server_ip scriptFile"
exit 1
}
if [ $# -ne 2 ]
then
echo not enough arguments
syntax
fi
echo "Running script $2 on $1"
ssh -t -t -i $IDENTITY_KEY ec2-user#$1 sudo -i 'bash -s' < $2
exit
exit
echo "Done"
Try:
ssh -t -t -i $IDENTITY_KEY ec2-user#$1 sudo -i 'bash -s' <<EOF
(
$(cat "$2")
)
EOF
e.g. wrap the script into (), e.g the:
touch /root/test
ls /root/test
should be
(
touch /root/test
ls /root/test
)

shell script ssh command not working

I have a small list of servers, and I am trying to add a user on each of these servers. I can ssh individually to each server and run the command.
sudo /usr/sbin/useradd -c "Arun" -d /home/amurug -e 2014-12-12 -g users -u 1470 amurug
I wrote a script to loop through the list and run this command but I get some errors.
#!/bin/bash
read -p "Enter server list: " file
if [[ $file == *linux* ]]; then
for i in `cat $file`
do
echo "creating amurug on" $i
ssh $i sudo /usr/sbin/useradd -c "Arun" -d /home/amurug -e 2014-12-12 -g users -u 1470 amurug
echo "==============================================="
sleep 5
done
fi
When I run the script it does not execute the command.
creating amurug on svr102
Usage: useradd [options] LOGIN
Options:
What is wrong with my ssh crommand in my script?
Try this script:
#!/bin/bash
read -p "Enter server list: " file
if [[ "$file" == *linux* ]]; then
while read -r server
do
echo "creating amurug on" "$server"
ssh -t -t "$server" "sudo /usr/sbin/useradd -c Arun -d /home/amurug \
-e 2014-12-12 -g users -u 1470 amurug"
echo "==============================================="
sleep 5
done < "$file"
fi
As per man bash:
-t
Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Linux shell script hybrid graphic card

Im new to linux scripts. I need to make a script to run the following comands
sudo su
chown -R marko:marko /sys/kernel/debug;
chown marko:marko /sys/kernel/debug/vgaswitcheroo/switch;
exit;
echo ON > /sys/kernel/debug/vgaswitcheroo/switch;
echo IGD > /sys/kernel/debug/vgaswitcheroo/switch;
echo DIS > /sys/kernel/debug/vgaswitcheroo/switch;
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch;
where marko is the username of the current logged user in the system.
Thanks
I think it's better not to alter file permissions in /sys filesystem, you should write your script in a file, say switcheroo.sh, like this:
#!/bin/sh
#If not running under sudo, force sudo
[ $UID -ne 0 ] && exec sudo "$0" "$#"
echo ON > /sys/kernel/debug/vgaswitcheroo/switch
echo IGD > /sys/kernel/debug/vgaswitcheroo/switch
echo DIS > /sys/kernel/debug/vgaswitcheroo/switch
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
and then execute it using sudo ./switcheroo.sh.
You must make the script executable with the command chmod +x switcheroo.sh.

Restarting apache without being superuser

Is there any possibility to perform graceful restart and check apache config syntax without being root or having root privileges?
I have already tried to set suid bit to the script which performs restart. Here is the script itself:
#!/bin/bash
FILENAME=$1
DATE=`date +%Y%m%d`
DIRECTORY='bckp/'
if [ ! -d "$DIRECTORY" ]; then
echo "Backup directory doesn't exist. Creating one."
mkdir $DIRECTORY
fi
if [ -z "$FILENAME" -a ! -f "$FILENAME" ]; then
FILENAME="webdav.conf"
echo "No file specified. Backing up webdav.conf"
fi
REV=0
BACKUP="$FILENAME.$DATE.$REV"
while [ -f $BACKUP ]; do
let REV+=1
BACKUP="$DIRECTORY$FILENAME.$DATE.$REV"
done
cp $FILENAME $BACKUP
echo $OUTPUT
OUTPUT=$(apache2ctl configtest 2>&1)
if [ "$OUTPUT" == "Syntax OK" ]; then
echo "Syntax OK"
echo "Performing restart"
apachectl -k graceful 2>&1
fi
exit $?
here is the ls -l for this file:
-rwsrwxr-x 1 root user 645 2012-04-26 18:05 graceful-restart
When i try to run this script i get the following output:
No file specified. Backing up webdav.conf
ulimit: 88: error setting limit (Operation not permitted) Syntax OK
I'm interested if it is possible to perform what i've described.
Linux will not honor the suid bit on a shell script. Read this for more information.
A common solution for this is the sudo command. With an entry like this in /etc/sudoers:
yourname ALL = NOPASSWD:/path/to/graceful-restart
You could run:
sudo /path/to/graceful-restart
And this would run with root privileges without prompting you for a password. See the sudoers man page for more information on the syntax of the sudoers file.

Resources