WinSCP之Windows与Windows之间传输文件

方法:WinSCP+ OpenSSH

1.在Windows安装OpenSSH,PowerShell组织下的Win32-OpenSSH项目有提供编译好的windows版本。

访问https://github.com/PowerShell/Win32-OpenSSH/releases,下载PC对应的二进制包,如OpenSSH-Win64.zip,解压到本地后放到服务器上,如C盘下;

 

2.管理员权限运行cmd,并切换到OpenSSH-Win64路径下,然后输入如下命令

powershell.exe -ExecutionPolicy Bypass -File install-sshd.ps1
运行后如下图所示

 

3.打开服务,找到sshd并启动

 

4.创建入站规则

打开控制面板->防火墙->高级设置 ->新建入站规则 ->选择端口 ->特定本地端口:22-> 操作:允许连接 ->名称选择sshd

 

5.客户端下载并安装WinSCP

https://winscp.net/download/WinSCP-5.17.10-Setup.exe

6.运行WinSCP,输入Hostname写IP,port写22,username和password


————————————————
版权声明:本文为CSDN博主「半路凉亭」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zhuiyue82/article/details/117439387

3开启密钥登录

这一步是重中之重,加强安全,减少麻烦!!!

生成密钥的方法都是一样的,可以自行搜索,与linux不同的地方在于权限管理和默认authorized_keys存放位置。

公钥 (~\.ssh\id_rsa.pub) 的内容需放置在服务器上的一个名为authorized_keys的文本文件中,该文件位于 C:\Users\username\.ssh\。 OpenSSH 客户端包括了 scp 来帮助实现此目的,这是一个安全的文件传输实用工具。

将本地的公钥部署到服务器上

# 确保服务器上存在.ssh 文件夹,若不存在则使用下面命令创建
ssh username@ip mkdir C:\Users\username\.ssh\

#通过scp将本地的公钥上传到服务器上并重命名为authorized_keys,注意此方法会覆盖原有authorized_keys
scp C:\Users\username\.ssh\id_rsa.pub user1@ip:C:\Users\username\.ssh\authorized_keys

通过上述方法会覆盖原有authorized_keys文件,若要添加多个公钥,则通过记事本(更推荐使用vscode等文本编辑器)打开authorized_keys,把另起一行并把新公钥粘贴到authorized_keys文件中。

以下是windows中特有的操作

更改authorized_keys文件权限,不更改则无法通过密钥登录

# 远程通过ACL更改文件权限
ssh --% user1@ip icacls.exe "C:\Users\username\.ssh\authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

在服务器端则可以通过以下命令修改,注意需要管理员权限。

#在服务器端修改authorized_keys文件权限
icacls.exe "C:\Users\username\.ssh\authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

在Windows OpenSSH中,默认的授权密钥存放位置为ProgramData\ssh\administrators_authorized_keys,此位置对应为管理用户权限。因此需要修改默认授权文件位置。通过文本编辑器(推荐vscode)打开ProgramData\ssh\sshd_config,修改以下条目

#允许公钥授权访问,确保条目不被注释
PubkeyAuthentication yes

#授权文件存放位置,确保条目不被注释
AuthorizedKeysFile	.ssh/authorized_keys

#可选,关闭密码登录,提高安全性
PasswordAuthentication no

#注释掉默认授权文件位置,确保以下条目被注释
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

注意修改sshd_config需要管理员权限,修改完成后保存并推出。

在PowerShell(管理员)中重启sshd服务

#重启sshd,需要管理员权限
Restart-Service sshd

至此可以尽情享受windows服务器带来的各种不便了!enjoy!!!

 

最后附赠如何使用PowerShell卸载Windows OpenSSH

# 卸载 OpenSSH 客户端
Remove-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# 卸载 OpenSSH 服务端
Remove-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

 In Windows, sshd reads configuration data from %programdata%\ssh\sshd_config

安装并启用openssh#

https://docs.microsoft.com/zh-cn/windows-server/administration/openssh/openssh_overview

Start-Service sshd
Stop-Service sshd
Restart-Service sshd

配置文件:%programdata%\ssh\sshd_config

开启密钥登录#

https://zhuanlan.zhihu.com/p/404179039

  1. 更改authorized_keys文件权限:禁用继承,删除所有权限,添加SYSTEM和Administrators的完全控制权限
icacls.exe "C:\Users\username\.ssh\authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
  1. 更改sshd_config,改3处
#允许公钥授权访问,确保条目不被注释
PubkeyAuthentication yes

#授权文件存放位置,确保条目不被注释
AuthorizedKeysFile	.ssh/authorized_keys

#可选,关闭密码登录,提高安全性
PasswordAuthentication no

#注释掉默认授权文件位置,确保以下条目被注释
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

重启sshd

FAQ#

  1. 设置了文件权限,authorized_keys里也放了公钥,但还是提示:Permission denied (publickey,password,keyboard-interactive).
    注意检查authorized_keys文件格式,必须是纯ASCII或者UTF-8。我是在powershell中用echo AAAA..... >> authorized_keys,来生成authorized_keys,结果powershell这样自动是utf-16(LE)格式!害我研究了一个小时!

作者:wangbingbing

出处:https://www.cnblogs.com/wangbingbing/p/16685942.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @ 2023-03-16 10:53  大肥兔子  阅读(3429)  评论(0)    收藏  举报