如何从Linux服务器向Windows执行SSH、SCP操作及Jenkins调用方法
Linux到Windows单向SSH/SCP操作及Jenkins调用方案
一、Linux侧直接运行命令的可行性
首先需要先完成Windows目标机器的前置配置:
- 目标Windows机器需安装并启动OpenSSH服务器:Win10 1809+、Win11、Windows Server 2019+系统自带该组件,可通过「设置→应用→可选功能→添加功能」搜索安装,安装后启动
sshd服务并设置开机自启,同时放行系统防火墙的22端口入站规则。 - 若需要免密登录,将Linux发起端的SSH公钥(默认路径
~/.ssh/id_rsa.pub)内容,复制到Windows目标机对应用户目录下的.ssh/authorized_keys文件中,同时需删除该文件的所有继承权限,仅保留当前用户的读取权限,避免OpenSSH服务拒绝识别。
命令有效性说明
- SSH命令:
ssh user@IPaddressWindowsserver可直接运行,首次连接会提示确认主机指纹,输入yes后输入对应Windows用户的密码即可登录,配置免密后无需输入密码。 - SCP命令:你给出的命令路径格式有误,Windows的盘符在SCP请求中需去掉冒号,正确命令为:
scp /home/ubuntu/myfile username@IP_of_windows_machine:/C/Users/Anshul/Desktop
注:如果目标路径包含空格,需要用引号包裹路径部分避免解析错误。
二、Jenkins流水线调用说明
首先需要明确你流水线的运行节点:
- 如果流水线任务是跑在Linux节点上:不能用
bat步骤,bat是Windows节点的专属执行步骤,需要替换为sh步骤,示例如下:
sh 'ssh user@IPaddressWindowsserver "你要执行的Windows命令"' sh 'scp /home/ubuntu/myfile username@IP_of_windows_machine:/C/Users/Anshul/Desktop'
注意:要保证运行Jenkins进程的Linux用户家目录下有正确的SSH私钥,否则会出现权限报错。
- 如果流水线任务确实跑在Windows节点上:你写的
bat步骤本身语法没问题,但存在两个前提限制:- 该Windows节点必须安装了OpenSSH客户端(或Git for Windows等自带SSH/SCP命令的工具),且命令路径已加入系统环境变量。
- 你写的SCP命令中
/home/ubuntu/myfile是Linux服务器路径,Windows节点无法直接读取,需要先将该文件同步到Windows节点本地后再执行SCP传输。
内容的提问来源于stack exchange,提问作者SVD
相关产品推荐
相关产品推荐

