如何在Windows通过Git Bash脚本用账号、IP和密码SSH远程Linux服务器
在Windows Git Bash中实现SSH自动登录并执行远程Linux命令
原写法的问题
你之前写的 ssh username@ip <password> 无法实现密码登录——SSH不支持通过标准输入直接传递密码,这种写法会把密码当作远程服务器要执行的命令,根本完成不了身份验证。
方法一:SSH密钥认证(推荐,安全且无密码)
这是最可靠的方式,无需每次输入密码,也避免了明文存储密码的风险。
- 生成SSH密钥对
在Git Bash中执行:
ssh-keygen -t ed25519 -C "your_email@example.com"
按回车跳过所有设置,密钥对会生成在 ~/.ssh 目录下(对应Windows系统的 C:\Users\你的用户名\.ssh)。
- 将公钥复制到远程服务器
执行以下命令,按提示输入一次远程服务器的密码即可完成配置:
ssh-copy-id username@远程服务器IP
之后再通过SSH连接该服务器时,就不需要输入密码了。
- 编写执行远程命令的脚本
创建一个名为remote_run.sh的脚本:
#!/bin/bash # 配置远程服务器信息 REMOTE_USER="你的远程用户名" REMOTE_IP="远程服务器IP" # 定义要执行的远程命令,多命令用分号分隔或换行 REMOTE_CMDS=" echo '当前远程登录用户:\$USER' pwd ls -l /home " # 建立SSH连接并执行命令 ssh ${REMOTE_USER}@${REMOTE_IP} "${REMOTE_CMDS}"
给脚本添加执行权限:
chmod +x remote_run.sh
直接运行脚本即可:
./remote_run.sh
方法二:使用expect脚本(仅在必须用密码登录时使用)
如果无法配置密钥认证,可借助expect工具自动输入密码,但这种方式需要明文存储密码,安全性较低。
安装expect
Git Bash默认没有expect,需要手动安装(可通过MinGW包管理器或下载对应二进制文件添加到Git Bash的PATH中)。编写expect登录脚本
创建auto_ssh.exp脚本:
#!/usr/bin/expect # 配置远程服务器信息 set username "你的远程用户名" set ip "远程服务器IP" set password "你的远程密码" set cmds "echo '远程执行命令测试'; pwd; ls" # 启动SSH连接 spawn ssh $username@$ip # 匹配密码提示并输入密码 expect "password:" send "$password\r" # 执行预设命令 send "$cmds\r" # 退出远程连接(如果需要留在远程终端,删除这两行) send "exit\r" expect eof
运行脚本:
expect auto_ssh.exp
注意事项
- 优先使用SSH密钥认证,避免明文密码泄露
- 如果使用expect脚本,尽量不要把密码直接写在脚本里,可通过环境变量或读取本地加密文件的方式获取
- Git Bash的Shell环境与Linux兼容,脚本写法基本一致
内容的提问来源于stack exchange,提问作者Satyam Shishodiya
相关产品推荐
相关产品推荐

