Sample code for 30+ languages & platforms
Pascal (Lazarus/Delphi)

Load SSH Keys Produced by ssh-keygen

See more SSH Key Examples

Demonstrates how to load the public and private keys produced by ssh-keygen.

Chilkat Pascal (Lazarus/Delphi) Downloads

Pascal (Lazarus/Delphi)
program ChilkatDemo;

// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.

{$IFDEF FPC}
  {$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  SysUtils,
  CkDllLoader,
  Chilkat.SshKey;

// ---------------------------------------------------------------------------

procedure RunDemo;
var
  success: Boolean;
  pubkey: TSshKey;
  privkey: TSshKey;

begin
  success := False;

  //  This example assumes the Chilkat API to have been previously unlocked.
  //  See Global Unlock Sample for sample code.

  //  We first generate a key like this:

  //      ssh-keygen -f stg.chilkat.id
  //      Generating public/private rsa key pair.
  //      Enter passphrase (empty for no passphrase):
  //      Enter same passphrase again:
  //      Your identification has been saved in stg.chilkat.id.
  //      Your public key has been saved in stg.chilkat.id.pub.
  //      The key fingerprint is:
  //      SHA256:hkbgexkspxYTa8rYUxouRU8Gi7lbbsT6dSLX+JlStKk me@example02240
  //      The key's randomart image is:
  //      +---[RSA 2048]----+
  //      |  o.=            |
  //      | + * =           |
  //      |o + X =          |
  //      | O * O.+         |
  //      |+ @ +.=oS        |
  //      | A o =+.         |
  //      |o + =oo          |
  //      | o +E+ o         |
  //      |  .  .+          |
  //      +----[SHA256]-----+

  //  

  //  The public key (generated to the file stg.chilkat.id.pub) contains this:
  //  ssh-rsa AAAAB3NzaC1yc2EAAAADAQABA.. FDt+dKJEkhw8I7LpEi17diB9 me@example02240

  //  First let's load the public key:
  pubkey := TSshKey.Create;

  success := pubkey.FromOpenSshPublicKey(pubkey.LoadText('qa_data/sshKeys/ssh-keygen/stg.chilkat.id.pub'));
  if (success = False) then
    begin
      WriteLn(pubkey.LastErrorText);
      Exit;
    end;

  WriteLn(pubkey.LastErrorText);
  WriteLn('Successfully loaded the public key.');

  //  Now try the private key, which contains this:

  //  -----BEGIN OPENSSH PRIVATE KEY-----
  //  b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn
  //  NhAAAAAwEAAQAAAQEArNH9CpKhVgpGbOEDaFH4CaL9iQE6IwVYqKFkcF9qdHc6XA+J9PeR
  //  9CMvTtVWm/uCYsoYzRkitNIEokjxFwyQwJeng+qWh5t538Ji3v64ls0mgsdvecyYDYjU8T
  //  mqhivXk/DzNBUOuyN5ksP0ZmRJLuZ4J6MKCrPugvKsE4zDQkg7/lKUL40ugjpoYJnhRjHv
  //  uogSkcecq6Kdw20WdRWTFvXiRH8mdh9cVWi3fvj0sly0CDghmuWyjvcrIOuixvy8kfADva
  //  tDAyF1se0r8WW9xZzUYHjuCzxbI+yfU3xS9/vX9T9IG10ocSbqrBgd/xQ7fnSiRJIcPCOy
  //  6RIte3YgfQAAA9BXf/XaV3/12gAAAAdzc2gtcnNhAAABAQCs0f0KkqFWCkZs4QNoUfgJov
  //  2JATojBViooWRwX2p0dzpcD4n095H0Iy9O1Vab+4JiyhjNGSK00gSiSPEXDJDAl6eD6paH
  //  m3nfwmLe/riWzSaCx295zJgNiNTxOaqGK9eT8PM0FQ67I3mSw/RmZEku5ngnowoKs+6C8q
  //  wTjMNCSDv+UpQvjS6COmhgmeFGMe+6iBKRx5yrop3DbRZ1FZMW9eJEfyZ2H1xVaLd++PSy
  //  XLQIOCGa5bKO9ysg66LG/LyR8AO9q0MDIXWx7SvxZb3FnNRgeO4LPFsj7J9TfFL3+9f1P0
  //  gbXShxJuqsGB3/FDt+dKJEkhw8I7LpEi17diB9AAAAAwEAAQAAAQAPUtNAA75gdarG7rCx
  //  qEr498XJRx2Ti17QHPdd62fyCbxX+1y9JtJ/Njt0nv/99rAZ+Fd4oBjutYyJozQVWhzfpt
  //  LIpJ1SStvklkTUBvvxCyG2CN7+isCUuqQ++2D+YpbL3FqELLXQrBWUiOF7zrqaeP8AbLlw
  //  N4IXhFLzrNCHaODsbYAh8U1nOj1PvUO24quCzPRPH/LcERvgXeGEJSYoB0nwwKGppIpBnv
  //  jV5wvuhPdQVvN14e8SOodK76InfaGUsCUwr2ksaGhsTCGk7yCsyQUyzzV8InQ3CTPkLf9J
  //  BnBpymoyB/r3LnefX4AgKA7nplCRUANLbvTACTazHtcBAAAAgQCihdCPzywEkrn0VhYIOV
  //  sK7oIUD/EBEzb7yL+7naZqACStbhKiLKGgSJj2+3hgmQk2tZ94zN5lkCcLLFy9Ai47HkN+
  //  dSmZqac5pQeVyWrJ/67OSqWxMFfjkbF/0IxXJM2y+i//vGWBDo3NJmkYGwY+XnFP81qqh9
  //  boeQA0K6wn0wAAAIEA2tX2lZrwAyhl/L5XY1xsQ3uuoaIUeZD0vUs+mAv1pz8fbTAD2n37
  //  Rh57mxDNQIwiD8lV5wZ20NP03nAr8gUQaijsBRy3gDXHX7Qa/BaJ2bY0492HXwVYi9bsng
  //  GJQinYjmJQQeR/w4u5rNzuD8y1ysMwh/sE8IGu6LLG1IBDYr0AAACBAMord/G9vderFO+1
  //  tNZHl09m9mFLJTHRVH41Da2uCl2KJnYir511M9GSG9Un6L+UGu4F9CrypehgJHZ6QbwpgS
  //  JrwlCfE09jPkuH0aktg9fnrrEJYS30wWNNSj1v/91v1F3fdrZePd+UnKcP6zZB3jICzPhW
  //  elU1OYdWf+qFrnDBAAAAGWRqYWNrc29uMDIyQGRqYWNrc29uMDIyNDAB
  //  -----END OPENSSH PRIVATE KEY-----

  privkey := TSshKey.Create;

  success := privkey.FromOpenSshPrivateKey(pubkey.LoadText('qa_data/sshKeys/ssh-keygen/stg.chilkat.id'));
  if (success = False) then
    begin
      WriteLn(privkey.LastErrorText);
      Exit;
    end;

  WriteLn(privkey.LastErrorText);
  WriteLn('Successfully loaded the private key.');


  pubkey.Free;
  privkey.Free;

end;

// ---------------------------------------------------------------------------

begin

  try
    RunDemo;
  except
    on E: Exception do
      WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
  end;

  WriteLn;
  {$IFDEF MSWINDOWS}
  WriteLn('Press Enter to exit...');
  ReadLn;
  {$ENDIF}
end.