在带有WinSCP的freeSSHD服务器上运行命令失败,原因是;您的shell可能与应用程序不兼容(建议使用BASH)";

在带有WinSCP的freeSSHD服务器上运行命令失败,原因是;您的shell可能与应用程序不兼容(建议使用BASH)";,bash,powershell,ssh,winscp,winscp-net,Bash,Powershell,Ssh,Winscp,Winscp Net,我使用下面的脚本验证远程文件和本地文件的校验和。我在机器上安装的服务器是freeshd 当我尝试使用PowerShell ISE执行以下脚本时,我收到一条错误消息: 您的shell可能与应用程序不兼容(建议使用BASH) 我已在freeshd服务器用户属性中授予shell访问权限: 脚本: param ( # Use Generate URL function to obtain a value for -sessionUrl parameter. $sessionUrl =

我使用下面的脚本验证远程文件和本地文件的校验和。我在机器上安装的服务器是freeshd

当我尝试使用PowerShell ISE执行以下脚本时,我收到一条错误消息:

您的shell可能与应用程序不兼容(建议使用BASH)

我已在freeshd服务器用户属性中授予shell访问权限:

脚本:

param (
    # Use Generate URL function to obtain a value for -sessionUrl parameter.
    $sessionUrl = "sftp://user:mypassword;fingerprint=ssh-rsa-xx-xx-xx@example.com/",
    [Parameter(Mandatory = $True)]
    $localPath,
    [Parameter(Mandatory = $True)]
    $remotePath,
    [Switch]
    $pause = $False
)

try
{
    Write-Host $localPath -foregroundcolor Gray


# Calculate local file checksum
$localChecksum = ((CertUtil -hashfile $localPath SHA1)[1] -replace " ","")

# Write-Host "Local Checksum:"
Write-Host $localChecksum

# Load WinSCP .NET assembly
#Add-Type -Path (Join-Path $PSScriptRoot "WinSCPnet.dll")
[Reflection.Assembly]::LoadFrom("\\c:\Program Files (x86)\WinSCP\WinSCPnet.dll") | Out-Null

# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.ParseUrl($sessionUrl)

$session = New-Object WinSCP.Session

try
{
    # Connect
    $session.Open($sessionOptions)

    Write-Host $remotePath -foregroundcolor Gray

    # Calculate remote file checksum
    $sha1Command = "bash sha1sum -b $remotePath | awk '{print `$1}'"

    $result = $session.ExecuteCommand($sha1Command)
    $result.Check()
    $remoteChecksum = $result.Output;
    #$remoteChecksum =
        [System.BitConverter]::ToString($session.CalculateFileChecksum("sha-1", $remotePath))

    # Write-Host "Remote Checksum:"
    Write-Host $remoteChecksum
}
finally
{
    # Disconnect, clean up
    $session.Dispose()
}

# Compare cheksums
if ($localChecksum -eq $remoteChecksum)
{
    Write-Host
    Write-Host "Match" -foregroundcolor "green"
    $result = 0
}
else
{
    Write-Host
    Write-Host "Does NOT match" -foregroundcolor "red"
    $result = 1
}
}
catch [Exception]
{
Write-Host $_.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

freeshd服务器不支持任何“bash”。它的“外壳”是Windows
cmd.exe

您的代码无法工作。Windows
cmd.exe
与WinSCP不兼容

而且freeshd是相当有缺陷的,不要使用它


您应该使用另一个Windows SSH服务器

  • 你可以用。它允许您在服务器上执行PowerShell脚本以计算校验和

    如果您安装,您甚至可能会得到
    sha1sum
    (但我不确定)

  • 如果需要在Windows上模拟*nix环境,可以使用

  • 您可以免费为个人使用。它的SFTP服务器本身支持校验和计算,因此您可以直接使用WinSCP


还有很多其他选项。

由于此消息与powershell无关,因此与FreeShd的可比性问题似乎存在。投票关闭。关于通用计算硬件和软件的问题对于堆栈溢出来说是无关紧要的,除非它们直接涉及主要用于编程的工具。你可以在什么是可比性问题上得到帮助?你是说兼容性问题吗?