FTP副本,检查完整性和删除

问题描述 投票:0回答:1
lftp

连接到远程服务器的方法,并确保以下步骤:


复制文件从FTP服务器到我的本地计算机。

    检查下载的文件是否正常(即md5checksum)。
  1. 如果下载良好,然后从FTP服务器删除下载的文件。

  2. 每天将从我本地的机器执行此例程。最好的选择是什么?是否有一个工具可以使所有3个步骤进行抽象?
  3. 我正在客户端和服务器机上运行Linux。

    update:此外,我还有一个文本文件,该文件包含ftpserver上的文件与其MD5sum之间的关联。它们是在FTP服务器端计算的。

  4. 首先,确保您的远程服务器完全支持校验和计算。许多人没有。我相信甚至没有标准FTP命令来计算远程文件的校验和。有很多建议,并且有许多专有解决方案。
  5. 最新提议是:

    https://datatracker.ietf.org/doc/html/draft-bryan-ftpext-hash-02

因此,即使您的服务器支持校验和计算,您也必须找到一个支持同一命令的客户端。

可用于计算校验和的命令的某些命令是:

XSHA1

XSHA256

ftp checksum ftp-client
1个回答
5
投票

XMD5

MD5
XCRC

HASH

。 您可以通过WINSCP对其进行测试。 WINSCP支持所有前面提到的命令。测试其

检查函数或

checksum
脚本命令
。如果它们正常工作,则可以启用logging
并检查,Winscp对您的服务器使用了什么命令和哪些语法。
ftp
(既不是Windows也不 *NIX版本),也不是支持校验和计算,更不用说自动验证已下载的文件。 我甚至都不知道可以自动验证下载文件的任何其他客户端。
您绝对可以在某些功能丰富的客户端的帮助下脚本脚本。
我在OP指定他/她在Linux上之前写了这个答案。我要保留Windows解决方案,以防万一它对他人有帮助。 windows,您可以使用winscp .net汇编= powershell脚本脚本script。
lftp
您可以像以下方式运行:
param (
    $sessionUrl = "ftp://username:[email protected]/",
    [Parameter(Mandatory)]
    $localPath,
    [Parameter(Mandatory)]
    $remotePath,
    [Switch]
    $pause = $False
)
 
try
{
    # Load WinSCP .NET assembly
    Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")
 
    # Setup session options
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.ParseUrl($sessionUrl);
 
    $session = New-Object WinSCP.Session
 
    try
    {
        # Connect
        $session.Open($sessionOptions)
        
        Write-Host "Downloading $remotePath to $localPath..."
        $session.GetFiles($remotePath, $localPath).Check();

        # Calculate remote file checksum
        $buf = $session.CalculateFileChecksum("sha-1", $remotePath)
        $remoteChecksum = [BitConverter]::ToString($buf)
        Write-Host "Remote file checksum:     $remoteChecksum"

        # Calculate local file checksum
        $sha1 = [System.Security.Cryptography.SHA1]::Create()
        $localStream = [System.IO.File]::OpenRead($localPath)
        $localChecksum = [BitConverter]::ToString($sha1.ComputeHash($localStream))
        Write-Host "Downloaded file checksum: $localChecksum"

        # Compare cheksums
        if ($localChecksum -eq $remoteChecksum)
        {
            Write-Host "Match, deleting remote file"

            $session.RemoveFiles($remotePath).Check();
            $result = 0
        }
        else
        {
            Write-Host "Does NOT match"
            $result = 1
        }
    }
    finally
    {
        # Disconnect, clean up
        $session.Dispose()
    }
}
catch [Exception]
{
    Write-Host "Error: $($_.Exception.Message)"
    $result = 1
}
 
# Pause if -pause switch was used
if ($pause)
{
    Write-Host "Press any key to exit..."
    [System.Console]::ReadKey() | Out-Null
}
 
exit $result

这部分基于WINSCP示例: 通过SFTP/FTP协议验证远程文件的校验和

(我是winscp上的作者)
后来编辑了该问题,说OP具有带有校验和的文本文件。这使它成为一个完全不同的问题。只需下载文件,计算本地校验和将其与文本文件中的校验和进行比较。如果匹配,请删除远程文件。


that是一个远射,但是如果服务器支持

Php

,则可以利用它。

将以下作为
powershell -file checksum.ps1 -remotePath ./file.dat -localPath C:\path\file.dat
文件(例如,

php

)的文件夹与您的

check.php

文件相同的文件:


name_of_file.txt

,然后访问页面<? php echo md5_file('name_of_file.txt'); php>

,您应该获取文件的MD5哈希。 相关问题:

使用Apache FTPCLIENT
ftp服务器中的计算文件校验和

如何在SFTP文件传输期间执行校验和数据完整性?
https://serverfault.com/q/98597/401691


最新问题
© www.soinside.com 2019 - 2024. All rights reserved.