笔者在前文《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. Xamarin.Forms 使用本地数据库之 SQLite

    前言 Xamarin.Forms支持使用SQLite数据库引擎.本文介绍了Xamarin.Forms应用程序如何读取和写入数据到使用SQLite.Net的本地SQLite数据库. 在Xamarin.F ...

  2. (后端)swagger

    Swagger 文档提供了一个方法,使我们可以用指定的 JSON 或者 YAML 摘要来描述你的 API,包括了比如 names.order 等 API 信息. 你可以通过一个文本编辑器来编辑 Swa ...

  3. 在 Centos 安装 MySQL

    MySQL是开源的数据库管理系统,通常作为LEMP(Linux, Nginx, MySQL/MariaDB, PHP/Python/Perl)技术栈的一部分,而被安装.RedHat 会害怕 Oracl ...

  4. Linux 之父自传《just for fun》读书笔记

    一次偶然的机会,看到了阮一峰老师关于这本书的介绍,当时我就觉得这本书相当有趣. 在没有读这本书之前,我觉得 linus 作为发明 Linux 系统的人,应该是一个比较严肃的人,就像我的老师一样.但事实 ...

  5. 品牌电脑硬盘损坏后,使用MediaCreationTool从微软官方下载正版Windows到USB做安装盘

    最近我的一台台式机电脑的硬盘损坏了.一开始是速度逐渐变慢,后来慢得难以忍受,有时半天无响应.查看 Windows event ,发现有 id 为 7 的磁盘报错.使用 Windows 8.1 家庭版自 ...

  6. SQL中常用日期函数

    --1 GETDATE() 返回当前系统日期SELECT GETDATE() --2 DATEADD(日期部分,常数,日期) 返回将日期的指定日期部分加常数后的结果返回 日期部分可以是: --常数为正 ...

  7. [20190320]测试相同语句遇到导致cursor pin S的情况.txt

    [20190320]测试相同语句遇到导致cursor pin S的情况.txt --//前面测试链接:http://blog.itpub.net/267265/viewspace-2636342/-- ...

  8. MSSQL sql server order by 1,2 的具体含义

    转自:http://www.maomao365.com/?p=5416 摘要: order by 1,2 的含义是对表的第一列  按照从小到大的顺序进行排列 然后再对第二列按照从小到大的顺序进行排列 ...

  9. How to monitor tempdb in MS SQL

    Error: tempdb is full due to active_transaction. select ss.[host_name], ss.login_name, ss.original_l ...

  10. Windows 在命令行中将输出内容放到文件中

    1.将命令行中输出的内容存储到文件中. 使用重定向符号 “>” 就可以了. 通过 > 可以创建新文件并将内容放到文件中,如果文件存在,则会覆盖. 2.通过 >> 可以向已有的文 ...