AWS .pem文件本地存储位置及EC2免密SSH缓存文件路径查询
关于AWS .pem文件的存储位置
首先,你最初下载的.pem文件位置完全取决于你下载时的选择——默认情况下,浏览器会把它存到系统的默认下载目录:
- Windows:
C:\Users\[你的用户名]\Downloads - macOS/Linux:
~/Downloads
不过通常大家会把.pem文件移动到更安全且SSH能自动识别的目录,比如~/.ssh/(Linux/macOS)或者C:\Users\[你的用户名]\.ssh\(Windows),因为SSH客户端默认会扫描这个目录寻找密钥文件,方便后续使用。
无需指定.pem就能SSH登录EC2的原因及相关存储/缓存说明
你猜的“缓存”其实不完全是磁盘上的文件,主要有这几种情况:
SSH代理(ssh-agent)已加载密钥
如果你之前用过ssh-add ~/path/to/your/key.pem命令把密钥添加到ssh-agent,那么这个密钥会被临时存在内存缓存里(不会写到磁盘文件),SSH客户端在连接时会自动从agent获取密钥,所以不需要每次指定-i参数。- 重启系统后,ssh-agent的内存缓存会清空,除非你配置了自动加载(比如macOS可以把密钥存入钥匙串,Linux可以在
.bashrc/.zshrc里添加自动加载命令)。
- 重启系统后,ssh-agent的内存缓存会清空,除非你配置了自动加载(比如macOS可以把密钥存入钥匙串,Linux可以在
配置了SSH config文件
如果你在~/.ssh/config(Linux/macOS)或者C:\Users\[你的用户名]\.ssh\config(Windows)里添加了类似下面的配置,SSH会自动匹配对应的Host并使用指定的密钥:Host my-ec2-instance HostName [EC2实例的公网IP/域名] User ec2-user(或者ubuntu,取决于实例的AMI) IdentityFile ~/.ssh/your-key.pem这种情况下,你只需要输入
ssh my-ec2-instance就能登录,不需要手动指定密钥文件,这个config文件是存在磁盘上的,不是缓存。EC2实例已添加你的公钥到authorized_keys
还有一种可能是,你第一次登录后,把.pem对应的公钥(可以用ssh-keygen -y -f your-key.pem导出)添加到了EC2实例上~/.ssh/authorized_keys文件里,之后即使不用这个.pem,只要你本地的SSH客户端有对应的私钥(不管是在.ssh目录还是agent里),就能自动登录。
内容的提问来源于stack exchange,提问作者Ian Sharp

