如何使用ssh密钥的方式实现无密码scp传输文件(Linux to Windows)
要实现从 Linux 到 Windows 使用 SSH 密钥进行无密码的 scp
文件传输,你需要按照以下步骤操作:
1. 在 Linux 上生成 SSH 密钥对
如果你还没有生成 SSH 密钥对,可以使用以下命令生成:
ssh-keygen -t rsa
按照提示进行操作,通常可以直接按回车键接受默认设置。
2. 将公钥复制到 Windows 上
你需要将 Linux 上生成的公钥 (~/.ssh/id_rsa.pub
) 复制到 Windows 上的 authorized_keys
文件中。这一步通常涉及以下操作:
在 Windows 上设置 OpenSSH 服务
-
安装 OpenSSH: 确保 Windows 上安装了 OpenSSH 服务器。可以通过 Windows 设置中的“应用和功能”来安装它,或者使用 PowerShell 命令:
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
-
启动 OpenSSH 服务:
Start-Service sshd
并设置为开机自启:
Set-Service -Name sshd -StartupType 'Automatic'
-
创建
.ssh
目录和authorized_keys
文件:在 Windows 上的用户主目录下(例如
C:\Users\<YourUsername>
),创建.ssh
目录并设置适当的权限:mkdir C:\Users\<YourUsername>\.ssh
在
.ssh
目录中创建authorized_keys
文件,并将 Linux 上的公钥内容添加到其中:notepad C:\Users\<YourUsername>\.ssh\authorized_keys
将公钥内容粘贴到
authorized_keys
文件中并保存。 -
设置文件权限:
确保
.ssh
目录和authorized_keys
文件的权限设置正确:icacls C:\Users\<YourUsername>\.ssh /inheritance:r icacls C:\Users\<YourUsername>\.ssh /grant:r <YourUsername>:F icacls C:\Users\<YourUsername>\.ssh\authorized_keys /inheritance:r icacls C:\Users\<YourUsername>\.ssh\authorized_keys /grant:r <YourUsername>:F
3. 从 Linux 使用 SCP 进行文件传输
现在你可以从 Linux 上使用 scp
命令进行文件传输了:
scp /path/to/local/file <YourUsername>@<WindowsIPAddress>:/path/to/remote/directory
这将使用 SSH 密钥进行身份验证,无需输入密码。
4. 如果你Windows上使用的是Administrator用户,并且 Administrator
用户在 administrators
组中
你需要将 Linux 上的公钥内容添加到这个文件中 C:\ProgramData\ssh\administrators_authorized_keys
因为这是配置文件 C:\ProgramData\ssh\sshd_config
中的默认配置
Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
如果遇到任何问题,请确保 OpenSSH 服务在 Windows 上运行正常,并且 SSH 密钥权限设置正确。