OpenSSH

参考:

Install OpenSSH | Microsoft Docs

OpenSSH key management for Windows | Microsoft Docs

NIST document IR 7966

简介:

OpenSSH是一个用于远程连接工具它基于SSH协议。它将客户端与服务器之间通信的数据进行加密传输,防止数据泄露,和连接被窃取等恶意攻击。

安装(下面的操作指令在PowerShell中完成):

1.安装(安装和卸载都可以在"Windows Settings"中操作)

# 在PwoerShell上面安装OpenSSH
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

# 如果OpenSSH的服务器和客户端都没有安装将会出现如下的输出
# 如果安装了某一个下面对应的NotPresent将会被替换为Installed
Name  : OpenSSH.Client~~~~0.0.1.0
State : NotPresent

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

# 然后根据前面判断是否安装,如果没有执行下面的命令去安装
# 安装OpenSSH客户端
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0

# 安装OpenSSH服务器
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 安装完会看到类似下面的输出
Path          :
Online        : True
RestartNeeded : False

2.配置OpenSSH服务器

# 开启OpenSSH服务器
Start-Service sshd

# 建议开启(可选配置):
Set-Service -Name sshd -StartupType 'Automatic'

# 确保防火墙已经配置好,当开启服务器时这个配置将被应用,可以运行下面的命令去验证
if (!(Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue | Select-Object Name, Enabled)) {
    Write-Output "防火墙配置 'OpenSSH-Server-In-TCP' 不存在,正在创建..."
    New-NetFirewallRule -Name 'OpenSSH-Server-In-TCP' -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
} else {
    Write-Output "防火墙配置 'OpenSSH-Server-In-TCP' 已经被创建."
}

3.连接OpenSSH服务器

# 一旦安装完成,我们就可以使用对应的客户端去链接OpenSSH的服务器,这里使用PowerShell去链接,需要使用管理员权限
ssh username@servername

# 一旦我们连接上OpenSSH的服务器,会输出类似下面的内容
The authenticity of host 'servername (10.00.00.001)' can't be established.
ECDSA key fingerprint is SHA256:(<a large string>).
Are you sure you want to continue connecting (yes/no)?

# 输入yes即可连接这个服务器,在这里我们会被提示输入密码,为了安全起见,这里将不会显示你输入的内容
# 一旦你链接上就会出现类似下面的界面
domain\username@SERVERNAME C:\Users\username>

4.卸载OpenSSH()

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

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

# 如果在使用服务器的时候卸载,我们可能需要重启服务器

Open SSH 密钥管理:

1.介绍

大部分的权限认证在Windows环境中使用 用户名-密码对,这样可以很好在共享系统之间工作。当跨域工作时,比如在本地和公有云之间,这种密码对很容易被暴力入侵。

相比较而言,Linux通常使用公钥和私钥对去进行权限验证,这可以保证不会出现随机猜中密码的情况,OpenSSH也包含了一些工具去实现这个功能。

如果不熟悉SSH key的管理,这里强烈建议阅读参考三"NIST document IR 7966"

2.辅助命令

ssh-keygen: 用于生成安全密钥
ssh-agent、ash-add: 安全的存储私钥
scp、sftp: 在服务器初始化期间安全的复制公钥

3.密钥对

密钥对分为公钥和私钥文件,它们被用于不同的权限验证协议。

SSH公共的密钥校验使用非对称加密算法,来生成2个重要的文件,一个是私文件、一个是公钥文件(一般以.pub为后缀)
私钥相等于是密码,它应该被妥善的保护。如果他们获得了你的私钥文件,他们就可以登录任何你可以登陆的服务器。
公钥一般放在SSH服务器上,并且可以在不损害私钥的情况下共享。

当在SSH服务器上使用密钥权限管理时,服务器和客户端使用用户名对应的公钥与私钥进行对比。
如果无法根据客户端私钥验证服务器公钥则权限校验失败。

通过在生成密钥对时输入密码短语,可以使用密钥对实现多因素身份验证(请参阅下面的用户密钥生成)。 在身份验证期间,系统会提示用户输入密码,该密码与 SSH 客户端上的私钥一起用于对用户进行身份验证。

4. 密钥生成:

# 服务器密钥生成:
# 设置服务自动启动
Get-Service -Name sshd | Set-Service -StartupType Automatic

# 开启 sshd 服务
Start-Service sshd

# 客户端密钥生成:
# 想要使用基于密钥的权限校验,我们需要在客户端先生成公钥和私钥文件。ssh-ketgen.exe 可以用于生成密钥文件,它可以基于DSA, RSA, ECDSA, 或则 Ed25519 算法生成密钥文件。当没有指定对应的算法时,默认使用RSA算法。这里使用 Ed25519 来生成密钥

# 在PowerShell窗口输入下面的语句即可
ssh-keygen -t ed25519
# 输出如下内容
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\username\.ssh\id_ed25519):

# 我们可以直接点击Enter选择默认的路径,或则指定一个那我们想要放置的文件路径和文件名,输入前确保文件路径存在。
# 到这里我们需要去输入一个密码(俗称加点盐)去加密我们的私钥。这里推荐输入一些内容,当然也可以不输入任何东西。
# 这个输入的密码和密钥文件都是权限校验的一部分

# 两次输入密码后
Your identification has been saved in C:\Users\Jerry/.ssh/id_ed25519.
Your public key has been saved in C:\Users\Jerry/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:ysRJFI0/G7j41DoPUQXj+yvwkfbnAnlEvNv2CVMjvxY jerry@Desktop-swA3
The key's randomart image is:
+--[ED25519 256]--+
|      o+oo.      |
|     ....oo      |
|      .oo. .     |
|     o.o+.o . o  |
|     .=oSB o + . |
|    .o+oO.o = E  |
|     o+= =.. + + |
|      +.o o.. =  |
|       o...+..   |
+----[SHA256]-----+


# 到对应目录查看生成文件,输入
PS C:\Users\Jerry\.ssh> dir
# 输出如下,前2个为刚刚生成的密钥文件
# id_ed25519: 私钥
# id_ed25519.pub : 公钥
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        12/13/2021  11:08 AM            464 id_ed25519
-a----        12/13/2021  11:08 AM            101 id_ed25519.pub
-a----        11/26/2020   1:28 PM           2655 id_rsa
-a----        11/26/2020   1:28 PM            576 id_rsa.pub

5.将生成的密钥加入服务器中:

# 这里主要可以实现,当客户端需要权限校验时,ssh-agent将会自动获取密钥,并且将密钥传给客户端
# 在Windows下可以怎么做,以保护我们刚刚生成的密钥
# 默认情况下ssh-agent是没有启动的,需要我们手动启动
# 这里需要管理员权限
Get-Service ssh-agent | Set-Service -StartupType Manual

# 开启服务
Start-Service ssh-agent

# 这里应该返回运行的状态
Get-Service ssh-agent

# 将生成的私钥加载到ssh-agent
ssh-add ~\.ssh\id_ed25519

Note:

强烈建议备份私钥文件到安全的地方,并在添加到ssh-agent后删除。
如果使用了加强算法,则私钥不能在代理中被找到。
如果我们失去了私钥,我们将不得不创建一个新的密钥对,并且更新所有涉及的系统

6.部署公钥:

# 使用上面创建的用户密钥,我们需要将公钥文件放置在服务器那边,这个具体的位置和文件名,需要看这个用户属于管理员组还是普通用户组。

# 普通用户:
# Make sure that the .ssh directory exists in your server's user account home folder
# 确保 .ssh 在服务器对应的用户家目录中
ssh username@domain1@contoso.com mkdir C:\Users\username\.ssh\

# 使用scp去复制刚刚生成的公钥到服务器的authorized_keys目录下
scp C:\Users\username\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\Users\username\.ssh\authorized_keys


# 管理员:
# 确保 .ssh 在服务器对应的用户家目录中
ssh user1@domain1@contoso.com mkdir C:\ProgramData\ssh\

# 使用scp去复制刚刚生成的公钥到服务器的authorized_keys目录下
scp C:\Users\username\.ssh\id_ed25519.pub user1@domain1@contoso.com:C:\ProgramData\ssh\administrators_authorized_keys


# Appropriately ACL the authorized_keys file on your server
# 在服务器上,适当地设置authorized_keys的访问控制权限
ssh --% user1@domain1@contoso.com icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"

结语:

到这里所有的配置就已经完成,任何的客户端都可以通过私钥去访问对应的服务器。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值