Настройка типа аутентификации SFTP-соединения delphi

Я использую 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;

1 ответ

Решение

Я полагаю, вы не должны устанавливать аутентификацию.

Вы можете попробовать 2 вещи. Установите правильный алгоритм

oSSHClient.HostKeyAlgorithms.AsString:='ssh-rsa,ssh-dss';

Или отключите проверку ключа. Установите для параметра Accept в процедуре ScSSHClientServerKeyValidate значение True.

procedure TForm1.ScSSHClientServerKeyValidate(Sender: TObject;
  NewServerKey: TScKey; var Accept: Boolean);
begin
  Accept:=True;
end;
Другие вопросы по тегам