Advertisement
stuartclennett

Working SecureBridge Code

Dec 17th, 2020
650
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 2.31 KB | None | 0 0
  1. procedure TfrmSecureBridgeTest.ResetProps;
  2. begin
  3.   ScSSHClient1.HostName := '';
  4.   ScSSHClient1.User := '';
  5.   ScSSHClient1.Password := '';
  6.   ScSSHClient1.HostKeyName := '';
  7. end;
  8.  
  9. procedure TfrmSecureBridgeTest.InitConnection;
  10. var
  11.   aKey : TscKey;
  12. const
  13.   KEY_FILE_NAME: string = '.\emsb2.ppk';
  14. begin
  15.  
  16.   ResetProps;
  17.   ScSSHClient1.HostName := edthostName.text;
  18.   ScSSHClient1.User     := edtUsername.Text;  // need a valid username, but no password
  19.  
  20.   aKey := ScFileStorage1.Keys.FindKey('emsb2');
  21.   if not assigned(aKey) or (not aKey.Ready) then
  22.   begin
  23.     aKey := TscKey.Create;
  24.     aKey.KeyName := 'emsb2';
  25.     aKey.ImportFrom(KEY_FILE_NAME);
  26.     ScFileStorage1.Keys.Add(aKey);
  27.   end else
  28.     aKey.ImportFrom(KEY_FILE_NAME);
  29.  
  30.   ScSSHClient1.PrivateKeyName := aKey.KeyName;
  31.   ScSSHClient1.Authentication :=  atPublicKey;
  32.  
  33.   ScSSHClient1.Connect; // fails here.
  34.   Log('SSH Client connected');
  35.  
  36.   ScSSHChannel1.DestHost := ScSSHClient1.HostName;
  37.   ScSSHChannel1.DestPort := 3306;
  38.   ScSSHChannel1.Connect;
  39.  
  40.   Log('Channel port 3306 connected');
  41.  
  42. end;
  43.  
  44. procedure TfrmSecureBridgeTest.ScSSHClient1ServerKeyValidate(Sender: TObject; NewServerKey: TScKey; var Accept: Boolean);
  45. var
  46.   CurHostKeyName: string;
  47. begin
  48.   if ScSSHClient1.HostKeyName = EmptyStr then
  49.     CurHostKeyName := ScSSHClient1.HostName
  50.   else
  51.     CurHostKeyName := ScSSHClient1.HostKeyName;
  52.  
  53.   DoServerKeyValidate(ScSSHClient1.KeyStorage as TscFileStorage, CurHostKeyName, NewServerKey, Accept);
  54. end;
  55.  
  56. procedure TfrmSecureBridgeTest.DoServerKeyValidate(FileStorage: TscFileStorage; const HostKeyName: string; NewServerKey: TscKey; var Accept: boolean);
  57. var
  58.   Key: TscKey;
  59.   fp: string; // fingerprint
  60.   msg: string;
  61. begin
  62.   Key := FileStorage.Keys.FindKey(HostKeyName);
  63.   if (not assigned(Key)) or (not Key.Ready) or ((not assigned(key)) and not NewServerKey.Equals(Key)) then
  64.   begin
  65.     NewServerKey.GetFingerprint(haMD5, fp);
  66.     log('New server ident');
  67.     log('Fingerprint = ' + fp);
  68.     log('Key Length = ' + IntToStr(NewServerKey.BitCount) + ' bits');
  69.     log('HostKeyName = ' + HostKeyName);
  70.     Key := TscKey.Create(nil);
  71.     try
  72.       Key.assign(NewServerKey);
  73.       Key.Keyname := HostKeyName;
  74.       FileStorage.Keys.Add(Key);
  75.       Accept := TRUE;
  76.     except
  77.       key.free;
  78.       raise;
  79.     end;
  80.   end;
  81. end;
  82.  
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement