PowerShell: 如何使用PowerShell远程登录,如何使用PowerShell建立远程会话

目录

摘要

认识 Enter-PSSession

示例

示例一:下面是一个比较完整的使用Enter-PSSession的例子

示例二:建立一个可重用的会话

示例三:使用用户名密码建立连接

示例四:指定认证方式

注意事项


摘要

在服务器上执行远程脚本的时候一般可以使用Invoke-Command,但是如果连续执行脚本,并且想在执行过程中保持上下文信息,也就是说交互式的执行远程命令,就得用到今天要说的另外一个命令了 Enter-PSSession。

认识 Enter-PSSession

PowerShell: 如何使用PowerShell远程登录,如何使用PowerShell建立远程会话_第1张图片

看下官方的原文解释。

Starts an interactive session with a remote computer.

其实说白了就是启动一个链接到远程计算机的交互式会话。

因此当这个会话启动之后你所敲入的所有命令都会在远程计算机上执行,直到你关闭窗口或者执行Exit-PSSession退出当前会话。而且一般来讲同时建立会话的个数是有个上限的。

有时候如果没有显示的调用Exit-PSSession,有可能会话不会立即中断。当这种会话达到一定数量之后再去建立新的会话就会出现失败。当然这个具体的限制是多少没有具体研究过,毕竟平时很少遇到这种情况,有兴趣的读者可以去研究一下。

执行Enter-PSSession成功之后会在原来的命令行前面显示你所连接到的远程计算机名字比如:

PS C:\> Enter-PSSession -ComputerName Server01
[Server01]: PS>

示例

示例一:下面是一个比较完整的使用Enter-PSSession的例子

PS C:\> Enter-PSSession -ComputerName Server01
[Server01]: PS>  #Exuting on remote server
[Server01]: PS C:\> Get-Process PowerShell > C:\ps-test\Process.txt  #Exuting on remote server
[Server01]: PS C:\> exit #Exuting on remote server
PS C:\>  #back to local server
PS C:\> dir C:\ps-test\process.txt #back to local server
Get-ChildItem : Cannot find path 'C:\ps-test\process.txt' because it does not exist.
At line:1 char:4
+ dir <<<<  c:\ps-test\process.txt

示例二:建立一个可重用的会话

第一步:新建一个会话对象

PS> $s = New-PSSession -ComputerName Server01

第二步:使用会话对象建立连接

PS> Enter-PSSession -Session $s

 完整代码片段:

PS> $s = New-PSSession -ComputerName Server01
PS> Enter-PSSession -Session $s
[Server01]: PS>

这里的这个$s变量是可以重复使用的,比如它可以当参数传递给别的命令,又或者他可以多次调用。这样既避免了多次建立连接的麻烦,也避免了平凡建立连接对系统的影响。

示例三:使用用户名密码建立连接

 一般情况下企业都会搭建域环境,而且相同功能的一组机器之间也会有相同的权限设置。所以使用同一个管理账号可以在不同机器之间无缝切换,并且默认使用Windows认证并不需要你重复输入 你的用户名密码。因为你已经登录到某一台机器了,要不怎么执行这些个命令呢。

但凡事都有意外不是。

假如你所操作的机器不在同一个域,或者在同一个域但是有不同的权限设置,又或者你想用一个管理员账号来执行一些远程的管理任务。。。等等

这些情况下,默认的Windows认证就不在好用你需要显示的输入你的凭证。

PS> Enter-PSSession -ComputerName Server01 -Credential (Get-Credential)
[Server01]: PS>

第一条命令执行的时候会弹出一个输入框,让你输入你的用户名密码。如果是在域环境下需要按照 domain\user的形式来输入用户名。

 PowerShell: 如何使用PowerShell远程登录,如何使用PowerShell建立远程会话_第2张图片

示例四:指定认证方式

这种方式也是比较坑的一种方式,一般情况下用不到,但是往往新手遇到的时候会在这个上面卡很久。

PS> Enter-PSSession -ComputerName Server01 -Credential (Get-Credential) -Authentication Credssp
[Server01]: PS>

这个指定认证方式有很多种,我只说其中的CredSSP。

其它的几种认证方式都只是说如何把你输入的凭证有效的应用到远程机器上。让你通过从本地到远程的认证。而CredSSP除了让你的凭证通过本地到远程的认证之外它还会让你的凭证继续在远程机器上生效。我们先看下官方文档:

CredSSP authentication is available only in Windows Vista, Windows Server 2008, and later versions of the Windows operating system.

For more information about the values of this parameter, see AuthenticationMechanism Enum.

Caution: Credential Security Support Provider (CredSSP) authentication, in which the user's credentials are passed to a remote computer to be authenticated, is designed for commands that require authentication on more than one resource, such as accessing a remote network share. This mechanism increases the security risk of the remote operation. If the remote computer is compromised, the credentials that are passed to it can be used to control the network session.

什么意思呢?举个栗子,就容易理解了。

假设有A,B,C三台服务器,并且都能使用user1登录。

1. 非CredSSP的情况

当使用User1从A建立到B的会话,然后又在会话里面去访问C上只有User1才能访问的资源的时候就会失败。

2. 使用CredSSP

当使用User1从A建立到B的会话,然后又在会话里面去访问C上只有User1才能访问的资源的时候就不会有问题。因为建立A-->B的连接的时候通过CredSSP这种方式已经把完整的凭证传给了B,所以在B上可以继续以User1的身份来访问C上的内容。

还有其他一些示例也就不再赘述。

注意事项

1. 不使用的会话要及时关闭

2. 使用New-PSSession可以建立一个可重用的会话

3. 提供凭证可以在不同环境的服务器之间建立连接

4. 如果在远程服务器上要访问另外一台服务器资源的时候要注意是否使用CredSSP


整理了部分近期发布的文章仅供大家参考:

  1. 为什么大神们的文章看起来那么酷?除了写的好还使用了生动的动图(gif)。一款【免费】的动图工具screentogif了解一下
  2. Powershell:使用PSCustomObject,序列化执行结果
  3. PowerShell: 为啥大神们的PowerShell窗口还有智能提示?因为他设置了这个
  4. PowerShell: 远程管理除了知道Invoke-Command,还应该掌握Enter-PSSession这个命令
  5. PowerShell: RDP管理服务器效率低下,使用invoke-command同时维护多台服务器不再难
  6. PowerShell: 用原生PowerShell就能解决访问web资源时的ADFS认证问题
  7. PowerShell: 不需要学Python,使用powershell也能处理Excel提高办公效率
  8. PowerShell: 作为一个PowerShell菜鸟,如何快速入门?掌握这些就够了

你可能感兴趣的:(PowerShell,powershell,远程管理,远程会话,远程登录)