笔者在前文《Windows 支持 OpenSSH 了!》中介绍了 Windows 对 OpenSSH 支持的基本内容,本文在前文的基础上介绍一些 OpenSSH Server 的配置和常见用法。

以域用户身份登录

之前我们介绍了如何通过 Windows 本地用户的方式登录远程主机,下面看看如何以 Windows  域用户的方式登录:

> ssh domain\nickli@xa-crab
> ssh nickli@domain@xa-crab
> ssh -l nickli@domain xa-crab

上面的三种方式都可以通过域用户的身份登录的远程主机。个人比较喜欢第一种,第三种方式中的 -l 选项用来指定登录者的账号。
配置域用户通过公钥认证登录的方式与本地用户相同,请参考《Windows 支持 OpenSSH 了!》一文。

控制哪些用户和组可以连接到服务器

通过在 OpenSSH 服务的配置文件中添加 AllowGroups、AllowUsers、DenyGroups 和 DenyUsers 指令可以控制哪些用户和组可以连接到服务器。这些指令被处理的顺序为:DenyUsers、AllowUsers、DenyGroups,最后是 AllowGroups。这一点非常重要,如果我们只设置了一条 AllowGroups sshusers 记录,那么不在 sshusers 组中的用户将无法登陆。所以我们可以创建一个用户组用来包含允许通过 ssh 登陆主机的用户,并在配置文件 C:\ProgramData\ssh\sshd_config 中添加对应的 AllowGroups 记录:

AllowGroups sshusers

注意:所有帐户名称必须是小写字母。

除了上面的基本用法,我们还可以通更灵活的配置来允许或拒绝符合某些条件的用户登录主机,下面是些常见的例子:

# 阻止与用户 contoso\nick 从 10.32.1.68 登录主机
DenyUsers contoso\nick@10.32.1.68
# 阻止所有 contoso 域中的用户登录主机
DenyUsers contoso\*
# 只允许 contoso\sshusers 域组中的用户登录主机
AllowGroups contoso\sshusers # 只允许本地用户 nick 从 10.32.1.68 登录主机
AllowUsers nick@10.32.1.68
# 只允许本地用户组 sshusers 中的用户登录主机
AllowGroups sshusers

使用 scp 命令拷贝文件

以前在 Windows 之间传递文件事件很让人抓狂的事情,现在有了 OpenSSH 加持,自然是能够支持以 scp 的方式在主机间拷贝文件,再加公钥认证,完美的支持自动化的文件拷贝操作。下面是一个简单的用 scp 拷贝文件例子:

> scp D:\grafana.tar.gz nick@xa-crab:c:\testdir

sftp 服务器

OpenSSH Server 默认开启 sftp 服务器功能,也就是说我们通过 22 号端口就可以通过 ftp 协议访问远程主机,下面是笔者通过 ftp 客户端工具 FileZilla 浏览远程主机文件系统的截图:

当然,你也可以使用命令行客户端 sftp,效果是一样的。

远程执行命令

笔者在《PowerShell 远程执行任务》一文中介绍过如何在 Windows 平台上远程执行 PowerShell 命令,相比通过 OpenSSH 远程执行命令,PowerShell 的方式实在是让人感觉笨拙!让我们来看看通过 OpenSSH 远程执行命令是何等的简练:

> ssh nick@xa-crab hostname
> ssh nick@xa-crab "hostname; pwd"

第一行命令远程执行 hostname 命令,结果显示远程主机的名称;第二行命令远程执行分号分隔的两条命令,显示远程主机的名称和当前的路径。

远程执行本地的脚本
由于 PowerShell 中不能把文件 attach 到 stdin,所以下面的命令不能工作:

> ssh nick@xa-crab < test.sh

但是我们可以采取管道操作获得类似的结果,在本地用户 nickli 的家目录中创建 mytask.ps1 文件,编辑其内容如下:

echo "Hello World!"
systeminfo > remotetest.txt

在本地运行下面的命令(远程主机的默认 shell 为 PowerShell):

> Get-Content mytask.ps1 | ssh nick@xa-crab

检查远程主机 xa-crab 上用户 nick 的家目录,可以看到 remotetest.txt 文件被创建,内容为 systeminfo 命令的输出。这种方法的优点是脚本中所有命令是在一个 session 中执行的,这点可以通过下面的方法验证。在本地用户 nickli 的家目录中创建 mytask2.ps1 文件,编辑其内容如下:

$p = Get-Process PowerShell
$p.VirtualMemorySize

在本地运行下面的命令(远程主机的默认 shell 为 PowerShell):

> ssh nick@xa-crab '$p = Get-Process PowerShell; $p.VirtualMemorySize'
> Get-Content mytask2.ps1 | ssh nick@xa-crab

上面的输出表明,脚本执行的过程中变量的上下文是整个脚本。

执行远程主机上的脚本
在远程主机 xa-crab 上的用户 nick 的家目录中创建 task.ps1 文件,编辑其内容如下:

echo "Hello Nick!"
systeminfo > test.txt

在本地运行下面的命令(远程主机的默认 shell 为 PowerShell):

> ssh nick@xa-crab powershell.exe -F task.ps1

检查远程主机 xa-crab 上用户 nick 的家目录,可以看到 test.txt 文件被创建,内容为 systeminfo 命令的输出。

总结

当 Windows 支持 OpenSSH 后,我们就能够用相同的工具在 Windows 平台和 Linux 平台上工作了,更进一步还可以用 ssh 客户端跨平台地连接 ssh 服务器,想想就是一件开心的事情(虽然目前 bug 还很多:))!

参考:
PowerShell/Win32-OpenSSH
OpenSSH in Windows

Windows OpenSSH 基本用法的更多相关文章

  1. windows openssh 设置root 目录

    默认windows openssh 服务的root 目录是用户账户所在的目录(一般是administrator),但是我们可以通过修改sshd_config 重新修改路径 可选的修改方式 直接修改ss ...

  2. Windows rundll32的用法-批处理管理打印机

    用法: rundll32 printui.dll,PrintUIEntry [options] [@commandfile] /a[file] 二进制文件名 /b[name] 基本打印机名 /c[na ...

  3. Windows批处理命令用法

    阅读下面文字需要一定的dos基础概念,象:盘符.文件.目录(文件夹).子目录.根目录.当前目录 每个命令的完整说明请加 /? 参数参考微软的帮助文档可以看到,在 /? 帮助里,"命令扩展名& ...

  4. windows openssh server 安装试用

    使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...

  5. Windows系统防火墙用法

    1.按下“Win+X”组合键呼出系统快捷菜单,点击打开“控制面板”: 2.将“查看方式”修改为[大图标],然后点击“Windows 防火墙”: 3.在防火墙窗口左侧点击“高级设置”:(若防火墙未开启, ...

  6. windows“画图”工具用法

    图片编辑工具不少,photoshop功能强大,但是并不是那么容易掌握.而且,倘若一个简单的图片处理问题就使用这么强大的工具,有点“杀鸡焉用牛刀”的意思,要知道只打开photoshop就需要一段等待时间 ...

  7. windows openssh安装

    下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases 解压好后打开目录,执行以下命令: powershell.exe -Execution ...

  8. Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809

    Installing OpenSSH from the Settings UI on Windows Server 2019 or Windows 10 1809 OpenSSH client and ...

  9. Windows 10系统运维之OpenSSH

    随着PowerShell和OpenSSH的日渐成熟,在客户终端Windows居多的运维之中,使用Win32-OpenSSH和Powershell来管理一些客户机变成了相当实用的一种解决方案. Open ...

随机推荐

  1. Android为TV端助力 Canvas 和 Paint用法

    自定义view里面的onDraw方法,在这里我们可以绘制各种图形,onDraw里面有两个API我们需要了解清楚他们的用法:Canvas 和 Paint. Canvas翻译成中文就是画布的意思,Canv ...

  2. SparkSQL【1.x版本】字段敏感不敏感问题

    一.特征 1.SqlContext默认大小写不敏感,如果DataFrame中有字段相同,大小写不同,在使用字段的时候不会引起歧义. 2.HiveContext提供更多的Hive预置函数,可以更高效的进 ...

  3. ${pageContext.request.contextPath}相关问题总结

    (1)采用绝对路径,但为了解决不同部署方式的差别,在所有非struts标签的路径前加${pageContext.request.contextPath},如原路径为:”/images/title.gi ...

  4. [20180914]oracle 12c 表 full_hash_value如何计算.txt

    [20180914]oracle 12c 表 full_hash_value如何计算.txt --//昨天在12c下看表full_hash_value与11g的full_hash_value不同,不过 ...

  5. CentOS7中安装MySQL5.7

    安装必要的组件 yum install –y autoconf automake imake libxml2-devel expat-devel cmake gcc gcc-c++ libaio li ...

  6. SMM框架--maven创建web项目

    1.首先新建一个maven项目,看图: 2.按照以上步骤就可以创建一个maven项目,可以看到最下图的目录结构,但是这样的目录结构是不对的,需要做一些修改. 首先为了避免乱码,我们应该将项目编码换成U ...

  7. OkHttp简单使用

    OkHttp是一个轻量优秀的网络框架.用于替代HttpUrlConnection和Apache HttpClient(android API23 6.0里已移除HttpClient,) 使用方法: 1 ...

  8. JavaScript -- 时光流逝(十):Screen 对象、History 对象、Location 对象

    JavaScript -- 知识点回顾篇(十):Screen 对象.History 对象.Location 对象 1. Screen 对象 1.1 Screen 对象的属性 (1) availHeig ...

  9. zabbix 添加自动发现端口并监控

    最近在部署zabbix监控  有些服务器上开启的服务端口非常多  如果一个个添加监控会很繁琐,于是想到了自动发现规则  自动发现服务器上的服务端口并进行监控. 在zabbix客户端服务器上进行操作 1 ...

  10. Angular路由与多视图综合案例

    Ajax请求存在的几个问题 (1)Ajax请求不会留下History 记录,会导致浏览器后退按钮失效 (2)用户无法直接通过URL进入应用中的指定页面(保存书签.链接分享给朋友) (3)Ajax对SE ...