以下脚本有助于检查ssh对当前用户的访问权限,还可以在当前工作目录中查找文件。
#!/bin/sh
if [ $# -eq 0 ]
then
echo "Provide input file containing list of machine names"
elif [ -f $1 ]
then
for host in $(cat $1)
do
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $host echo ok 2>&1) # successful ssh prints ok in the status variable
# echo $status
if [ "$status" == "ok" ]
then
echo "In"
result=$(find /home/hkc -name "findme.txt") # Command not working from script, whereas its working from command prompt
# result=$(find . -print | grep -i findme)
echo $result
else
echo $status
fi
done
else
echo "File not found"
fi
预期o / p:
find . -name "find*"
./findme.txt
./find.txt
实际o / p:
hkc@client ~]$ ./ssh_access.sh machine_names.txt
In
find: ‘/home/hkc/Downloads/copy_docu/newdir3’: Permission denied
find: ‘/home/hkc/Downloads/copy_docu/newdir4’: Permission denied
find: ‘/home/hkc/Downloads/copy_docu/tmp’: Permission denied
该命令无法找到文件。请帮助我找到错误。
答案 0 :(得分:0)
您似乎在本地计算机和远程计算机上都有一个/home/hkc
。您希望find /home/hkc -name "findme.txt"
在远程主机上执行,但是实际上,它不在本地主机上执行。
在您的代码中,您的ssh会话实际上以以下行开始和结束:
status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $host echo ok 2>&1)
您的本地脚本仍在处理下一行(if ...
)。
所以,我建议您更改:
result=$(find /home/hkc -name "findme.txt")
具有:
result=$(ssh -o BatchMode=yes -o ConnectTimeout=5 "$host" "find /home/hkc -name findme.txt" 2>&1)
(顺便说一句,除非您知道自己在做什么,否则总是引用变量!=> "$host"
,而不是$host
)