能否用单条命令从A服务器经B跳转至C并执行bash脚本?
当然可以实现!
你完全可以用单条命令完成从A服务器经B跳转至C,再在C上执行bash脚本的操作,不用手动一步步登录每台服务器。下面根据不同的SSH版本和场景,给你几种简单的实现方式:
方法1:用ProxyJump(推荐,OpenSSH 7.3及以上版本)
如果A服务器上的SSH版本是7.3或更新,ProxyJump是最简洁的跳转方式,直接支持中间服务器中转:
ssh -J b用户名@B服务器地址 c用户名@C服务器地址 'bash -s' < /本地/脚本路径/your_script.sh
-J b用户名@B服务器地址:告诉SSH先连接到B服务器作为中转c用户名@C服务器地址:目标C服务器的登录信息'bash -s' < /本地/脚本路径/your_script.sh:让C服务器启动bash进程,并读取你本地的脚本内容来执行。如果脚本已经存放在C服务器上,直接换成脚本在C上的绝对路径即可,比如:ssh -J b用户名@B服务器地址 c用户名@C服务器地址 '/home/c用户名/scripts/your_script.sh'
方法2:兼容旧版本的ProxyCommand
如果A服务器的SSH版本低于7.3,就用ProxyCommand来实现中转连接:
ssh -o ProxyCommand="ssh -W %h:%p b用户名@B服务器地址" c用户名@C服务器地址 'bash -s' < /本地/脚本路径/your_script.sh
这里的ProxyCommand会让SSH先连接到B服务器,再通过B转发到C服务器的SSH端口(%h代表目标主机,%p代表目标端口)。
额外优化:配置SSH Config简化命令
如果你经常需要做这种跳转操作,可以编辑A服务器上的~/.ssh/config文件,添加以下配置:
Host C_server User c用户名 HostName C服务器的IP或域名 ProxyJump b用户名@B服务器地址
之后你只需要执行更简短的命令即可:
ssh C_server 'bash -s' < /本地/脚本路径/your_script.sh
如果脚本在C服务器上,直接写:
ssh C_server '/home/c用户名/scripts/your_script.sh'
注意事项
- 如果脚本需要用sudo权限执行,把命令调整为:
(可能需要输入sudo密码,建议提前在C服务器上配置免密sudo或者SSH密钥登录,让操作更顺畅)ssh -J b用户名@B服务器地址 c用户名@C服务器地址 'sudo bash -s' < /本地/脚本路径/your_script.sh - 确保A能访问B、B能访问C,且你拥有对应服务器的登录权限。
内容的提问来源于stack exchange,提问作者kirthan shetty
相关产品推荐
相关产品推荐

