如何编写Shell脚本连接服务器并在screen中执行命令?
编写Shell脚本自动SSH连接服务器并创建Screen会话执行命令
你可以通过SSH的批量命令传递功能,结合Screen的后台启动参数,实现完全自动化的操作,无需手动交互。以下是实现脚本:
#!/bin/bash # 连接machine1并创建screen会话执行命令 ssh machine1 << 'EOF' # 切换到项目目录 cd project_folder # 后台创建screenA会话并运行指定Python命令 screen -dmS screenA python run.py -x # 后台创建screenB会话并运行指定Python命令 screen -dmS screenB python run.py -y EOF # 连接machine2并执行相同逻辑 ssh machine2 << 'EOF' cd project_folder screen -dmS screenA python run.py -z screen -dmS screenB python run.py -t EOF
关键说明:
- Here Document(EOF):用这种方式可以一次性向远程服务器传递多条命令,避免多次SSH连接,也不用手动输入交互命令。给EOF加单引号能防止本地变量被解析,确保命令原封不动传到远程执行。
- Screen后台启动参数:
screen -dmS <会话名> <命令>是核心逻辑,参数含义:-d:让会话在后台运行,无需进入交互界面-m:强制创建新的会话-S:指定会话名称,方便后续管理(比如用screen -r screenA重新连接会话)
- 路径与命令可靠性:如果
project_folder不是远程用户的默认目录,或者python/screen需要指定绝对路径,建议写成完整路径,示例:screen -dmS screenA bash -c "cd /home/user/project_folder && /usr/bin/python3 run.py -x"
使用步骤:
- 把上述脚本保存为
auto_deploy.sh - 给脚本添加执行权限:
chmod +x auto_deploy.sh - 运行脚本:
./auto_deploy.sh
前置条件:
确保本地机器已配置免密登录目标服务器,否则脚本运行时会卡在输入密码环节。配置方法:
- 本地生成密钥:
ssh-keygen(一路回车用默认设置即可) - 把公钥传到目标服务器:
ssh-copy-id machine1和ssh-copy-id machine2
内容的提问来源于stack exchange,提问作者Blue Lama
相关产品推荐
相关产品推荐

