- چطور بدون باز کردن SSH دستورات را روی EC2 اجرا کنیم؟
- پیشنیازها و معماری کلی
- تنظیم IAM Role و policy لازم
- نصب و بررسی SSM Agent روی توزیعهای متداول لینوکس
- اجرای دستورات با Run Command (نمونه aws cli)
- استفاده از Session Manager برای دسترسی تعاملی و Port Forwarding
- مدیریت خروجیها و لاگها (CloudWatch / S3)
- سناریوهای عملی و مثالها
- نکات امنیتی و بهترین شیوهها
- خطاهای رایج و رفع مشکل
- جمعبندی و چگونگی استفاده همراه سرویسهای ما
- گامهای پیشنهادی برای شروع
- Sıkça Sorulan Sorular
چطور بدون باز کردن SSH دستورات را روی EC2 اجرا کنیم؟
Remotely Run Commands on an EC2 Instance with AWS Systems Manager یک روش امن, مقیاسپذیر و بدون نیاز به باز کردن پورت SSH برای اجرای دستورات روی نمونههای EC2 است. در این راهنما قدمبهقدم پیادهسازی، پیشنیازها، نمونه دستورات AWS CLI، پیکربندی IAM و نکات امنیتی عملی برای مدیران سایت، DevOps و مهندسان شبکه ارائه میشود.
پیشنیازها و معماری کلی
برای اینکه بتوانید بهصورت از راه دور دستور روی EC2 اجرا کنید، سه جزء اصلی لازم است:
- SSM Agent روی EC2 نصب و در حال اجرا باشد.
- EC2 یک IAM instance profile داشته باشد که حداقل policy لازم برای ثبتنام و ارتباط با Systems Manager را داشته باشد (AmazonSSMManagedInstanceCore).
- اتصال شبکهای به سرویسهای SSM (از طریق اینترنت یا VPC endpoints برای SSM/EC2Messages/SSM-SessionManager).
معماری: کاربر یا اسکریپت از کنسول AWS یا AWS CLI/SDK دستور Run Command Veya start-session را فراخوانی میکند → Systems Manager پیام را به SSM Agent روی EC2 میفرستد → Agent دستور را اجرا و خروجی را به CloudWatch/S3 یا نتیجهی فراخوان برمیگرداند.
نکته درباره دسترسی شبکهای
اگر EC2 در یک subnet خصوصی بدون NAT قرار دارد، از VPC endpoints برای com.amazonaws.<region>.ssm, ec2messages, ssmmessages Ve s3 Kullanmak.
تنظیم IAM Role و policy لازم
ساخت یک IAM Role برای EC2 و attach کردن policy مدیریتشده AWS:
Trust policy (trust entity برای EC2):
{
"Version":"2012-10-17",
"Statement":[{"Effect":"Allow","Principal":{"Service":"ec2.amazonaws.com"},"Action":"sts:AssumeRole"}]
}Attach managed policy: AmazonSSMManagedInstanceCore
aws iam create-role --role-name SSMInstanceRole --assume-role-policy-document file://trust-policy.json
aws iam attach-role-policy --role-name SSMInstanceRole --policy-arn arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCoreاین policy شامل دسترسیهای لازم برای ثبتنام و ارسال لاگها به SSM است. برای ذخیره خروجیها در S3 یا استفاده از KMS برای رمزنگاری، باید اجازه نوشتن به آن S3 bucket و استفاده از KMS key را نیز اضافه کنید.
سپس این role را به Instance Profile تبدیل و به EC2 متصل کنید.
نصب و بررسی SSM Agent روی توزیعهای متداول لینوکس
برای Amazon Linux 2:
sudo yum install -y amazon-ssm-agent
sudo systemctl enable --now amazon-ssm-agentبرای Ubuntu (مثالی با دانلود دبیان پکیج):
REGION=us-east-1
wget https://s3.${REGION}.amazonaws.com/amazon-ssm-${REGION}/latest/debian_amd64/amazon-ssm-agent.deb
sudo dpkg -i amazon-ssm-agent.deb
sudo systemctl enable --now amazon-ssm-agentDurumu kontrol edin:
sudo systemctl status amazon-ssm-agent
sudo tail -n 200 /var/log/amazon/ssm/amazon-ssm-agent.log
اجرای دستورات با Run Command (نمونه aws cli)
روش سریع برای اجرای یک دستور شل روی یک یا چند نمونه EC2:
مثال: اجرای apt update و upgrade روی یک نمونه:
aws ssm send-command \
--instance-ids "i-0123456789abcdef0" \
--document-name "AWS-RunShellScript" \
--parameters commands=["sudo apt-get update -y","sudo apt-get upgrade -y"] \
--comment "Update packages" \
--region us-east-1برای هدفگیری با تگ (مثلاً همه وبسرورهای با tag Role=web):
aws ssm send-command \
--targets Key=tag:Role,Values=web \
--document-name "AWS-RunShellScript" \
--parameters commands=["/opt/deploy/deploy.sh"] \
--region eu-central-1دریافت خروجی یک دستور:
1) با خروجی send-command، یک CommandId دریافت میکنید.
2)
aws ssm get-command-invocation --command-id <COMMAND_ID> --instance-id i-0123456789abcdef0اگر خروجی به S3 فرستاده شده باشد، پارامترهای send-command را با –output-s3-bucket-name Ve –output-s3-key-prefix Belirtin.
نکات عملی برای اجرای اسکریپتهای بزرگ
- اسکریپتها را روی S3 آپلود کنید و در Run Command فقط wget + اجرا کنید.
- برای اسکریپتهای تکرارشونده از State Manager Kullanmak.
- از پارامترها و اسناد مدیریتشده SSM (Automation documents) برای اتوماسیون کامل استفاده کنید.
استفاده از Session Manager برای دسترسی تعاملی و Port Forwarding
Session Manager امکان یک شل تعاملی بدون SSH فراهم میکند و میتواند پورتفورواردینگ را نیز انجام دهد.
شروع جلسه تعاملی:
aws ssm start-session --target i-0123456789abcdef0برای استفاده تعاملی در کنسول یا طریق AWS CLI نیاز به نصب session-manager-plugin روی کلاینت دارید.
مثال port forwarding برای دسترسی به دیتابیس:
aws ssm start-session \
--target i-0123456789abcdef0 \
--document-name AWS-StartPortForwardingSession \
--parameters '{"portNumber":["3306"],"localPortNumber":["3307"]}'سپس میتوانید به localhost:3307 متصل شوید و ترافیک از طریق SSM تونل میشود بدون بازکردن پورت 3306 روی اینترنت.
مدیریت خروجیها و لاگها (CloudWatch / S3)
در Session Manager Preferences، فعال کردن CloudWatch logs یا S3 logging را فعال کنید تا تمام sessionها ذخیره شوند.
برای Run Command میتوانید خروجی را به S3 هدایت کنید یا CloudWatch Output را فعال کنید:
--cloud-watch-output-config '{"CloudWatchOutputEnabled":true}'
سناریوهای عملی و مثالها
اجرای بروزرسانی تودهای روی دهها EC2 در چند منطقه:
- از targeting با Tag یا Resource Group استفاده کنید.
- از SSM Maintenance Windows یا Patch Manager برای زمانبندی و هماهنگی بهره ببرید.
استفاده برای سرورهای GPU و رندرینگ:
برای سرورهای GPU که در لوکیشنهای مختلف استقرار یافتهاند (مثلاً در کنار ۸۵+ لوکیشن ما یا مناطق AWS)، از Run Command برای نصب درایورهای NVIDIA، CUDA و بستههای وابسته استفاده کنید. نمونه:
aws ssm send-command --instance-ids "i-..." --document-name "AWS-RunShellScript" --parameters commands=["sudo apt-get install -y nvidia-driver-470","sudo reboot"]راهاندازی سریع VPS مخصوص ترید با حداقل تاخیر:
- به جای باز کردن SSH/22، Session Manager و Port Forwarding برای دسترسی امن به سرور ترید استفاده کنید.
- انتخاب لوکیشن مناسب (نزدیکترین دیتاسنتر با مسیر مستقیم به بروکر) و استفاده از CDN/BGP/Private Network میتواند پینگ را کاهش دهد؛ ما بیش از ۸۵+ لوکیشن در سراسر جهان برای همین نیازها ارائه میکنیم.
نکات امنیتی و بهترین شیوهها
هرگز پورت SSH را بهصورت عمومی باز نکنید؛ SSM بهعنوان جایگزین کمخطر عمل میکند.
- İtibaren least privilege برای IAM roles و users استفاده کنید. فقط اجازه اجرای اسناد خاص یا دسترسی به پارامترها را بدهید.
- Session Manager logging را فعال کنید و خروجیها را به S3 با KMS encryption یا CloudWatch بفرستید.
- برای Parameter Store از نوع SecureString و کلید KMS اختصاصی استفاده کنید.
- محدودیتهای Session Manager: میتوان زمانبندی و IAM policy گذاشت تا فقط در محدوده زمانی یا با MFA اجرا شود.
- برای محیطهای حساس از VPC endpoints برای SSM و از network ACLs و security groups محکم بهره ببرید.
خطاهای رایج و رفع مشکل
- Instance not managed / Not registered: بررسی کنید SSM Agent نصب و در حال اجرا باشد و نقش IAM صحیح متصل باشد.
- Connection timed out: بررسی مسیر شبکه، VPC endpoints، یا دسترسی به اینترنت/NAT.
- Permission denied هنگام ارسال خروجی به S3: IAM role باید write access به آن bucket داشته باشد.
- start-session خطا میدهد: اطمینان از نصب session-manager-plugin روی کلاینت و فعال بودن Session Manager در کنسول.
جمعبندی و چگونگی استفاده همراه سرویسهای ما
Remotely Run Commands on an EC2 Instance with AWS Systems Manager روش امن و مناسب برای مدیریت از راه دور EC2ها، اجرای اسکریپتها، پچ کردن و دسترسی بدون SSH است.
این راهکار بهخوبی با نیازهای:
- سرور گرافیکی (GPU) برای AI و رندرینگ،
- VPS مخصوص ترید با نیاز به پینگ پایین،
- سرورهای گیم و زیرساخت با SLA بالا،
قابل ترکیب است. اگر شما نیاز دارید ترکیبی از AWS EC2 و سرورهای بینالمللی ما (۸۵+ لوکیشن) را مدیریت کنید، پیشنهاد میکنیم:
- برای latency-sensitive workloads، نزدیکترین لوکیشن ما را انتخاب کنید.
- از شبکه BGP/CDN و لینکهای اختصاصی (در صورت نیاز) استفاده کنید.
- برای مدیریت و اتوماسیون بین محیطهای On-prem / AWS / VPS ما از SSM + Automation documents استفاده کنید و لاگها را متمرکز در CloudWatch/S3 نگهدارید.
گامهای پیشنهادی برای شروع
برای مشاهده پلنهای سرور ابری، GPU Cloud و VPS مخصوص ترید یا مشاوره فنی در انتخاب بهترین لوکیشن و پیادهسازی امن با AWS Systems Manager، پلنها را بررسی کنید یا با تیم پشتیبانی ما تماس بگیرید تا یک معماری سفارشی و امن برای پروژه شما طراحی کنیم.









