Shell脚本来比较远程目录
我有一个用于比较目录内容的shell脚本。 该脚本必须ssh到不同的服务器才能获得目录列表。 当我运行下面的脚本时,我得到了我登录到/ tmp目录列表中的服务器的内容,而不是我尝试ssh登录的服务器的内容。 你能告诉我我做错了什么吗? 脚本中使用的配置文件如下所示(称为config.txt):
server1,server2,/tmp
该脚本如下
#!/bin/sh
CONFIGFILE="config.txt"
IFS=","
while read a b c
do
SERVER1=$a
SERVER2=$b
COMPDIR=$c
`ssh user@$SERVER1 'ls -l $COMPDIR'`| sed -n '1!p' >> server1.txt
`ssh user@$SERVER2 'ls -l $COMPDIR'`| sed -n '1!p' >> server2.txt
done < $CONFIGFILE
当我查看server1.txt和server2.txt的输出时,它们完全相同 - 具有运行脚本的服务器的/ tmp内容(不是server1或2)。 在命令行上执行ssh + dir列表工作得很好。 我也收到错误“由于stdin不是终端,所以不会分配伪终端”。 将-t -t添加到ssh命令中并不能帮助你。谢谢
为了执行该命令,我有后面的勾号。
反引号不需要执行命令 - 它们用于将命令的标准输出扩展到命令行。 当然你不希望你的ssh
命令的输出被解释为命令。 因此,它应该工作正常,没有反向:
ssh user@$SERVER1 "ls -l $COMPDIR" | sed -n '1!p' >>server1.txt
ssh user@$SERVER2 "ls -l $COMPDIR" | sed -n '1!p' >>server2.txt
(只要使用双引号以允许扩展$COMPDIR
)。
首先您需要生成密钥才能登录到没有密钥的远程
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
然后尝试没有通过ssh
ssh remote-host
然后尝试在脚本中调用,但首先要进行理智检查
var1=$(ssh remote-host) die "Cannot connect to remote host" unless $var1;
链接地址: http://www.djcxy.com/p/97131.html