Windows OpenSSH 基本用法
笔者在前文《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 基本用法的更多相关文章
- windows openssh 设置root 目录
默认windows openssh 服务的root 目录是用户账户所在的目录(一般是administrator),但是我们可以通过修改sshd_config 重新修改路径 可选的修改方式 直接修改ss ...
- Windows rundll32的用法-批处理管理打印机
用法: rundll32 printui.dll,PrintUIEntry [options] [@commandfile] /a[file] 二进制文件名 /b[name] 基本打印机名 /c[na ...
- Windows批处理命令用法
阅读下面文字需要一定的dos基础概念,象:盘符.文件.目录(文件夹).子目录.根目录.当前目录 每个命令的完整说明请加 /? 参数参考微软的帮助文档可以看到,在 /? 帮助里,"命令扩展名& ...
- windows openssh server 安装试用
使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...
- Windows系统防火墙用法
1.按下“Win+X”组合键呼出系统快捷菜单,点击打开“控制面板”: 2.将“查看方式”修改为[大图标],然后点击“Windows 防火墙”: 3.在防火墙窗口左侧点击“高级设置”:(若防火墙未开启, ...
- windows“画图”工具用法
图片编辑工具不少,photoshop功能强大,但是并不是那么容易掌握.而且,倘若一个简单的图片处理问题就使用这么强大的工具,有点“杀鸡焉用牛刀”的意思,要知道只打开photoshop就需要一段等待时间 ...
- windows openssh安装
下载地址:https://github.com/PowerShell/Win32-OpenSSH/releases 解压好后打开目录,执行以下命令: powershell.exe -Execution ...
- 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 ...
- Windows 10系统运维之OpenSSH
随着PowerShell和OpenSSH的日渐成熟,在客户终端Windows居多的运维之中,使用Win32-OpenSSH和Powershell来管理一些客户机变成了相当实用的一种解决方案. Open ...
随机推荐
- Android 自定义弹出框带EditText
EditText 布局页面 edittext_ownername_dialog.xml: <?xml version="1.0" encoding="utf-8&q ...
- Apktool(2)——使用前必须知道的apk知识
这里拿testapp.apk为例,如下图所示,左图为直接解压apk得到的文件,右图为apktool反编译得到的文件(反编译的使用在下一篇重点介绍) 图1 解压apk和反编译apk得到的文件目录对比 一 ...
- Node.js学习记录(一)--安装设置篇
安装Node window window上安装node可选择以下两种方式: 方式一:直接进入官网下载安装 进入node.js官网点击windows,选择.msi后缀的,根据自己的电脑选择对应的64位或 ...
- scala模式匹配详细解析
一.scala模式匹配(pattern matching) pattern matching可以说是scala中十分强大的一个语言特性,当然这不是scala独有的,但这不妨碍它成为scala的语言的一 ...
- 简易付XP版本无法获取server.xml配置文件处理方案
博客地址:https://blog.csdn.net/zdw_wym/article/details/40892535 把它添加到C:/WINDOWS/Microsoft.NET/Framework/ ...
- Scala隐式参数
Scala方法可以具有隐式参数列表,由参数列表开头的implicit关键字标记.如果参数列表中的参数没有像往常一样传递,Scala将查看它是否可以获得正确类型的隐式值,如果可以,将自动传递. Scal ...
- Vue2 学习笔记5
文中例子代码请参考github watch属性的使用 考虑一个问题:想要实现 名 和 姓 两个文本框的内容改变,则全名的文本框中的值也跟着改变:(用以前的知识如何实现???) 监听data中属性的改变 ...
- SQL Server的实例恢复解析
同Oracle一样,SQL Server在非一致性关闭的时候也会进行实例恢复(Instance Recovery),本文根据stack overflow的文章介绍一些SQL Server实例恢复的知识 ...
- Zabbix监控文件是否存在/文件大小
检查C:\Zabbix\zabbix_agentd.log文件是否存在 zabbix_get -s 10.16.4.1 -k vfs.file.exists[C:\\Zabbix\\zabbix_ag ...
- 《Java大学教程》--第2章 选择
迭代(iteration).重复(repetition):三种循环* for: 重复执行固定次数* while: 重复执行不固定次数* do...while: 比while至少多一次 1.答:P47迭 ...