【问题标题】:Shell script to compare remote directories用于比较远程目录的 Shell 脚本
【发布时间】:2013-12-24 18:44:00
【问题描述】:

我有一个用来比较目录内容的 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 列表效果很好。我也收到错误“不会分配伪终端,因为标准输入不是终端”。将 -t -t 添加到 ssh 命令也无济于事 谢谢

【问题讨论】:

  • 使用 dirdiff 之类的东西,或者如果您愿意,有一个非常不错的 ViM 插件 DirDiff
  • @AlexejMagura,我不/不能安装任何插件。我的问题是 ssh 命令。它正在列出运行脚本的主机的 /tmp,而不是我打算在其上运行 ls 命令的远程主机
  • 为什么 ssh 命令周围有反引号?
  • 打开set -vx 以调试/跟踪您的脚本。您需要看到/tmp 在发送到ssh user@host 的cmd 中,这只是获取正确引用的问题。您发布的问题掩盖了您的问题,将其归结为某人可以从他们的 cmd 行执行的内容。祝你好运。
  • @shellter,在命令行上,ssh user@$SERVER1 'ls -l /tmp' 执行得很好。我还添加了密钥等,并且没有提示输入密码。我有反勾号以便执行命令。

标签: linux bash shell ssh diff


【解决方案1】:

为了执行命令,我有反勾号。

执行命令不需要反引号 - 它们用于将命令的标准输出扩展到命令行。当然,您不希望 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)。

【讨论】:

    【解决方案2】:

    首先您需要生成密钥以在没有密钥的情况下登录远程

    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;
    

    【讨论】:

    • 我可以很好地登录远程机器。只是 ls 在本地而不是在远程服务器上运行。在命令行上,ssh+ls 工作正常。
    • 我将问题缩小到 $COMPDIR 没有在 ssh user@$SERVER1 'ls -l $COMPDIR' 中进行评估这一事实。是否有一个原因?您能告诉我如何在其位置传递目录名称吗?
    • 我添加了以下内容,现在 ls 远程执行 ssh npandit@$SERVER1ls -l $COMPDIR ENDSSH echo $FILES >> "1.txt" 但是我如何获取列表要写入本地文件的文件?
    猜你喜欢
    • 2019-06-29
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-18
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多