aws ec2的key pairs的深入理解

ssh

提到ssh,用过linux的应该都不陌生。通俗地说,就是通过工具生成一个key pair,linux server端存储public key,client端保留一个private key。通过支持ssh协议的客户端工具(putty,tera term)或者命令行工具(ssh),login到server的时候,需要输入linux用户名,同时选择一个保存private key的文件。只有private key和public key匹配成功,才会login成功。

aws key pairs

aws里面的key pairs,其实就是ssh的public key和private key。只是aws可以通过console界面来生成和管理,向使用者屏蔽了ssh复杂的技术细节,这一点也是面向服务思想的一个体现吧。

在创建ec2实例的时候,会提示你create key pair,所以说key pair资源是用来绑定到ec2 instance上的。

同一个key pair可以绑定到多个ec2 instance。而且,一个instance内部的多个os用户也可以使用同一个key pair。虽然从安全角度,aws是不推荐这么共用key pair的。

不过,通过ec2的console,只能绑定一个key pair,如果每个ec2 os用户需要使用自己单独的key pair的话,该怎么办呢?别急,有好几种方法可以搞定。

 1〉最直接的方法

手工编辑~/.ssh/authorized_keys文件。把每个用户的public key配置信息追加进来。

2〉创建ec2 instance的时候,通过Advanced instance options中的User Data界面,配置cloud-init directive脚本。不过user data中的脚本只在创建instance的时候执行一次。

此外,除了cloud-init directive,User Data还支持shell script,如果使用aws cli创建instance的话,也可以指定本地的脚本文件,当然文件内容既可以是shell script,也可以是cloud-init directive。

其实,aws ec2和key pairs,说白了,就是传统linux os和ssh的一种面向服务的包装而已。

常用的一些小技巧

1〉通过private key,获取public key

ssh-keygen -y

Enter file in which the key is:my-private.pem

ssh-rsa xxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzz

2>aws cli获取key pairs信息

>set http_proxy=myproxy.com:9999

>set https_proxy=myproxy.com:9999

>aws configure

  AWS Access Key ID [****************xxxx]:

  AWS Secret Access Key [****************yyyy]:

  Default region name [None]: ap-northeast-1

  Default output format [None]: json

查看所有的key pair信息

>aws ec2 describe-key-pairs

查看指定的key pair信息

>aws ec2 describe-key-pairs --key-name mykey

从返回结果中可以发现有一个KeyFingerprint(通过aws console查看也可以发现),这个fingerprint是针对public key生成的一个指纹信息,用于辅助校验key pair的安全性。一般在在第一次发起ssh连接的时候,server端会把这个fingerprint信息存储在client端,ssh客户端以后每次连接的时候会比较一下本地cache的fingerprint与server端返回的是否一致,如果不一致,会提醒用户核实情况再发起连接。

查看public key的fingerprint的方法

--client端

ssh-keygen -lf authorized_keys

--sshd daemon

ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub

相关推荐