You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSH远程AWS EC2实例后自动切换root并进入指定目录?

解决AWS EC2远程连接后自动切换root并进入指定目录的Shell脚本问题

我明白你现在的困扰——想通过Shell脚本一键连接AWS EC2实例,自动切换到root用户并进入/var/files目录,但当前脚本不仅完成不了这两步,还存在变量传递的问题。咱们一步步拆解解决:

先说说你当前脚本的核心问题

你原来的写法里,USER='sudo su'和PATH='cd /var/files'是在本地设置变量,根本没传递到远程实例;而且echo $USER和echo $PATH也是在本地执行的(因为变量没被引号保护,本地Shell会先解析它们),完全达不到远程执行的目的。

给你两种可行的解决办法

方法1:直接在SSH命令中传递远程执行的命令链

用单引号把所有要在远程执行的命令包裹起来,确保本地Shell不会提前解析内容,而是原封不动传到EC2实例执行:

cd "C:\Operations\sys_admin" && ssh -i "mykeypair.pem" ec2-user@[IP].[location].compute.amazonaws.com 'sudo su - && cd /var/files && bash'
  • sudo su -:切换到root用户的同时加载root的完整环境变量(比单纯sudo su更规范)
  • cd /var/files:进入目标目录
  • bash:启动交互式Shell,避免执行完命令后直接退出连接

方法2:用Here-Doc实现更清晰的命令序列

如果后续要加更多远程命令,用Here-Doc结构会更易读,记得加上-t参数强制分配伪终端(避免sudo时可能出现的终端错误):

cd "C:\Operations\sys_admin" && ssh -t -i "mykeypair.pem" ec2-user@[IP].[location].compute.amazonaws.com << 'EOF'
sudo su -
cd /var/files
bash
EOF
  • 这里的'EOF'加单引号是为了禁止本地变量替换,确保所有命令都在远程实例执行

额外注意事项

  1. 确保EC2实例中的ec2-user有sudo权限,最好配置免密sudo(可以在实例中编辑/etc/sudoers,添加ec2-user ALL=(ALL) NOPASSWD:ALL),避免脚本执行时需要手动输入密码
  2. 密钥文件mykeypair.pem的权限要正确:如果是在Linux/macOS环境下执行脚本,需要设置chmod 400 mykeypair.pem;Windows下可忽略,但要确保文件路径正确
  3. 替换命令中的[IP].[location]为你EC2实例的实际公有IP或域名

内容的提问来源于stack exchange,提问作者Kerbol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:06:11