Ubuntu16.04下SSH用-i可连EC2,-F指定配置文件失败求助
问题分析与解决办法
你的核心问题是SSH配置文件里用错了指令,导致SSH没有正确加载你的EC2私钥文件,进而出现Permission denied (publickey)错误。
错误原因
你在配置里写了CertificateFile ~/Desktop/ssh_keys/prod.pem,但这个指令是用来指定SSH证书文件的,而你手里的prod.pem是EC2实例的私钥文件,应该用IdentityFile指令来指定私钥路径。
修正后的配置文件
把你的scp_config改成下面这样:
Host prod HostName ***.***.***.*** User ec2-user IdentityFile ~/Desktop/ssh_keys/prod.pem
额外注意事项
- 私钥文件权限必须正确:SSH对私钥文件的权限要求很严格,必须设置为
600(只有你自己能读写),否则会被拒绝使用。执行以下命令修复权限:chmod 600 ~/Desktop/ssh_keys/prod.pem - 避免用sudo执行ssh/scp:从调试日志里的
permanently_set_uid: 0/0可以看出,你可能用sudo运行了命令,这时候~会指向root的家目录,而不是你的用户目录,导致私钥路径找不到。如果必须用sudo,把配置里的路径换成绝对路径(比如/home/你的用户名/Desktop/ssh_keys/prod.pem)。
验证方法
修改完成后,执行以下命令测试连接:
ssh -F ~/Desktop/ssh_keys/scp_config prod
如果要传输文件,使用scp的命令格式如下:
# 本地文件传到远程服务器 scp -F ~/Desktop/ssh_keys/scp_config /本地文件路径 prod:/远程服务器路径 # 远程服务器文件传到本地 scp -F ~/Desktop/ssh_keys/scp_config prod:/远程文件路径 /本地保存路径
内容的提问来源于stack exchange,提问作者Dmitrii Sidenko
相关产品推荐
相关产品推荐

