Sample code for 30+ languages & platforms
PHP

Generate DSA SSH Key

See more SSH Key Examples

Generates a DSA SSH key and saves to various public and private key file formats (OpenSSH and PuTTY).

Chilkat PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\SshKey;

$key = new SshKey();

// numBits should be a minimum of 1024 and
// a multiple of 64.  Typical values are
// 1024 or 2048.
$numBits = 2048;
try {
    $key->GenerateDsaKey($numBits);
} catch (\Chilkat2\Exception $e) {
    echo "Invalid numBits passed to DSA key generation method.\n";
    exit;
}

// Note: Generating a public/private key pair is CPU intensive
// and may take a short amount of time (more than few seconds,
// but less than a minute).

// Export the DSA private key to OpenSSH, PuTTY, and XML and save.
$exportEncrypted = false;
$exportedKey = $key->ToOpenSshPrivateKey($exportEncrypted);
// Chilkat provides a SaveText method for convenience...
$key->SaveText($exportedKey, 'privkey_openssh_unencrypted.pem');

// Export with encryption to OpenSSH private key format:
$key->Password = 'secret';
$exportEncrypted = true;
$exportedKey = $key->ToOpenSshPrivateKey($exportEncrypted);
$key->SaveText($exportedKey, 'privkey_openssh_encrypted.pem');

// Export the DSA private key to unencrypted PuTTY format:
$exportEncrypted = false;
$exportedKey = $key->ToPuttyPrivateKey($exportEncrypted);
$key->SaveText($exportedKey, 'privkey_putty_unencrypted.ppk');

// Export the DSA private key to encrypted PuTTY format:
$key->Password = 'secret';
$exportEncrypted = true;
$exportedKey = $key->ToPuttyPrivateKey($exportEncrypted);
$key->SaveText($exportedKey, 'privkey_putty_encrypted.ppk');

// Export private key to XML:
$exportedKey = $key->ToXml();
$key->SaveText($exportedKey, 'privkey.xml');

// ----------------------------------------------------
// Now for the public key....
// ----------------------------------------------------

// The Secure Shell (SSH) Public Key File Format
// is documented in RFC 4716.
$exportedKey = $key->ToRfc4716PublicKey();
$key->SaveText($exportedKey, 'pubkey_rfc4716.pub');

// OpenSSH has a separate public-key file format, which
// is also supported by Chilkat SshKey:
$exportedKey = $key->ToOpenSshPublicKey();
$key->SaveText($exportedKey, 'pubkey_openSsh.pub');

echo "Finished.\n";