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

如何在SSH命令中嵌套执行另一个SSH命令实现多层服务器操作

关于SSH多层跳转执行命令的实现说明

可以实现该功能,你提供的示例存在两处语法问题,修正后即可正常运行:

  • 单引号嵌套错误:Shell会将内层的单引号识别为外层单引号的结束标记,导致命令解析失败
  • sudo su -用法错误:直接执行sudo su -会启动交互式登录shell,后续命令不会在切换后的用户环境中执行

正确实现方式

1. 无需切换第一跳服务器用户,直接执行第二层SSH

采用外层双引号、内层单引号的方式避免嵌套冲突:

ssh <user1>@<第一跳服务器IP> "ssh <user2>@<第二跳服务器IP> 'echo \"Hi\"'"

如果需要免交互运行,可以添加-o BatchMode=yes参数避免密码、密钥确认等交互提示:

ssh -o BatchMode=yes <user1>@<第一跳服务器IP> "ssh -o BatchMode=yes <user2>@<第二跳服务器IP> 'echo Hi'"

2. 需要先切换第一跳服务器用户再执行第二层SSH

给sudo su -添加-c参数传入要执行的命令:

ssh <user1>@<第一跳服务器IP> "sudo su - <切换目标用户名> -c \"ssh <user2>@<第二跳服务器IP> 'echo Hi'\""

更简便的多层跳转方案

如果你的SSH版本支持(OpenSSH 7.3及以上),可以直接使用ProxyJump参数实现多层跳转,不需要手动嵌套SSH命令,语法更简洁:

ssh -J <user1>@<第一跳服务器IP> <user2>@<第二跳服务器IP> "echo Hi"

注意事项

  • 为了避免多次输入密码,建议提前配置本地到第一跳服务器、第一跳服务器到第二跳服务器的SSH密钥免密登录
  • 脚本中使用时建议添加-n参数防止SSH读取标准输入导致后续命令异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:06:03