windows 下配置SSH服务端和SSH连接

一、安装SSH

 较新的windows操作系统一般会系统自带,或者在应用与功能开启
下载安装文件

  https://github.com/PowerShell/Win32-OpenSSH
运行安装 

msiexec /i D://openssh-win32.msi

检查 SSH 服务的状态。
  在 PowerShell 中,运行:

Get-Service -Name ssh*

 

二、客户端密钥连接

1.生成密钥 

ssh-keygen -t rsa -f D://id_rsa

注意如果要免密登录生成密钥时不要输入密码;

 

2. 复制  D://id_rsa.pub 文件  到服务器的 C:\Users\<user>\.ssh 文件夹 下的 authorized_keys文件,.ssh文件夹没有就新建,建不了.ssh 文件夹就用命令创建    命令 md .ssh

 


3. 修改服务器ssh 的配置  C:\ProgramData\ssh\sshd_config

#注释这两行
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

##添加这三行
PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys
PasswordAuthentication yes

 

  然后重新服务器的ssh 服务,或者在任务管理器中重启ssh服务 

Restart-Service sshd

 

(当然,你直接把id_rsa.pub复制到服务器的C:\PROGRAMDATA/ssh/administrators_authorized_keys 也可以,但一般都是多用户登录,每个用户的公钥可能都不一样,所以使用 C:\Users\<user>\.ssh\authorized_keys 会更好)

 

4. 客户端连接服务器

 ssh -i D:\\id_rsa Administrator@remotehost

第一次运行ssh的时候会有一个需要手动确认指纹的情况,使用-o StrictHostKeyChecking=no忽略手动确认,建议在一些CI环境使用
ssh -o StrictHostKeyChecking=no -i D:\\id_rsa Administrator@remotehost

 

5. 如果连接还是需要输入用户密码,尝试设置服务器用户的authorized_keys文件权限,注意替换你的用户名

icacls.exe "C:\Users\Administrator\.ssh\authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"   管理员用户
icacls.exe "C:\Users\{username}\.ssh\authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"  /grant "{username}:F"  其他用户

如果连接提示   Permissions for 'D:\id_rsa' are too open.   则设置你本机的私钥的权限

icacls.exe "D:\id_rsa" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

 

或者在服务器 OpenSSH 的安装目录(一般是 C:\Program Files (x86)\OpenSSH)下 powershell 运行  

.\FixHostFilePermissions.ps1 

用于修复文件权限的 OpenSSH 实用程序脚本 ·PowerShell/Win32-OpenSSH Wiki (github.com)

 

文件操作

sftp.exe examples · PowerShell/Win32-OpenSSH Wiki (github.com)
  

sftp {username}@{remotehost}              //用户名登录
sftp -i D:\\id_rsa {username}@{remotehost}    //密钥登录  
pwd                             
//显示远程服务器所在目录
lpwd                           
//显示本地服务器所在目录
cd
/tests                        //进入远程服务器的当前所在目录的tests文件夹
get file1.txt                      //下载服务器的当前所在目录远程文件
put D:
//file2.txt                   //上传本地文件到远程服务器
exit                          
//退出

 

posted @ 2023-08-09 11:44  diudiu1  阅读(1413)  评论(0编辑  收藏  举报