如何在Linux机器上使用ssh远程连接Windows Server服务器并使用rsync同步文件

这篇具有很好参考价值的文章主要介绍了如何在Linux机器上使用ssh远程连接Windows Server服务器并使用rsync同步文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、源起

   当前在研究goploy自动化开源部署工具,该工具部署在linux机器上,而要部署服务的目标服务器有一部分是windows server服务器,goploy自动化部署,使用rsync部署方式,底层依赖于ssh远程连接目标服务器,所以,要实现自动化部署,必须先实现ssh远程连接目标windows server服务器。下面将依次说明具体步骤。

二、使用ssh远程连接Windows

1.先决条件

在开始之前,计算机必须满足以下要求:

(1)至少运行 Windows Server 2019 或 Windows 10(内部版本 1809)的设备。

(2)PowerShell 5.1 或更高版本。

(3)作为内置管理员组成员的帐户。

2.先决条件检查

若要验证环境,请打开提升的 PowerShell 会话并执行以下操作:
键入 winver.exe ,然后按 Enter 查看 Windows 设备的版本详细信息。
运行 $PSVersionTable.PSVersion。 验证主要版本至少为 5,次要版本至少为 1。 详细了解如何在 Windows 上安装 PowerShell。
运行下面的命令(PowerShell)。 当你是内置管理员组的成员时,输出将显示 True。
(New-Object Security.Principal.WindowsPrincipal([Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)

3.安装适用于 Windows 的 OpenSSH

可以使用 Windows Server 2019 和 Windows 10 设备上的 Windows 设置安装这两个 OpenSSH 组件。
若要安装 OpenSSH 组件:

(1)打开“设置”,选择“应用”,然后选择“可选功能”。

(2)扫描列表,查看是否已安装 OpenSSH。 如果未安装,请在页面顶部选择“添加功能”,然后:

找到“OpenSSH 客户端”,然后选择“安装”
找到“OpenSSH Server”,然后选择“安装”

(3)设置完成后,回到“应用”和“可选功能”,并确认 OpenSSH 已列出。

(4)打开“服务”桌面应用。 (选择“开始”,在搜索框中键入 services.msc ,然后选择“服务”应用或按 ENTER。)

(5)在详细信息窗格中,双击“OpenSSH SSH 服务器”。

(6)在“常规”选项卡上的“启动类型”下拉菜单中,选择“自动”。

(7)若要启动服务,请选择“启动”。

备注:
安装 OpenSSH 服务器将创建并启用一个名为 OpenSSH-Server-In-TCP 的防火墙规则。 这允许端口 22 上的入站 SSH 流量。 如果未启用此规则且未打开此端口,那么连接将被拒绝或重置。

4.连接到 OpenSSH 服务器

Shell或PowerShell中依照下面格式“ssh domain\username@servername”输入命令,样例如下:

ssh administrator@192.168.13.142

正常输入密码即可连接上,然后就可以在控制台输入命令运行了。

参考链接:
适用于 Windows 的 OpenSSH 入门

三、OpenSSH for Windows 中基于密钥的身份验证

   下面是摘抄的ssh连接的全部内容,如果只是关注linux使用ssh连接windows服务器,则只需要关注“部署公钥”相关的部分。生成公私钥可参见下面命令:

ssh-keygen -t ed25519 -C "your_email@example.com"

1.部署私钥

PowerShell脚本说明:

# By default the ssh-agent service is disabled. Configure it to start automatically.
# Make sure you're running as an Administrator.
Get-Service ssh-agent | Set-Service -StartupType Automatic

# Start the service
Start-Service ssh-agent

# This should return a status of Running
Get-Service ssh-agent

# Now load your key files into ssh-agent
ssh-add $env:USERPROFILE\.ssh\id_ed25519

将密钥添加到客户端上的 ssh-agent 后,ssh-agent 会自动检索本地私钥并将其传递给 SSH 客户端。

2.部署公钥

   要使用上面创建的用户密钥,必须将公钥 (.ssh\id_ed25519.pub) 的内容作为文本文件放在服务器上。 文件的名称和位置取决于用户帐户是本地管理员组的成员还是标准用户帐户。 以下部分涵盖标准和管理用户。特别提醒,下面的PowerShell脚本,都是需要在其他windows机器的PowerShell终端上执行,实现远程配置功能。

(1)标准用户

   公钥 (.ssh\id_ed25519.pub) 的内容需放置在服务器上的一个名为 authorized_keys 的文本文件中,该文件位于 C:\Users\username.ssh\。 可以使用 OpenSSH scp 安全文件传输实用工具或使用 PowerShell 将密钥写入文件来复制公钥。
以下示例将公钥复制到服务器(其中“username”替换为你的用户名)。 最初,你需要使用服务器的用户帐户的密码。
PowerShell脚本说明:

# Get the public key file generated previously on your client
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ed25519.pub

# Generate the PowerShell to be run remote that will copy the public key file generated previously on your client to the authorized_keys file on your server
$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"

# Connect to your server and run the PowerShell using the $remotePowerShell variable
ssh username@domain1@contoso.com $remotePowershell

(2)管理用户

公钥 (.ssh\id_ed25519.pub) 的内容需放置在服务器上的一个名为 administrators_authorized_keys 的文本文件中,该文件位于 C:\ProgramData\ssh\。 可以使用 OpenSSH scp 安全文件传输实用工具或使用 PowerShell 将密钥写入文件来复制公钥。 此文件上的 ACL 需要配置为仅允许访问管理员和系统。
以下示例将公钥复制到服务器并配置 ACL(其中“username”替换为你的用户名)。 最初,你需要使用服务器的用户帐户的密码。
备注:此示例演示了创建 administrators_authorized_keys 文件的步骤。 这仅适用于管理员帐户,并且在用户配置文件位置内的必须是用户而不是每用户文件。
PowerShell脚本说明:

# Get the public key file generated previously on your client
$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ed25519.pub

# Generate the PowerShell to be run remote that will copy the public key file generated previously on your client to the authorized_keys file on your server
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F"""

# Connect to your server and run the PowerShell using the $remotePowerShell variable
ssh username@domain1@contoso.com $remotePowershell

PowerShell实际样例如下:

# Get the public key file generated previously on your client
$authorizedKey = Get-Content -Path C:\Users\tom\.ssh\id_ed25519.pub

# Generate the PowerShell to be run remote that will copy the public key file generated previously on your client to the authorized_keys file on your server
$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F"""

# Connect to your server and run the PowerShell using the $remotePowerShell variable
ssh administrator@192.168.13.142 $remotePowershell

参考链接:
OpenSSH for Windows 中基于密钥的身份验证

四、实际验证

上述步骤完成后,在配置好私钥的Wndwos或Linux机器上都可以使用下面的命令ssh远程连接Windows服务器,且不需要输入密码:

ssh administrator@192.168.13.142

五、配置rsync远程同步文件

1.windows下安装cwrsync客户端

windows系统先下载cwrsync客户端(下载链接),我使用的是6.2.9版本,如果两边机器都是windows的话,则需要都安装cwrsync客户端,如解压之后统一放到“D:\programs\cwrsync”目录下,
linux远程连接windows,ssh,PowerShell,Windows,linux

2.配置系统环境变量

在系统环境变量中,添加CWRSYNC_HOME,值为“D:\programs\cwrsync”,并将“%CWRSYNC_HOME%\bin”添加进系统环境变量Path中,并且确保在“%SYSTEMROOT%\System32\OpenSSH\”的上面,样例如下:
linux远程连接windows,ssh,PowerShell,Windows,linux
确保系统优先使用cwrsync自带的ssh.exe可执行文件。配置完毕后,远程的windows服务器,需要重启一下,rsync同步才会生效。

六、远程linux服务器配置ssh远程连接

重点是在远程linux机器对应帐号的.ssh文件夹下,将本机公钥写入authorized_keys文件中(文件属性是600),PowerShell脚本命令如下:

$publicKey = Get-Content -Path "C:\Users\tom\.ssh\id_ed25519.pub"
ssh root@192.168.13.145 "mkdir -p ~/.ssh && echo `"$publicKey`" >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

七、rsync执行样例

rsync使用方法可参考rsync 用法教程。
官方帮助文档。

1.linux向windows同步数据样例(默认是采取ssh模式)

如果目录不存在则先创建目录

directoryPath="D:/temp/rsync/receive"
remotePowershell="powershell if (!(Test-Path -Path $directoryPath -PathType Container)) { New-Item -ItemType Directory -Force -Path $directoryPath;Write-Host ""Directory created successfully."";} else { Write-Host ""Directory already exists."";}"
# Connect to your server and run the PowerShell using the $remotePowerShell variable
ssh administrator@192.168.13.180 $remotePowershell

从本地同步数据到远端

rsync -e ssh -avn /root/backup/goploy/ administrator@192.168.13.180:/cygdrive/D/temp/rsync/receive
rsync -avz /root/backup/goploy/ administrator@192.168.13.180:/cygdrive/D/temp/rsync/receive
rsync -e ssh -avz /root/backup/goploy/ administrator@192.168.13.180:/cygdrive/D/temp/rsync/receive
rsync -e ssh -avzn /root/backup/goploy/ administrator@192.168.13.180:/cygdrive/D/temp/rsync/receive

2.windows向linux同步数据样例

使用ssh输入密码方式远程连接目标linux机器并配置公钥PowerShell样例如下:

$publicKey = Get-Content -Path "C:\Users\tom\.ssh\id_ed25519.pub"
ssh root@192.168.13.190 "mkdir -p ~/.ssh && echo `"$publicKey`" >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys"

下面是将整个F:\temp\apk文件夹同步到无端/root/temp/what文件夹下:

ssh root@192.168.13.190 "[ ! -d /root/temp/what ] && mkdir -p /root/temp/what || echo 'already exists'"
rsync -r /cygdrive/F/temp/apk root@192.168.13.190:/root/temp/what

做整体同步:

rsync -avz /cygdrive/F/temp/apk/ --delete root@192.168.13.190:/root/temp/what

反过来,从远程服务器拷贝文件到本地(将/root/temp/what目录整体拷贝到本地):

rsync -avz root@192.168.13.190:/root/temp/what --delete /cygdrive/F/temp/apk_receive

2.windows向windows同步数据样例

先创建文件夹,再同步数据:

$directoryPath = "tom\storage"
$remotePowershell = "powershell if (!(Test-Path -Path $directoryPath -PathType Container)) { New-Item -ItemType Directory -Force -Path $directoryPath;Write-Host ""Directory created successfully."";} else { Write-Host ""Directory already exists."";}"
# Connect to your server and run the PowerShell using the $remotePowerShell variable
ssh administrator@192.168.13.180 $remotePowershell

同步数据样例:
rsync -avz -e ssh -vvv /local/path username@remotehost:/remote/path文章来源地址https://www.toymoban.com/news/detail-753834.html

rsync -avz -e ssh -vvv /cygdrive/F/temp/apk --delete administrator@192.168.13.180:/cygdrive/D/temp/apk
rsync -avz -e ssh -vvv /cygdrive/F/temp/apk administrator@192.168.13.180:/cygdrive/D/temp/apk
rsync -avz /cygdrive/F/temp/apk administrator@192.168.13.180:/cygdrive/D/temp/apk

到了这里,关于如何在Linux机器上使用ssh远程连接Windows Server服务器并使用rsync同步文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Windows 系统下:SSH 远程连接 Linux 服务器的完整指南

    以下是使用 Windows 系统的 SSH 远程连接 Linux 服务器的详细操作步骤,(我们以 Ubuntu 和CentOS 为例) 1. 确保 Linux 服务器已启用 SSH 首先,确保您的 Linux 服务器上已经安装并运行了 SSH 服务。对于大多数 Linux 发行版, OpenSSH 是默认的 SSH 服务器。您可以使用以下命令来安装它:  

    2024年02月08日
    浏览(74)
  • 【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

    转发自CSDN远程穿透的文章:【vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2024年02月02日
    浏览(88)
  • Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

    转发自CSDN远程穿透的文章:【vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2024年02月04日
    浏览(59)
  • 如何通过ssh远程连接自己的主机(Linux)?

    可以看到,有多块网卡在工作,其中eno1是有线网卡,UP表示开启了,但没有运行(RUNNING),因为此时主机并没有连接有线网络。 lo是本地虚拟网卡,所有设备都为127.0.0.1,可以在没有网络的环境中用来测试。 wlp4s0是无线网卡,它被开启(UP),且正在工作(RUNNING)。第二行

    2024年02月04日
    浏览(52)
  • 使用 FinalShell 进行远程连接(ssh 远程连接 Linux 服务器)

    目录 前言 基本使用教程 新建远程连接 连接主机 自定义命令 路由追踪 后端开发,必然需要和服务器打交道,部署应用,排查问题,查看运行日志等等。一般服务器都是集中部署在机房中,也有一些直接是云服务器,总而言之,程序员不可能直接和服务器直接操作,一般都是

    2024年04月16日
    浏览(80)
  • 如何实现固定公网地址远程SSH连接Linux Deepin系统

    Deepin操作系统是一个基于Debian的Linux操作系统,专注于使用者对日常办公、学习、生活和娱乐的操作体验的极致,适合笔记本、桌面计算机和一体机。是中国第一个具备国际影响力的Linux发行版本,支持33种语言,用户遍布除了南极洲的其它六大洲。 下面介绍简单几步结合Cp

    2024年03月16日
    浏览(54)
  • 「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接

    转发自cpolar内网穿透的文章:【Vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2024年02月06日
    浏览(59)
  • VSCode使用Remote SSH远程连接Linux服务器【远程开发】

    转发自CSDN远程穿透的文章:【vscode远程开发】使用SSH远程连接服务器 「内网穿透」 远程连接服务器工具有很多,比如XShell、putty等,可以通过ssh来远程连接服务器,但这用于写代码并不方便,可能需要现在本地写好代码后再将源代码传送到服务器运行、服务器上的图片也无

    2023年04月21日
    浏览(61)
  • 如何在Linux Archcraft中配置SSH服务并结合内网穿透实现远程连接

    Archcraft是一个基于Arch Linux的Linux发行版,它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。 Cpolar是一种安全的内网穿透云服务,可以将内网下的本地服务器通过安全隧道暴露至公网,使得公网用户可以正常访问内网服务,是一款内网穿透软件。

    2024年03月18日
    浏览(50)
  • 如何在Windows通过固定tcp公网地址ssh远程访问本地Kali Linux

    本文主要介绍如何在Kali系统编辑SSH配置文件并结合cpolar内网穿透软件,实现公网环境ssh远程连接本地kali系统。 默认新安装的kali系统会关闭ssh 连接服务,我们通过命令打开: 启动后我们查看ssh 状态,active 表示ssh 正常运行 通常ssh 是使用账号或者密码进行登录连接,所以还需要开

    2024年04月23日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包