Windows10通过bat文件连接Linux服务器执行bash命令及自动登录问题
Windows 10批处理自动SSH执行远程Linux命令实现方案
基础无密码实现(最推荐,生产环境可用)
前置配置
- 首先开启Windows 10自带的OpenSSH客户端:进入「设置-应用-可选功能」,搜索确认OpenSSH客户端已安装,未安装的话点击「添加功能」安装即可。
- 本地生成SSH密钥对:打开CMD/PowerShell执行
ssh-keygen -t rsa,全程按回车使用默认配置,生成的公钥默认存储在C:\Users\你的用户名\.ssh\id_rsa.pub。 - 将公钥内容追加到远程Linux服务器的
~/.ssh/authorized_keys文件中,同时在远程服务器执行以下命令配置正确权限:
配置完成后本地执行chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keysssh 用户名@服务器IP可以直接登录,无需输入密码。
批处理示例
@echo off echo 开始执行远程命令 :: 远程执行指定bash命令,执行完成后自动断开连接 ssh root@192.168.3.20 "cd /data/backend && docker compose up -d && echo 服务启动完成" echo 远程命令执行完毕,开始执行本地后续命令 :: 此处填写你需要执行的本地命令,例如: cd D:\本地项目目录 git pull pause
自动填充密码实现(仅建议测试环境使用)
原生OpenSSH客户端不支持直接通过命令行参数传递密码,需要借助第三方工具实现,最常用的是PuTTY配套的plink命令行工具:
- 下载plink.exe放到批处理文件同目录,或者配置到系统环境变量Path中
- 批处理示例:
@echo off echo 正在带密码连接远程服务器 plink -ssh root@192.168.3.20 -pw 你的登录密码 "cd /data && ls -l" echo 远程执行完成,继续本地操作 :: 后续本地命令 pause
注意:该方案会将服务器密码明文写在批处理文件中,存在极高的泄露风险,仅可在内网测试环境使用,禁止用于生产环境
注意事项
- 首次连接服务器需要先手动执行一次SSH连接,输入
yes保存服务器host密钥,否则批处理会卡在交互确认环节无法自动执行。 - 如果需要执行多条复杂的远程命令,建议将命令整理为远程服务器上的
.sh脚本,批处理中直接调用该脚本即可,避免引号嵌套引发的语法错误。
内容的提问来源于stack exchange,提问作者larry
相关产品推荐
相关产品推荐

