创建和显示密钥对 - Amazon SDK for .NET
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

是否要将 .NET 应用程序部署到Amazon通过几个简单点击即可? 尝试我们的新.NET CLI 工具为了简化部署体验!阅读我们的博客帖子然后提交反馈GitHub

有关更多信息,请参阅部署工具

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建和显示密钥对

此示例向您演示如何使用Amazon SDK for .NET创建 key pair。应用程序使用新 key pair 的名称和 PEM 文件的名称(扩展名为 “.pem”)。它创建密钥对,将私钥写入 PEM 文件,然后显示所有可用的密钥对。如果没有提供命令行参数,应用程序只会显示所有可用的密钥对。

以下几节提供了此示例的片段。这些区域有:例子的完整代码在此之后显示,并且可以按原样构建和运行。

创建 key pair

以下代码段创建一个 key pair,然后将私钥存储到给定的 PEM 文件中。

这个示例本主题末尾显示了这个片段正在使用中。

// // Method to create a key pair and save the key material in a PEM file private static async Task CreateKeyPair( IAmazonEC2 ec2Client, string keyPairName, string pemFileName) { // Create the key pair CreateKeyPairResponse response = await ec2Client.CreateKeyPairAsync(new CreateKeyPairRequest{ KeyName = keyPairName }); Console.WriteLine($"\nCreated new key pair: {response.KeyPair.KeyName}"); // Save the private key in a PEM file using (var s = new FileStream(pemFileName, FileMode.Create)) using (var writer = new StreamWriter(s)) { writer.WriteLine(response.KeyPair.KeyMaterial); } }

显示可用密钥对

以下代码段显示了可用密钥对的列表。

这个示例本主题末尾显示了这个片段正在使用中。

// // Method to show the key pairs that are available private static async Task EnumerateKeyPairs(IAmazonEC2 ec2Client) { DescribeKeyPairsResponse response = await ec2Client.DescribeKeyPairsAsync(); Console.WriteLine("Available key pairs:"); foreach (KeyPairInfo item in response.KeyPairs) Console.WriteLine($" {item.KeyName}"); }

代码完成

本节显示了此示例的相关参考文献和完整代码。

using System; using System.Threading.Tasks; using System.IO; using Amazon.EC2; using Amazon.EC2.Model; using System.Collections.Generic; namespace EC2CreateKeyPair { // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // Class to create and store a key pair class Program { static async Task Main(string[] args) { // Create the EC2 client var ec2Client = new AmazonEC2Client(); // Parse the command line and show help if necessary var parsedArgs = CommandLine.Parse(args); if(parsedArgs.Count == 0) { // In the case of no command-line arguments, // just show help and the existing key pairs PrintHelp(); Console.WriteLine("\nNo arguments specified."); Console.Write( "Do you want to see a list of the existing key pairs? ((y) or n): "); string response = Console.ReadLine(); if((string.IsNullOrEmpty(response)) || (response.ToLower() == "y")) await EnumerateKeyPairs(ec2Client); return; } // Get the application arguments from the parsed list string keyPairName = CommandLine.GetArgument(parsedArgs, null, "-k", "--keypair-name"); string pemFileName = CommandLine.GetArgument(parsedArgs, null, "-p", "--pem-filename"); if(string.IsNullOrEmpty(keyPairName)) CommandLine.ErrorExit("\nNo key pair name specified." + "\nRun the command with no arguments to see help."); if(string.IsNullOrEmpty(pemFileName) || !pemFileName.EndsWith(".pem")) CommandLine.ErrorExit("\nThe PEM filename is missing or incorrect." + "\nRun the command with no arguments to see help."); // Create the key pair await CreateKeyPair(ec2Client, keyPairName, pemFileName); await EnumerateKeyPairs(ec2Client); } // // Method to create a key pair and save the key material in a PEM file private static async Task CreateKeyPair( IAmazonEC2 ec2Client, string keyPairName, string pemFileName) { // Create the key pair CreateKeyPairResponse response = await ec2Client.CreateKeyPairAsync(new CreateKeyPairRequest{ KeyName = keyPairName }); Console.WriteLine($"\nCreated new key pair: {response.KeyPair.KeyName}"); // Save the private key in a PEM file using (var s = new FileStream(pemFileName, FileMode.Create)) using (var writer = new StreamWriter(s)) { writer.WriteLine(response.KeyPair.KeyMaterial); } } // // Method to show the key pairs that are available private static async Task EnumerateKeyPairs(IAmazonEC2 ec2Client) { DescribeKeyPairsResponse response = await ec2Client.DescribeKeyPairsAsync(); Console.WriteLine("Available key pairs:"); foreach (KeyPairInfo item in response.KeyPairs) Console.WriteLine($" {item.KeyName}"); } // // Command-line help private static void PrintHelp() { Console.WriteLine( "\nUsage: EC2CreateKeyPair -k <keypair-name> -p <pem-filename>" + "\n -k, --keypair-name: The name you want to assign to the key pair." + "\n -p, --pem-filename: The name of the PEM file to create, with a \".pem\" extension."); } } // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = // Class that represents a command line on the console or terminal. // (This is the same for all examples. When you have seen it once, you can ignore it.) static class CommandLine { // // Method to parse a command line of the form: "--key value" or "-k value". // // Parameters: // - args: The command-line arguments passed into the application by the system. // // Returns: // A Dictionary with string Keys and Values. // // If a key is found without a matching value, Dictionary.Value is set to the key // (including the dashes). // If a value is found without a matching key, Dictionary.Key is set to "--NoKeyN", // where "N" represents sequential numbers. public static Dictionary<string,string> Parse(string[] args) { var parsedArgs = new Dictionary<string,string>(); int i = 0, n = 0; while(i < args.Length) { // If the first argument in this iteration starts with a dash it's an option. if(args[i].StartsWith("-")) { var key = args[i++]; var value = key; // Check to see if there's a value that goes with this option? if((i < args.Length) && (!args[i].StartsWith("-"))) value = args[i++]; parsedArgs.Add(key, value); } // If the first argument in this iteration doesn't start with a dash, it's a value else { parsedArgs.Add("--NoKey" + n.ToString(), args[i++]); n++; } } return parsedArgs; } // // Method to get an argument from the parsed command-line arguments // // Parameters: // - parsedArgs: The Dictionary object returned from the Parse() method (shown above). // - defaultValue: The default string to return if the specified key isn't in parsedArgs. // - keys: An array of keys to look for in parsedArgs. public static string GetArgument( Dictionary<string,string> parsedArgs, string defaultReturn, params string[] keys) { string retval = null; foreach(var key in keys) if(parsedArgs.TryGetValue(key, out retval)) break; return retval ?? defaultReturn; } // // Method to exit the application with an error. public static void ErrorExit(string msg, int code=1) { Console.WriteLine("\nError"); Console.WriteLine(msg); Environment.Exit(code); } } }

其他注意事项

  • 创建 key pair 时,您必须保存返回的私有密钥,因为以后您无法检索私有密钥。