文章目录
- abstract
- 为什么考虑命令行连接
- 讨论主题
- powershell远程控制
- 使用PowerShell远程管理
- 前提条件:
- 步骤:
- 1. 启用WinRM服务
- 2. 配置信任主机
- 3. 测试连接
- 4. 创建远程会话
- 5. 运行远程命令
- 6. 关闭会话
- 例子
- 小结
- SSH方案
- 基础连接
- 免密自动登录
- 修改配置文件
- 在ssh server端创建支持免密登录的公钥文件
- 重启服务
- 尝试免密登录
- 配置默认shell
abstract
- 对于两台windows设备,统一网络下经常用远程桌面来控制(mstsc)
- 而用命令行来控制也是可以的,虽然windows主打可视化操作而非命令行,但是命令行也可以执行很多基础操作
- 命令行下,可以执行比如文件管理,资源下载,软件安装不在话下,也可以利用vscode等代码编辑器借助Remote-SSH远程编辑代码
为什么考虑命令行连接
- 命令行连接的一个好处在于资源消耗小,连接快捷,体验一致性好
- 另外,现在windows命令行中也可以做到以管理员方式运行命令行
- windows 11 24h2开始开发者模式中支持sudo运行
- 而windows10也可以安装一些命令行工具比如
scoop
,然后下载诸如gsudo
等工具实现类似效果
讨论主题
- 假设局域网内我有两台windows设备,如何在设备A用命令行控制另一台设备B?
- 也就是说,把设备B作为server,设备A作为Client
powershell远程控制
在局域网内,你可以通过多种方法在设备A上使用命令行控制设备B。下面介绍一种常见的方法,即使用PowerShell和Windows远程管理(WinRM)。
使用PowerShell远程管理
前提条件:
- 启用WinRM服务:WinRM服务需要在两台设备上启用。
- 配置信任主机:设备A需要信任设备B。
- 用户权限:确保你有足够的权限来执行远程命令。
步骤:
1. 启用WinRM服务
在设备A和设备B上,都需要启用WinRM服务。打开PowerShell并运行以下命令:
2. 配置信任主机
在设备A上,配置信任主机,使其可以与设备B进行通信。假设设备B的IP地址是$ip=192.168.1.198
:
配置设备B为信任设备
你可以用逗号分隔多个IP地址。如果你想信任所有主机,可以使用通配符*
,但这可能会有安全风险:
3. 测试连接
在设备A上,使用以下命令测试与设备B的连接:
如果一切正常,你应该看到一个成功的响应。
例如
4. 创建远程会话
在设备A上,创建一个到设备B的远程会话:
此命令会提示你输入设备B的用户名和密码。
5. 运行远程命令
现在,你可以在设备A上运行命令来控制设备B。例如,查看设备B上的进程:
6. 关闭会话
完成操作后,记得关闭远程会话:
例子
假设你想在设备A上获取设备B的主机名。你可以运行以下命令:
而查看目录可能不会得到正确的结果
通过以上步骤,你就可以在设备A上通过命令行控制设备B了。如果在过程中遇到任何问题,请检查防火墙设置或用户权限。
小结
- 这种方式不是很优雅,连贯性和便利性不足
SSH方案
windows上需要手动安装ssh server软件(拓展模块),并且配置防火墙和服务自启动等设置
Get started with OpenSSH for Windows | Microsoft Learn
此外,官方文档还介绍了更多连接以及可以自定义配置的方案
Key-based authentication in OpenSSH for Windows | Microsoft Learn
OpenSSH Server configuration for Windows | Microsoft Learn
中文文档:
适用于 Windows 的 OpenSSH 服务器配置 | Microsoft Learn
基础连接
- 在server端安装必要的ssh服务软件
- 管理员方式运行powershell执行以下内容:
- 详情另见它文(防火墙配置等)
- Client连接Server
- 一般的连接命令行格式
ssh user@server
- 如果两个设备都开启了网络发现,那么可以用以下格式连接:``ssh user@serverName`
- 对于小型网络通常不用关心域,完整格式其实是
ssh domain\username@servername
,而经常省略掉domain\
这部分内容
- 否则用
ssh user@serverIp
来连接
免密自动登录
- 和linux server类似,但是windows 中需要修改的
ssh
服务器端的配置文件位置和linux不同(毕竟文件系统不同) - 一般在
C:\ProgramData\ssh
目录下面的sshd_config
文件中 - 这里给出简单的过程,完善的文档参考前面列出的参考文档链接
修改配置文件
- 您可以尝试用
type C:\ProgramData\ssh\sshd_config
命令行来查看配置文件中的内容 - 默认情况下的配置文件无法直接免密登录,您需要修改部分内容(其实默认文件中大多都是注释语句,有些需要我们解开注释,有些需要我们转为注释)
- 参考:在Windows Server 之间配置SSH 免密登录 - LearningAlbum
- 这里直接给出我已经修改过的一个可以免密登录ssh的配置文件(sshd_config)
其实总得就保留了三条配置,其余都是注释掉:(不同版本的openssh server可能有所不同)
在ssh server端创建支持免密登录的公钥文件
- 默认情况下,这个文件为
~/.ssh/authorized_keys
- 方式有多种,以下方案提供的命令行直接在ssh client的命令行中执行(powershell)
- 首先确定Client端的公钥文件位置
- 其中
id_*pub
可能需要您补全(比如id_ed25519.pub
),特别是您创建了多个不同的ssh key时,如果创建过一个,那么通常可以不修改直接执行
- 可以从而ssh client端上传到server
- 也可以复制公钥到剪切板,然后登录到server中创建相应文件
- 查看公钥
- 复制输出的内容,在Server端创建文件
~/.ssh/authorized_keys
,并插入复制的内容
重启服务
尝试免密登录
如果顺利的话,就可以登录到远程windows server (ssh),默认命令行shell是cmd
输入powershell
或pwsh
可以切换shell
配置默认shell
- 适用于 Windows 的 OpenSSH 服务器配置 | Microsoft Learn
- windows ssh server默认的shell是cmd,这是一个过时的shell
- 我们可以更改为powershell或其他shell
- 首先查看openssh是否安装在默认路径:
- 然后需要修改注册表,并且可以通过一个一句就可以实现修改
- 首先登录到windows ssh server,确保shell处于管理员模式
- 然后选择以下一个语句进行执行
- 修改为自带的powershell版本
- 修改为powershell7
- 示例:修改为powershell7
从ssh Client 建立ssh连接,可以看到,默认shell为powershell7