feat: ssh default public/key related operation

* if default private/public key exist
* get default private/public key or their path
* create new default SSH key
This commit is contained in:
Levi Yan
2024-10-17 12:15:32 +08:00
parent cad2a7a6f4
commit 34927df20f

View File

@@ -1,6 +1,13 @@
import { exec } from 'child_process';
import * as http from 'http';
import * as https from 'https';
import * as fs from 'fs';
import * as path from 'path';
import * as os from 'os';
import { BlobOptions } from 'buffer';
const {
generateKeyPairSync,
} = require('node:crypto')
export function fetch(url: string): Promise<string> {
// determine the library to use (based on the url protocol)
@@ -52,3 +59,63 @@ export function getVsCodeCommitId(): Promise<string> {
});
})
}
export function getDefaultPrivateKeyPath() : string{
return path.join(os.homedir(), '.ssh', 'id_rsa')
}
export function getDefaultPublicKeyPath() :string{
return path.join(os.homedir(), '.ssh', 'id_rsa.pub')
}
export function existDefaultPublicKey() :boolean{
const defaultPublicKeyPath = getDefaultPublicKeyPath();
return fs.existsSync(defaultPublicKeyPath)
}
export function existDefaultPrivateKey() :boolean{
const defaultPrivateKeyPath = getDefaultPrivateKeyPath();
return fs.existsSync(defaultPrivateKeyPath)
}
export function getDefaultPublicKey(): string {
const defaultPublicKeyPath = getDefaultPublicKey();
return fs.readFileSync(defaultPublicKeyPath, 'utf-8');
}
export function getDefaultPrivateKey(): string {
const defaultPrivateKey = getDefaultPrivateKeyPath();
return fs.readFileSync(defaultPrivateKey, 'utf-8');
}
export function createSSHKey() {
if (!existDefaultPublicKey() || existDefaultPrivateKey()) {
// if public or private key exists, stop
return;
}
const {
publicKey,
privateKey,
} = generateKeyPairSync('rsa', {
modulusLength: 4096,
publicKeyEncoding: {
type: 'spki',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
cipher: 'aes-256-cbc',
passphrase: 'devstar'
},
});
try {
fs.writeFileSync(getDefaultPublicKeyPath(), publicKey);
fs.writeFileSync(getDefaultPrivateKeyPath(), privateKey);
} catch(error) {
console.error("Failed to write public/private key into the default ssh public/key file: ", error);
}
}