我有一个 Powershell 脚本,将通过自动化工具针对多个服务器运行。
它在 Windows 计算机上运行良好,因为远程调用使用该工具的服务帐户,无需在代码中提示或公开任何凭据。
此脚本还可以使用 SharpSSH 包通过 SSH 在 Linux 计算机上运行。 SharpSSH 不会自动使用 Powershell 用户的凭据,但需要用户名和密码、RSA key 文件或 PSCredential
对象。
我无法使用 Get-Credential
提示输入凭据,因为它是通过自动化工具运行的。我不想在代码中暴露用户名和密码,也不想有 RSA key 。我想从当前 Powershell 用户(服务帐户)构造一个 PSCredential
对象。
尝试[System.Net.CredentialCache]::DefaultNetworkCredentials
显示空白,而[System.Security.Principal.WindowsIdentity]::GetCurrent()
则不显示提供我需要的元素或信息。
有人有从当前用户创建 PSCredential
对象的方法吗?或者也许有一个完全不同的替代方案来解决这个问题?
非常感谢!
最佳答案
Windows API 不会公开您需要的信息,这就是 Powershell 无法获取它们的原因。这是安全子系统的一个有意的功能。实现此目的的唯一方法是让 Linux 计算机信任调用计算机,例如将它们加入 Active Directory(或任何真正的 kerberos 设置)。
除此之外,您还需要以某种方式存储和传递这些信息。
您可以将 RSA key 存储在用户的 keystore 中,并在运行时提取它(使用 .NET Crypto/Keystore 库),这样您就不会将 key 与代码一起存储。这样, key 本身将受到操作系统的保护,并且仅当调用用户经过身份验证时才可用。您还需要安装一个东西,但这可能是实现您目标的唯一方法。
关于powershell - 在Powershell中获取当前用户的凭据对象而不提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3917779/