PowerShell:远程管理中的多跳问题之CredSSP详解
前言
在我的博客PowerShell: 远程管理除了知道Invoke-Command,还应该掌握Enter-PSSession这个命令_码农杰克-CSDN博客
种曾经提到执行使用PowerShell执行远程操作的时候有多种认证方式,其中之一就是CredSSP (Credential Security Support Provider) 。今天就来详细的聊一聊如何使用这个CredSSP。至于具体原因为啥要使用CredSSP,在这里不再赘述,请移步 PowerShell: 远程管理除了知道Invoke-Command,还应该掌握Enter-PSSession这个命令_码农杰克-CSDN博客
CredSSP概述
CredSSP主要是用来解决在Windows下远程资源访问的认证问题。所以敲黑板划重点了,CredSSP只适用于Windows平台,并且只是在访问远程资源的过程中才需要使用。那既然是访问远程资源那么聪明的你一定想到了,肯定就会有Server端和Client端。
CredSSP Client端
何为CredSSP的Client端?简言之就是你当前正在执行PowerShell命令的机器或者说你打开PowerShell窗口执行PowerShell命令的机器。当然这么说有点狭隘,有时候可能你并没有打开PowerShell窗口。比如使用一个后台任务运行某段PowerShell脚本,然后在这个脚本里面去访问了远程资源。
所以换句话说,CredSSP的Client端(客户端)就是你发起远程资源访问请求的那台机器,也就是你从那台机器发起远程访问,那么这台机器或者终端就可以看作是CredSSP的Client端。
CredSSP Server端
上一节说到了Client端,那么对应的,被访问的那台机器或者终端对应的就是CredSSP的Server端也就是服务器端。这里拿我们的Web应用来打比方就很好理解了,承载web应用的为服务器端,而我们浏览器所在的机器都可以是客户端。其实在CredSSP中,server端也叫delegate server,后面会详细讲到这个概念。
CredSSP 前因后果
那么Server端和Client端是不是就是CredSSP的全部呢?其实不然。如果只有Server端和Client端,我们还不需要使用CredSSP。其实在CredSSP中还涉及到第三个角色,正是这个角色才引入了CredSSP。
如果只有Client和Server两端,是不需要CredSSP也能实现我们平时所需的大部分功能的。如下图所示:
但是,如果我们在Server A上起了一个PowerShell 然后去Server B上执行一段脚本,然后再段脚本中又去访问的Server C的资源,这时候普通的认证就无法满足我们的需求了。如下图所示:
为啥会出现这种情况呢?因为在Windows里面,默认情况下在Server B上再执行Server A给的远程脚本访问Server C的资源的时候会把Server A传送给Server B的认证上下文全部清掉。那么对Server C上来说,Server B只是发起了一个匿名访问的请求。所以在Server B上访问任何Server C上需要认证的资源的都是Access Denied。
这个并不是PowerShell独有的问题,相信以前做过Windows下的Web程序或者其它类似情况的童鞋都遇到这样的问题。也就是经典的Double-Hop问题。
下面这张图来自网络,描述的就是典型的Double Hop问题,相信曾经困扰过不少同学。
好了至于web 应用如果解决Double Hop问题就不在这里讨论。有兴趣的童鞋可以自己研究一下下:)
配置CredSSP
那我们接下来看看PowerShell是如何解决这个问题的。---当然就是CredSSP。
为了解决Double-Hop的问题,有以下的步骤:
- 在Server A(也就是Client)上设置激活CredSSP Client, 并设置Target CredSSP Server
- 在Server B(也就是 Server 或者Delegate Server)上设置激活 CredSSP Server
- 在建立Server A->B的链接时告诉PowerShell使用CredSSP认证
然后再通过Server A在Server B上发起向Server C的资源请求时就不会再有Access Denied或者Unauthorized的问题了。
具体细节如下:
1. 客户端激活CredSSP
使用Enable-WSManCredSSP命令激活客户端,在激活客户端CredSSP是需要指定服务端是谁。
Enable-WSManCredSSP
[[-DelegateComputer] <String[]>]
[-Force]
[-Role] <String>
[<CommonParameters>]
使用举例:
指定单台服务端服务器
Enable-WSManCredSSP -Role "Client" -DelegateComputer "Server02.fabrikam.com"cfg : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang : en-US
Basic : true
Digest : true
Kerberos : true
Negotiate : true
Certificate : true
CredSSP : true
这里的“Server02.fabrikam.com”就是我们图里面的Server B,可以是一台也可以是多台
-Role “Client” 表示当前机器是客户端也就是我们图里面的 Server A。
指定多台服务器为服务端
$servers = "server02.fabrikam.com", "server03.fabrikam.com", "server04.fabrikam.com"
Enable-WSManCredSSP -Role "Client" -DelegateComputer $serverscfg : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang : en-US
Basic : true
Digest : true
Kerberos : true
Negotiate : true
Certificate : true
CredSSP : true
除了使用具体的机器名还可以使用通配符*来指定
指定"fabrikam.com"域下面的所有机器都可为服务端
Enable-WSManCredSSP -Role "Client" -DelegateComputer "*.fabrikam.com"cfg : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang : en-US
Basic : true
Digest : true
Kerberos : true
Negotiate : true
Certificate : true
CredSSP : true
指定任何机器可为服务端
Enable-WSManCredSSP -Role "Client" -DelegateComputer "*"cfg : http://schemas.microsoft.com/wbem/wsman/1/config/client/auth
lang : en-US
Basic : true
Digest : true
Kerberos : true
Negotiate : true
Certificate : true
CredSSP : true
2. 服务端激活CredSSP
服务端设置相对来讲比较简单,也是使用Enable-WSManCredSSP命令。
Enable-WSManCredSSP -Role "Server"
这个命令表示说把当前的服务器作为服务端或者代理端使用也就是Server B,可以把Server A传给他的认证信息代理给其它Server C。
3. 指定CredSSP 认证方式
现在 Client端和Server端都已经配置好那么接下来就是使用了。常见的两个远程操作命令都可以使用CredSSP的认证方式。
Enter-PSSession -ComputerName ServerB -Credential (Get-Credential) -Authentication Credssp
$parameters = @{ComputerName = 'ServerB'ScriptBlock = { Get-Item \\Net03\Scripts\LogFiles.ps1 }Authentication = "CredSSP"Credential = "Domain01\Admin01"
}
Invoke-Command @parameters
到这里CredSSP的详细使用就告一段落了。那么问题来了,是不是Server A上只能激活Client而 Server B上只能激活Server端呢?
其实不是的,既然Server A可以向Server B发起请求,同样的Server B也可以向Server A发起请求。所以在同一台服务器上既可以设置他为Client端也可以设置他作为服务端或者代理端来使用。
4. 查看CredSSP设置
PowerShell中使用Get-WSManCredSSP来查看当前Server的CredSSP设置。
Get-WSManCredSSP
5. 关闭CredSSP设置
如果我们不想一直开着CredSSP设置,那么可以使用Disable-WSManCredSSP来关闭他。
关闭服务端
Disable-WSManCredSSP -Role Server
关闭客户端
Disable-WSManCredSSP -Role Client
常见问题诊断
1. 没有权限
不管是 Enable-WSManCredSSP还是Get-WSManCredSSP都需要管理员权限,所以请使用“Run as Administrator” 或者 “以管理员身份运行”。
2. 相关服务没有运行
CredSSP依赖于WS-Management服务,所以确保这个服务已经运行。如果没有运行也没关系,使用下面的命令快速的设置。
winrm quickconfig
总结
本文介绍了CredSSP的使用场景,CredSSP中涉及到的各个服务器的角色,以及CredSSP的使用步骤和常见问题诊断。
我是码农杰克欢迎大家来交流共同学习! 最后祝女神们节日快乐。
PowerShell:远程管理中的多跳问题之CredSSP详解相关推荐
- linux操作系统之常用远程管理命令:关机和重启命令shutdown详解 简单易懂~
1.shutdown命令的使用格式:shutdown 选项(关机或重启电脑 ) 2.怎样才能通过终端来远程的控制电脑呢? 通过控制终端,向重新启动或者关闭电脑的时候,就可以在终端输入shutdown的 ...
- powershell远程管理
简介 在一定程度上讲powershell 远程管理类似域Telent或者其他一些老旧的远程处理技术,它会在远程计算机上面执行相关命令,并将结果返回本地计算机,powershell远程管理使用的是针对管 ...
- PowerShell远程管理Windows Server(2):公网访问【web形式】
*此文章只适合于windows server 2012版本以上: Powershell Web Access需要两个步骤才能使用: 一.安装powershell web access功能: 二.配置p ...
- Powershell远程管理服务器客户端
目录 域中计算机远程管理 1.管理员权限运行Powershell,输入Enable-PsRemoting开启Powershell远程管理 2.S12-1Powershell远程管理S12-2
- PowerShell 远程管理之启用和执行命令
PowerShell 2.0的远程管理功能很强大,为了方便读者学习这里首先介绍学习环境的设置,便于读者在理解原理的同时有相对形象的体验.在本文中,将会分别介绍了如何启用和禁用powershell的远程 ...
- Node.js中的不安全跳转如何防御详解
为什么80%的码农都做不了架构师?>>> Node.js中的不安全跳转如何防御详解 导语: 早年在浏览器大战期间,有远见的Chrome认为要运行现代Web应用,浏览器必须有一个 ...
- rac的crs进程是做什么的_RAC 管理(crs_stat、crsctl、srvctl各种命令详解)
RAC 管理(crs_stat.crsctl.srvctl各种命令详解) 命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:crsctl, ocrcheck,ocrdum ...
- RAC 管理(crs_stat、crsctl、srvctl各种命令详解)
RAC 管理(crs_stat.crsctl.srvctl各种命令详解) Oracle Clusterware的命令集可以分为以下4种: 节点层:osnodes 网络层:oifcfg 集群层:c ...
- php 修改 wordpress,修改WordPress中文章编辑器的样式的方法详解
这篇文章主要介绍了修改WordPress中文章编辑器的样式的方法详解,同时文中也推荐了两款取代默认文章编辑器的插件,需要的朋友可以参考下 自定义文章编辑器的样式每一个 WordPress 主题的文章样 ...
最新文章
- ------ 比较二位数组大小-----
- python常用快捷键、写代码事半功倍_Pycharm常用快捷键总结及配置方法
- STM32F0使用LL库实现MS5536C通讯
- 链表删除功能实现演示
- 人工智能/数据科学比赛汇总 2019.4
- 混沌工程:Netflix系统稳定性之道
- iOS - OC NSTimeZone		时区
- 渲染怎么加hdri_[翻译]Corona渲染器官方教程2--设置HDRI光照
- AD ---- 活动目录的日常管理操作(3)
- [3D数学基础:图形与游戏开发]读书笔记 第12章(几何图元直线、AABB、球圆、平面、三角形、多边形)
- 台式计算机可以发射无线网络,台式电脑无线网卡怎么发射WIFI信号!
- C. Balanced Stone Heaps和P2440 木材加工
- CentOS官网下载对应版本
- android adb连接多个夜神模拟器,夜神安卓模拟器连接adb的具体操作流程
- 动画(重点)~~~~~
- 编程之美 2.1 求二进制中1的个数
- Nginx推流负载均衡配置
- Win10系统卸载照片应用程序详细介绍
- MySQL8安装教程和新特征
- CircuitJS 好玩实用电路仿真软件
热门文章
- 微信红包文案怎么写吸引人,520发红包感想
- 2021年安徽省高考成绩查询窗口,安徽省教育招生考试院:2021年安徽高考查分入口、查分系统...
- Nginx开启gzip压缩配置参数
- vant weapp 小程序 获取用户信息授权
- python取整求余
- 压缩包如何设置自动添加密码?
- java格式化货币_java-格式化没有货币符号的货币
- mysql百万数据分区_mysql百万数据实践-分区
- WAIC | 阿里副总裁司罗:大规模语言模型如何赋能行业、创造价值
- unity3D防止破解插件:Anti-Cheat Toolkit的使用