Настройка типа аутентификации 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;