public static string[] GenerateKeyPair(string output_path, string key_name) { key_name += ".key"; string key_file_path = Path.Combine (output_path, key_name); if (File.Exists (key_file_path)) { PryanetLogger.LogInfo ("Auth", "A key pair exists ('" + key_name + "'), leaving it untouched"); return new string [] { key_file_path, key_file_path + ".pub" }; } string computer_name = System.Net.Dns.GetHostName (); if (computer_name.EndsWith (".local")) computer_name = computer_name.Substring (0, computer_name.Length - 6); string arguments = "-t rsa " + // crypto type "-P \"\" " + // empty password "-C \"" + computer_name + "\" " + // key comment "-f \"" + key_name + "\""; // file name PryanetKeyProcess process = new PryanetKeyProcess ("ssh-keygen", arguments); process.StartInfo.WorkingDirectory = output_path; process.Start (); process.WaitForExit (); if (process.ExitCode == 0) PryanetLogger.LogInfo ("Auth", "Created keypair '" + key_file_path + "'"); else PryanetLogger.LogInfo ("Auth", "Could not create key pair '" + key_file_path + "'"); return new string [] { key_file_path, key_file_path + ".pub" }; }
public static void ImportPrivateKey(string key_file_path) { // Use forward slashes when dealing with Windows domain accounts if (key_file_path.StartsWith ("\\\\")) key_file_path = key_file_path.Replace ("\\", "/"); PryanetKeyProcess process = new PryanetKeyProcess ("ssh-add", "\"" + key_file_path + "\""); process.Start (); process.WaitForExit (); if (process.ExitCode == 0) PryanetLogger.LogInfo ("Auth", "Imported key '" + key_file_path + "'"); else PryanetLogger.LogInfo ("Auth", "Could not import key '" + key_file_path + "', " + process.StandardError.ReadToEnd ()); }
public static void ListPrivateKeys() { PryanetKeyProcess process = new PryanetKeyProcess ("ssh-add", "-l"); process.Start (); string keys_in_use = process.StandardOutput.ReadToEnd (); process.WaitForExit (); PryanetLogger.LogInfo ("Auth", "The following keys may be used:\n" + keys_in_use.Trim ()); }