powershell - 在Powershell中获取当前用户的凭据对象而不提示

标签 powershell credentials remote-access sharpssh

我有一个 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/

相关文章:

powershell - 如何编写将所有参数转发给委托(delegate)命令的包装器 powershell 命令?

android - GoogleAccountCredential 是否提供刷新 token ?

python - 为什么 PyDrive 一段时间后停止刷新访问 token ?

curl - 使用 Ansible uri 模块的 API 调用

powershell - 如何从 PowerShell 获取所有相机设备 ID

powershell - 为什么这个 powershell 脚本会发出两个 Web 请求 (System.Net.HttpWebRequest)?

arrays - 获取随机和从阵列中删除

shell - 来自子shell输出的 fish shell 输入重定向

mysql - 即使创建用户后也无法远程连接到 mySQL

java - 从另一台计算机访问mysql数据库服务器?