2016-08-23 25 views
0

私はdevart SecureBridgeを使用してSFTP経由の接続を作成していますが、SSHClientの認証タイプを設定する際に問題があります。設定認証タイプSFTP接続delphi

私が試してみると、例外はあります: 'ホスト鍵アルゴリズムのネゴシエーションが失敗しました'。私はそれがプライベート/公開鍵を使用しようとしていると思うが、パスワード認証を使用したい。

ここに私のコードですが、私は誰かが正しい方向に私を導くことを願っています。

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; 

EDIT:WORKING CODE OTHERSが見FOR:

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

他に誰も飛び込んでいないので、私は明確ではない専門家として意見を述べます。認証はSSL(Secure Sockets Layer)と関係があり、パスワードとは関係ないことは私の理解である。これは暗号化技術であり、クライアントとサーバー間でデータが安全に渡されることを保証します。パスワードは、データが安全であることと同様に、そのデータを使用している人がFTPサイトにアクセスする権利があることを保証するためのセキュリティの追加層です。 – Dsm

答えて

1

私はあなたが認証を設定するべきではないと仮定します。

2つのことを試すことができます。正しいアルゴリズムを設定する

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

キーの有効化を無効にするか、無効にします。 ScSSHClientServerKeyValidateプロシージャのAcceptをTrueに設定します。

procedure TForm1.ScSSHClientServerKeyValidate(Sender: TObject; 
    NewServerKey: TScKey; var Accept: Boolean); 
begin 
    Accept:=True; 
end; 
+0

scSSHCLientServerKeyValidateを無駄に設定しようとしました。 最初の例で書いた文字列を理解できません。あなたはそれを説明してもらえますか? –

+0

これは、キーのどのアルゴリズムが使用されるかを設定します。 – smooty86

+0

さて、うまくいきました。両方をやらなければならなかったようですが、私はあなたの答えを受け入れて、他の人が見ることができる完全なコードで質問を編集しています。ありがとうございます –

関連する問題