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

上一篇: Shell script to compare remote directories

下一篇: rsync exits with the message "stdin is not a tty"