如何实现Windows批处理连接Ubuntu服务器后自动执行shell脚本?
实现Windows批处理自动SSH连接并执行服务器端Shell脚本
完全可以实现,核心是不要进入SSH交互会话,而是直接通过SSH命令传递要执行的远程脚本,同时解决sudo免密问题避免执行卡住。
1. 修改Windows批处理脚本
原批处理的问题是:你先通过SSH进入远程交互终端,之后的./restart.sh是在本地Windows环境执行的,根本没传到服务器,所以无效。正确写法是把远程要执行的命令直接作为SSH的参数:
cd "C:\Users\myUser\Documents" ssh -i .\my_server.pem ubuntu@www.website.com.br "./restart.sh"
执行这个批处理时,SSH会直接连接服务器,执行~/restart.sh脚本,完成后自动断开连接。
2. 配置服务器sudo免密(关键步骤)
你的restart.sh里用到了sudo,如果不配置免密,自动执行时会因需要输入密码而卡住。在Ubuntu服务器上按以下步骤操作:
- 用
visudo编辑sudoers文件(必须用这个命令,避免语法错误导致sudo失效):sudo visudo - 在文件末尾添加一行(替换成
asadmin命令的绝对路径,确保sudo能准确定位):ubuntu ALL=(ALL) NOPASSWD: /home/ubuntu/server/glassfish4/glassfish/bin/asadmin - 保存退出:按
Ctrl+O,回车确认保存,再按Ctrl+X退出。
可选:执行完脚本后保持SSH连接
如果希望执行完restart.sh后留在远程终端,可以添加-t参数强制分配伪终端:
ssh -t -i .\my_server.pem ubuntu@www.website.com.br "./restart.sh; bash"
内容的提问来源于stack exchange,提问作者Samuel Luiz
相关产品推荐
相关产品推荐

