SpruceTips
SpruceTips

Reputation: 225

Command wont run in script

I am trying to run a command in a shell script but it is not working.

Out side of the script in the shell I can run the following command on the needed host. The file is created with the correct information inside.

sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt

When the command is run in my script I first ssh over then run the command but I get the following error.

[batch@testserver01 bin]$ checkP.sh
Testserver02
/usr/local/bin/checkP.sh: line 7: /tmp/expirelist.txt: Permission denied

Here is a part of the script. I have tried using ssh -o

#!/bin/bash

for SERVER in `cat /admin/lists/testlist`
do
  echo $SERVER

  ssh $SERVER sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d > /tmp/expirelist.txt
...

What is causing the Permission denied error?

Upvotes: 0

Views: 80

Answers (2)

Charles Duffy
Charles Duffy

Reputation: 295291

Don't use hardcoded temporary filenames -- when you do, it means that if one user (say, your development account) already ran this script and left a file named /tmp/expirelist.txt behind, no other user can run the same script.

tempfile=$(mktemp -t expirelist.XXXXXX)
ssh "$SERVER" sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >"$tempfile"

By using mktemp, you guarantee that each invocation will use a new, distinct, and previously-nonexisting temporary file, preventing any chance of conflict.


By the way -- if you want the file to be created on the remote system rather than the local system, you'd want to do this instead:

ssh "$SERVER" <<'EOF'
tempfile=$(mktemp -t expirelist.XXXXXX)
sudo cat /etc/shadow | cut -d: -f1,8 | sed /:$/d >"$tempfile"
EOF

Upvotes: 3

Aidan H.
Aidan H.

Reputation: 75

I'm not sure about this, but you could be running into an issue with having the 'sudo' within your script. You could try removing the 'sudo' from the script, and running it like this:

$ sudo checkP.sh

Upvotes: -1

Related Questions