Windows 10系统运维之OpenSSH
随着PowerShell和OpenSSH的日渐成熟,在客户终端Windows居多的运维之中,使用Win32-OpenSSH和Powershell来管理一些客户机变成了相当实用的一种解决方案。
OpenSSH 是安全 Shell (SSH) 工具的开放源代码版本,Linux 及其他非 Windows 系统的管理员使用此类工具跨平台管理远程系统。
SSH 基于客户端-服务器体系结构,用户在其中工作的系统是客户端,所管理的远程系统是服务器。 OpenSSH 包含一系列组件和工具,用于提供一种安全且简单的远程系统管理方法,其中包括:
- sshd.exe,它是远程所管理的系统上必须运行的 SSH 服务器组件
- ssh.exe,它是在用户的本地系统上运行的 SSH 客户端组件
- ssh-keygen.exe,为 SSH 生成、管理和转换身份验证密钥
- ssh-agent.exe,存储用于公钥身份验证的私钥
- ssh-add.exe,将私钥添加到服务器允许的列表中
- ssh-keyscan.exe,帮助从许多主机收集公用 SSH 主机密钥
- sftp.exe,这是提供安全文件传输协议的服务,通过 SSH 运行
- scp.exe 是在 SSH 上运行的文件复制实用工具
本篇重点主要介绍如何在 Windows 上使用 OpenSSH,包括安装以及使用过程当中会出现的问题和解决办法
在 Windows Server 2019 和 Windows 10 1809 中,OpenSSH 客户端和 OpenSSH 服务器是可单独安装的组件。 具有这些 Windows 版本的用户可以直接安装和配置 OpenSSH
但是,很多人使用的Windows版本都是有被精简过的,不一定能直接通过“应用”>“应用和功能”>“管理可选功能”这种办法来直接安装配置。
碰上这种情况最直接的办法就是直接在Github上面下载。
Win32-OpenSSH下载地址(文章所用的版本是v8.1.0.0p1-Beta)
https://github.com/PowerShell/Win32-OpenSSH
PowerShell下载地址(文章所用的版本是v7.1.0)
https://github.com/PowerShell/PowerShell
下载下来的是这样的:
若要配置 OpenSSH 服务器以在 Windows 上首次使用,请以管理员身份启动 PowerShell,然后运行以下命令来启动 SSHD 服务:(有防火墙的需要这样设置,我自己默认都是关闭Windows防火墙)
Start-Service sshd
# OPTIONAL but recommended:
Set-Service -Name sshd -StartupType 'Automatic'
# Confirm the Firewall rule is configured. It should be created automatically by setup.
Get-NetFirewallRule -Name *ssh*
# There should be a firewall rule named "OpenSSH-Server-In-TCP", which should be enabled
# If the firewall does not exist, create one
New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
首次使用 SSH(使用密码验证方式)
重点,在直接使用SSH的过程当中,Windows的用户(远程客户端)需要设置密码,Windows通过SSH的验证方式有两种,一种是使用密码,一种密钥对。
在Windows用户(远程客户端)已经有设置密码的情况下可以通过下面的方式进行连接。
在 Windows 上安装 OpenSSH 服务器后,可以从安装了 SSH 客户端的任何 Windows 设备上使用 PowerShell 来快速测试它。 在 PowerShell 中,键入以下命令:
Ssh administrator@D1
到任何服务器的第一个连接都将生成类似以下内容的消息:
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”或“no”。 回答 Yes 会将该服务器添加到本地系统的已知 ssh 主机列表中。
系统此时会提示你输入密码。 作为安全预防措施,密码在键入的过程中不会显示。
在连接后,你将看到类似于以下内容的命令 shell 提示符:
Administrator@D1 C:\Users\Administrator>
Windows OpenSSH 服务器使用的默认 shell 是 Windows 命令行解释器,这个默认Shell可以通过注册表进行修改,比方改成PowerShell.
为 Windows 中的 OpenSSH 配置默认 shell
默认命令 shell 提供用户使用 SSH 连接到服务器时看到的体验。 初始默认 Windows 是 Windows Command shell (cmd.exe)。 Windows 还包括了 PowerShell 和 Bash,第三方命令 shell 也可用于 Windows,并可配置为服务器的默认 shell。
在HKEY_LOCAL_MACHINE\SOFTWARE\OpenSSH注册表下添加字符串值DefaultShell,把shell 可执行文件的完整路径添加上去就可以
再次使用 SSH(使用密钥对验证方式)
使用密码方式验证这种方式,简单粗暴,但是假如远程客户端的密码设置有的设置123456,有的设置abcefg等这种乱七八糟的时候,不太可能针对每台机子去记住对应的密码,自然而然的这种通过密钥对的方式就更受维护人员的喜欢。
密钥对验证方式可是理解成,每一台机子都分别安装了一把锁,这把锁只有对应的钥匙才能开启,一把钥匙对应一把锁这个大家都很容易理解,像日常生活当中,锁是当处可见的,可是钥匙却不是那么经常见到,OpenSSH也是可以采取
这样的方式来实现的。下面是官方的说法
关于密钥对
密钥对指的是由特定的身份验证协议使用的公钥和私钥文件。
SSH 公钥身份验证使用不对称加密算法来生成两个密钥文件 – 一个为“私钥”文件,一个为“公钥”文件。 私钥文件等效于密码,在所有情况下都应当保护它们。 如果有人获取了你的私钥,则他们可以像你一样登录到你有权登录的任何 SSH 服务器。 公钥放置在 SSH 服务器上,并且可以共享,不会危害私钥的安全。
将密钥身份验证用于 SSH 服务器时,SSH 服务器和客户端会依据私钥来比较所提供的用户名的公钥。 如果无法依据客户端私钥验证服务器端公钥,则身份验证失败。
可以通过在生成密钥对时要求提供密码来通过密钥对实现多重身份验证(参见下文的密钥生成)。 在身份验证期间,会提示用户输入密码,将使用该密码以及 SSH 客户端上的私钥来对用户进行身份验证。
主机密钥生成
公钥具有特定的 ACL 要求,在 Windows 上,这些要求等同于仅允许管理员和 System 进行访问。(这个是重点) 为使此更加简单,
- 已创建了 OpenSSHUtils PowerShell 模块来正确设置密钥 ACL,并且应当将该模块安装在服务器上
- 首次使用 sshd 时,将自动生成主机的密钥对。 如果 ssh-agent 正在运行,则密钥将自动添加到本地存储中。
用户密钥生成
若要使用基于密钥的身份验证,首先需要为客户端生成一些公钥/私钥对。 通过 PowerShell 或 cmd,使用 ssh-keygen 生成一些密钥文件。
ssh-keygen
应当会显示如下某些内容
添入相要放密钥对的位置,添写的是包括位置和文件名
接下会要求你输入密钥的密码(建议输入,双重认证更加安全),并要求你再次确认
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
操作完成之后,在刚刚保存密钥对的地方可以找到对应的公钥和私钥
id_rsa这个是私钥(这个就是钥匙,需要远程哪台机子的时候就使用这个),id_rsa.pub这个是公钥(这个就是锁,要先放在远程终端上面)。
部署公钥
若要使用上面创建的用户密钥,需要将公钥放置在服务器上的一个文本文件中,该文件名为 authorized_keys,默认位于 users\username\.ssh\ 下。
如果用户是归属administrators用户组时,匹配的文件位置在C:\programdata\ssh\administrators_authorized_keys
这个可以在OpenSSH配置文件进行修改
至此可以通过OpenSSH进行登录了
在使用的过程当中最经常出现的情况是
像这种权限拒绝是最经常出现的,主要因为是由于默认情况情况,公钥的权限没设置正确,默认情况下公钥的安全属性里面可以看到
在这个安全权限里面多了Authenticated Users用户组,去除掉,安全属性里面仅允许管理员和 System 进行访问。
最后,
对于需要频繁进行远程管理的运维来说,有些仅仅只需要一行命令就可以解决问题,决不会想要进行多一步的操作,
在已经有安装了PowerShell和OpenSSH的机子情况下,比方想要重启远程的电脑只需要一行代码,决不会想先SSH登录再输入命令,可以直接采用下面的代码直接进行重启
Invoke-Command -HostName D1 -ScriptBlock { Restart-Computer -Force } -KeyFilePath "D:/id_rsa"
要想实现这种效果,需要在SSHD配置文件添加如下配置:
Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
PowerShell 可执行文件的默认位置是 c:/progra~1/powershell/7/pwsh.exe
。 该位置可能因 PowerShell 安装方式而有所不同。
对于包含空格的任何文件路径,必须使用 8.3 短名称。 OpenSSH for Windows 中存在一个 bug,使空格在子系统可执行路径中无效。
然后重启Open SSH Server服务
Windows 10系统运维之OpenSSH的更多相关文章
- Linux系统运维笔记(四),CentOS 6.4安装Nginx
Linux系统运维笔记(四),CentOS 6.4安装Nginx 1,安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtool op ...
- Linux系统运维相关的面试题 (问答题)
这里给大家整理了一些Linux系统运维相关的面试题,有些问题没有标准答案,希望要去参加Linux运维面试的朋友,可以先思考下这些问题. 一.Linux操作系统知识 1.常见的Linux发行版本都有 ...
- Archlinux系统运维
本文将针对Archlinux下的系统运维进行介绍. 内核相关 查看当前内核版本 123 uname -r------------------------------------------------ ...
- 如何解决Windows 10系统下设备的声音问题
如何解决Windows 10系统下设备的声音问题? 请阅读下面的说明来解决Windows 10设备上的声音问题. 1. 检查设备管理器 打开开始菜单,键入设备管理器, 从出现的结果中选择并打开它. 在 ...
- 解决CentOS无法显示中文字体 | 系统运维 | Web2.0
解决CentOS无法显示中文字体 | 系统运维 | Web2.0 About Me 博客园 devops 前端 张家港水蜜桃 傍晚好! 2013年09月12日 17:56:08 ...
- 浅谈Linux系统运维工程师必备技能
一.什么是运维工程师 相信读者们必定听说过Linux,也听说过运维工程师.那么运维工程师是个什么概念呢? 百度百科上的官方解释如下: 运维工程师(Operations)在国内又称为运维开发工程师(De ...
- (转)如何禁用Windows 10系统的触摸屏
https://baijiahao.baidu.com/s?id=1593890738706748667 现在许多优质的Windows 10个人电脑都配备了触摸屏,因为触摸屏的日益普及,Windows ...
- Linux系统运维笔记(五),CentOS 6.4安装java程序
Linux系统运维笔记(五),CentOS 6.4安装java程序 用eclipse编译通的java程序,现需要实施到服务器.实施步骤: 一,导出程序成jar包. 1,在主类编辑界面点右健,选 ru ...
- Linux系统运维笔记(四),CentOS 6.4安装 MongoDB
Linux系统运维笔记(四),CentOS 6.4安装 MongoDB 1,下载 https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6 ...
随机推荐
- Java学习的第二十二天
1.异常处理 try...catch...finally... finally带return finally也可省略 try里面可以有try 多个异常用IllegalAgruementExceptio ...
- [Luogu P2387] [NOI2014]魔法森林 (LCT维护边权)
题面 传送门:https://www.luogu.org/problemnew/show/P2387 Solution 这题的思想挺好的. 对于这种最大值最小类的问题,很自然的可以想到二分答案.很不幸 ...
- AQS源码深入分析之共享模式-你知道为什么AQS中要有PROPAGATE这个状态吗?
本文基于JDK-8u261源码分析 本篇文章为AQS系列文的第二篇,前文请看:[传送门] 第一篇:AQS源码深入分析之独占模式-ReentrantLock锁特性详解 1 Semaphore概览 共享模 ...
- ACM已刷题
ZOJ: 1001.1002.1003.1004.1005.1006.1037.1045.1048.1049.1067.1087.1091.1016. swjtuoj: 2433 注:没链接的应该是最 ...
- IDEA创建maven项目没有src/main/java目录问题解决
IDEA创建maven项目没有src/main/java目录问题解决 今天新建一个maven项目的时候,没有src文件目录,查了网上很多,依然没有解决,后来发现是VM Options ...
- 1.深入Istio:Sidecar自动注入如何实现的?
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com 本文使用的Istio源码是 release 1.5. 这篇文章打算讲一下sidecar, ...
- Luogu P1856 [USACO5.5]矩形周长Picture
线段树+扫描线 经典的扫描线问题 首先将一个矩形看作由竖着的两条边和横着的两条边构成 那分成两次考虑,一次考虑竖边,一次考虑横边 首先考虑横边 如图两个矩形,现将横边擦去,留下竖边,将平面划分成3个区 ...
- dict和list
一.字典(Dictionary) 1.什么是 dict(字典) 上一章节,我们学习了列表(List) 和 元组(tuple) 来表示有序集合. 而我们在讲列表(list)的时候,我们用了列表(list ...
- JVM常用调优工具介绍
前言 王子在之前的JVM文章中已经大体上把一些原理性问题说清楚了,今天主要是介绍一些实际进行JVM调优工作的工具和命令,不会深入讲解,因为网上资料很多,篇幅可能不长,但都是实用的内容,小伙伴们有不清楚 ...
- http 代理阅读1
代理模式数据流处理: //配置proxy_pass后,在 ngx_http_core_content_phase 里面指向该函数 /* 那么,当有请求访问到特定的location的时候(假设这个loc ...