lichuanlong00 2017-06-26
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