AWS跨区域免费版Ubuntu服务器SSH连接超时与权限拒绝问题求助
我之前也碰到过类似的跨区域AWS实例连接问题,结合你给出的错误信息,咱们一步步来排查解决:
一、先搞定SSH连接超时(Connection timed out)
这个是最核心的问题,连不上服务器的话,公钥部署自然也会失败。主要排查这几点:
检查目标实例的安全组入站规则
AWS安全组是第一道关卡!你得确保目标服务器(172.31.94.158)的安全组允许来自源服务器的SSH请求:- 登录AWS控制台,找到目标实例对应的安全组
- 添加一条入站规则:协议选
SSH(TCP 22),源地址填源服务器的公网IP/32(如果你们用公网连接);如果是跨VPC的场景,得先建立VPC peering,然后把源VPC的CIDR作为源地址 - 顺便确认下源服务器的出站规则,默认安全组一般允许所有出站,但最好确认下TCP 22端口是开放的
注意跨区域私有IP的限制
你用的172.31.94.158是私有IP对吧?不同AWS区域的VPC私有IP段是完全独立的,默认情况下跨区域私有IP是无法直接访问的!如果你们没有配置VPC peering或者VPN,得改用目标实例的公网IP来连接。确认目标实例状态正常
去AWS控制台看看目标实例是不是处于running状态,系统检查有没有报错,比如实例有没有被冻结(免费层资源不足的话偶尔会出现)。
二、解决ssh-copy-id的权限拒绝(Permission denied (publickey))
等SSH连接能通之后,如果还是碰到这个错误,按下面步骤来:
先确认源服务器有SSH密钥对
执行ls ~/.ssh/看看有没有id_rsa和id_rsa.pub文件,如果没有,先生成一对:ssh-keygen -t rsa -b 4096一路回车就行,不用设密码(方便后续Ansible自动连接)。
确保目标服务器允许公钥登录
先手动用密码登录目标服务器(如果还能登的话),修改SSH配置:- 编辑配置文件:
sudo nano /etc/ssh/sshd_config - 确保这几项是开启的:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2 PasswordAuthentication yes # 先开着密码登录,等公钥部署完再关掉更安全 - 重启SSH服务生效:
sudo systemctl restart sshd
- 编辑配置文件:
正确执行ssh-copy-id命令
要指定公钥文件,并且用目标实例的公网IP(如果跨区域没VPC peering的话):ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@<目标实例的公网IP>输入目标服务器ubuntu用户的密码,就能把公钥部署到目标服务器的
~/.ssh/authorized_keys里了。
三、Ansible连接问题收尾
等SSH能正常免密登录后,Ansible的ping模块就能工作了。检查你的inventory文件(比如hosts),确保配置正确:
[webserver] <目标实例IP> ansible_user=ubuntu ansible_ssh_private_key_file=/home/ubuntu/.ssh/id_rsa
然后再执行sudo ansible webserver -m ping,应该就能成功了。
内容的提问来源于stack exchange,提问作者srinivasu vallabhadasu

