• 首页
  • 博客
  • 标签
  • 联系
街街的脏书包
  • 首页
  • 博客
  • 标签
  • 联系
联系

Copyright © 2026 - odaneo.com 保留所有权利

使用 SSH Tunnel 穿透跳板机部署 .NET 服务与 RDS 数据库

AWS2026-01-29 01:02

切换到 root 身份

sudo -i

端口占用查询

sudo ss -tulpn | grep 5000

私有 RDS 数据部署

前提

本地保存 Bastion 的 pem 文件,Bastion 保存私网 EC2 的 pem 文件

第一步

本地 SSH 到 Bastion,转发本地 15432 → Bastion 的 localhost:15432
ssh -i "bastion.pem" -L 15432:localhost:15432 ubuntu@0.0.0.0
-L 15432:localhost:15432 表示本地 localhost:15432 → Bastion localhost:15432

第二步

在 Bastion 上 SSH 到私网 EC2,转发 Bastion 的 localhost:15432 → RDS 的 3306
连接上 Bastion 后,在 Bastion 里执行:
ssh -i "ec2.pem" -L 15432:rds.amazonaws.com:3306 ubuntu@0.0.0.0
-L 13306:RDS_ENDPOINT:3306 表示Bastion localhost:15432 → 私网 EC2 → RDS 的 3306

第三步

修改 EF Core 或 SeedData.exe 的连接字符串:
Server=localhost;Port=15432;Database=your_db;User Id=your_user;Password=your_password;
dotnet ef database update

.NET 项目通过 Bastion 部署到 AWS

第一步

本地打包
dotnet publish -c Release -o "$HOME/publish"

第二步

本地 SCP 到 Bastion
ssh -i "bastion.pem" ubuntu@0.0.0.0 "rm -rf ~/temp_publish/*" scp -i "bastion.pem" -r ./publish/* ubuntu@0.0.0.0:~/temp_publish/

第三步

Bastion到私网EC2
rsync -av --delete -e "ssh -i ec2.pem" ~/temp_publish/ ubuntu@0.0.0.0:~/myapp_new/ 登录到EC2,然后 rsync -av /home/ubuntu/myapp_new/ /home/ubuntu/myapp/

第四步

创建 myapp.service 文件
sudo nano /etc/systemd/system/myapp.service
[Unit] Description=myapp server .NET API After=network.target [Service] WorkingDirectory=/home/ubuntu/myapp ExecStart=/home/ubuntu/.dotnet/dotnet /home/ubuntu/myapp/myapp.Server.dll Restart=always User=ubuntu Environment=ASPNETCORE_ENVIRONMENT=Staging // 或者 Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_ROOT=/home/ubuntu/.dotnet Environment=PATH=/home/ubuntu/.dotnet:/home/ubuntu/.dotnet/tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [Install] WantedBy=multi-user.target

第五步

启动或者重启服务
sudo systemctl daemon-reload # 让 systemd 重新加载服务 sudo systemctl start myapp.server # 启动服务 sudo systemctl enable myapp.server # 设置开机自启 sudo systemctl restart myapp.server # 重启服务 sudo systemctl status myapp.server # 查看状态 sudo journalctl -u myapp.server -f # 查看日志

第六步

使用 amazon-cloudwatch-agent 配置日志采集
cd /opt/aws/amazon-cloudwatch-agent/etc/ cat cloudwatch-agent.json { "logs": { "logs_collected": { "files": { "collect_list": [ { "file_path": "/var/log/myapp/myapp-*.log", # Serilog输出的日志地址 "log_group_name": "/aws/ec2/myapp", "log_stream_name": "{instance_id}", "timestamp_format": "%Y-%m-%dT%H:%M:%S.%fZ", "timezone": "UTC" } ] } } } }