我正在使用devart SecureBridge通过SFTP创建连接,但我在SSHClient上设置身份验证类型时遇到了问题。
当我尝试没有时,它给了我一个例外:'主机密钥算法的协商失败'。我想它试图使用私钥/公钥,但我希望它使用密码验证。
这是我的代码,我希望有人可以指导我朝正确的方向发展。
oSSHClient := TScSSHClient.Create(nil);
oSFTPClient := nil;
oFileStorage := nil;
oFileStorage := TScFileStorage.Create(nil);
oSSHClient.KeyStorage := oFileStorage;
iColon := pos(':', edHost.text);
oSSHClient.HostName := edHost.Text;
if iColon > 0 then
begin
oSSHClient.Port := StrToIntDef(copy(edHost.Text, iColon+1, length(edHost.Text)), 22);
end;
oSSHClient.User := edUser.Text;
oSSHClient.Password := edPassword.Text;
oSSHClient.Authentication := oSSHClient.Authentication.atPassword; // How am i supposed to set this
oSSHClient.Connect;
编辑:其他人的工作代码:
oSSHClient := TScSSHClient.Create(nil);
oFileStorage := nil;
try
oFileStorage := TScFileStorage.Create(nil);
oSSHClient.KeyStorage := oFileStorage;
iColon := pos(':', edHost.text);
oSSHClient.HostName := edHost.Text;
if iColon > 0 then
begin
oSSHClient.Port := StrToIntDef(copy(edHost.Text, iColon+1, length(edHost.Text)), 22);
end;
oSSHClient.User := edUser.Text;
oSSHClient.Password := edPassword.Text;
oSSHClient.HostKeyAlgorithms.AsString:='ssh-rsa,ssh-dss';
oSSHClient.OnServerKeyValidate := ScSSHClientServerKeyValidate;
oSSHClient.Authentication := atPassword;
try
try
oSSHClient.Connect;
TestErrorTekst := GetLang('CaptConnectToServerOK');
except
TestErrorTekst := GetLang('CaptConnectToServerFailed');
end;
finally
oSSHClient.Disconnect;
end;
finally
edTest.Text := TestErrorTekst;
oSSHClient.Free;
oFileStorage.Free;
end;
答案 0 :(得分:1)
我想你不应该设置身份验证。
你可以尝试两件事。设置正确的算法
oSSHClient.HostKeyAlgorithms.AsString:='ssh-rsa,ssh-dss';
或禁用密钥的验证。将ScSSHClientServerKeyValidate过程中的Accept设置为True。
procedure TForm1.ScSSHClientServerKeyValidate(Sender: TObject;
NewServerKey: TScKey; var Accept: Boolean);
begin
Accept:=True;
end;