![使用 korn shell 通过 sftp 比较本地和远程 MD5](https://linux22.com/image/140448/%E4%BD%BF%E7%94%A8%20korn%20shell%20%E9%80%9A%E8%BF%87%20sftp%20%E6%AF%94%E8%BE%83%E6%9C%AC%E5%9C%B0%E5%92%8C%E8%BF%9C%E7%A8%8B%20MD5.png)
我需要在本地文件和我刚刚推送的远程文件之间创建和检查校验和。如果 MD5 检查通过,则继续,否则中断。这需要在 KORN shell 脚本中,因为我们使用的是 AIX 机器。
这是我到目前为止的代码:
for file in <<Directory>>; do
-- Get MD5 of local file
LOCALMD5=!chsum "$(basename "$file")"
sftp <<USER>>@<<IP>> <<EOF
PUT file <<SFTP OUTPUT FOLDER>>
REMOTEMD5= <<<COMMAND HERE>>>> <<--- Which command?
IF [[LOCALMD5!=REMOTEMD5]]; THEN
RETURNVALUE = -1
BREAK
done
print RETURNVALUE
如何获取远程MD5校验和?
答案1
既然你说:我刚刚推送的远程文件,在 sftp 上(基于 ssh 代码),任何文件差异的概率都极低。与两个不同文件的 md5 具有相同哈希值的概率一样低(数量级)。
而且,简短的答案是:
一个sftp 会话不允许远程执行命令。因此,如果您无法通过 ssh 连接到计算机,则无法远程运行 md5。
因此,要检查远程文件,您需要将其读回,恕我直言,这似乎很愚蠢。
那么,唯一的方法就是:
ssh user@remote-dns-name
一旦进入打开的 shell,执行您需要的命令:
$ cd path/to/file
$ csum -h MD5 >MD5-hashsum-filename
然后,将创建的文件复制回本地计算机。