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
- 更改
authorized_keys
文件权限:禁用继承,删除所有权限,添加SYSTEM和Administrators的完全控制权限
icacls.exe "C:\Users\username\.ssh\authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
- 更改sshd_config,改3处
#允许公钥授权访问,确保条目不被注释
PubkeyAuthentication yes
#授权文件存放位置,确保条目不被注释
AuthorizedKeysFile .ssh/authorized_keys
#可选,关闭密码登录,提高安全性
PasswordAuthentication no
#注释掉默认授权文件位置,确保以下条目被注释
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
重启sshd
FAQ#
- 设置了文件权限,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 国际」许可协议进行许可。