命令不会在脚本中运行

时间:2015-01-06 20:51:59

标签: linux shell ssh

我正在尝试在shell脚本中运行命令,但它无法正常工作。

shell中脚本的外侧我可以在所需的主机上运行以下命令。使用正确的信息创建文件。

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

当我的脚本中运行命令时,我首先ssh然后运行命令,但是我收到以下错误。

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

这是脚本的一部分。我尝试过使用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
...

导致权限被拒绝错误的原因是什么?

2 个答案:

答案 0 :(得分:3)

不要使用硬编码的临时文件名 - 当你这样做时,这意味着如果一个用户(比如你的开发帐户)已经运行了这个脚本并且留下了一个名为/tmp/expirelist.txt的文件,那么其他任何用户都无法运行相同的脚本。

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

通过使用mktemp,您可以保证每次调用都会使用新的,不同的,以前不存在的临时文件,从而防止发生冲突。


顺便说一下 - 如果你想在远程系统而不是本地系统上创建文件,你需要这样做:

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

答案 1 :(得分:-1)

我不确定这一点,但你可能会遇到在脚本中使用'sudo'的问题。您可以尝试从脚本中删除“sudo”,然后像这样运行它:

$ sudo checkP.sh