1. 开启SSH服务器
-
在设置中搜索“可选功能”,安装SSH服务器:
-
以管理员身份运行PowerShell,执行:
Start-Service sshd Set-Service -Name sshd -StartupType Automatic
如果要禁用OpenSSH服务器功能:
按 Win + R 输入services.msc
,找到 OpenSSH SSH Server 服务,选择 停止此服务:
右键选择 属性,将 启动类型 设为 禁用
-
允许TCP端口22入站:
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
如果需要关闭SSH服务器的话,可以执行以下命令删除名为sshd的入站规则:
Remove-NetFirewallRule -DisplayName 'OpenSSH Server'
2. 通过密码登录
ssh 用户名@服务器IP
其中用户名通过echo %username%
命令即可得到,服务器IP通过ipconfig | findstr IPv4
即可得到,SSH密码对于Windows系统来说就是开机密码。
首次登陆可能会提示是否加入known_hosts,输入yes即可。
3. 通过秘钥登录
(此处客户端示例也是Windows电脑。Linux电脑略,等我也用Linux电脑访问Windows服务器了再写)
在客户端用cmd1生成秘钥:
ssh-keygen -t rsa -b 4096 -C "你的邮箱@example.com"
根据提示选择存放文件夹(默认为C:\Users\user_name\.ssh
)。密码可以不输入,直接回车。
如果是Windows系统的话,现在就会在存放文件夹下出现id_rsa.pub文件,这个就是公钥,复制公钥中的文本,在服务端的.ssh文件夹(默认为C:\Users\user_name\.ssh
)下打开authorized_keys文件(如果没有的话就新建这个文本文件),将公钥文本复制到文件末尾。
authorized_keys文件的权限设置:右键属性 – 安全 – 高级 – 点击“禁用继承”–当出现提示时,选择“将继承的权限转换为此对象的显式权限”。然后将权限条目删除至只剩“SYSTEM”、自己的账户、“Administrators”。
效果:
编辑配置文件C:\ProgramData\ssh\sshd.config:
确保以下3条没有被注释
PubkeyAuthentication yes # 使用公钥
AuthorizedKeysFile .ssh/authorized_keys # 公钥位置
确保以下2条有注释掉
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
如果要只允许秘钥登录的话,设置:PasswordAuthentication no
在powershell中重启一下服务:net stop sshd && net start sshd
此时在客户端使用ssh 用户名@服务器IP
命令应该就可以直接访问服务器了。
命令行不能使用中文的powershell,在使用powershell中文生成文件的时候默认使用 utf-16 编码而不是 utf-8,这会导致公钥过长出现 line 1 exceeds size limit 错误
来源:Windows之间使用OpenSSH的ssh免密登录,排坑-USB迷|专注于互联网分享 ↩︎