SSH.NET连接域凭据

时间:2014-07-14 21:43:12

标签: .net security ssh

Putty能够做到这一点,我不知道如何 - 我希望能够对SSH.NET或其他.NET库执行相同的操作。

无论如何 - 当我在我的Windows系统上以我的域帐户身份登录时,我可以启动putty,SSH到一台机器,只有得到我正在远程登录的机器提示我的用户名,从来没有我的密码 - 但是putty似乎能够登录我;我猜测,可能是使用某种形式的域身份验证。

SSH.NET能做到这一点,任何.NET库都可以吗?我想在Windows中作为用户使用模拟启动一个进程,然后从该进程代表该用户SSH进入一台机器,但我不想请求或处理用户的密码,出于明显的安全原因。

1 个答案:

答案 0 :(得分:1)

这种身份验证通常使用Windows SSPI API完成,该API包装各种安全服务提供程序ala NTLM / Kerberos。

SSPI的呼叫者可以获取当前用户凭据的句柄,并使用此凭据句柄要求SSP提供身份验证令牌。客户端将令牌发送到服务器,服务器接受这些令牌并将令牌发送给客户端,冲洗重复直到双方都满意为止。

对于应用程序开发人员,您只需要请求这些令牌,将它们连接到您的连接,并将它们泵入适当的SSPI呼叫。

通常如此:

  1. 客户端调用AcquireCredentialsHandle()
  2. 客户端调用InitializeSecurityContext(),不提供输入令牌,返回输出令牌(不透明的字节数组)。
  3. 客户端将这些令牌发送到服务器。
  4. 服务器调用AcceptSecurityContext(),将客户端标记作为输入,返回输出标记。
  5. 服务器将其令牌发送给客户端。
  6. ..重复,直到两个函数都表示满意为止。

    我发布了以下问题,以了解如何直接执行此操作:Client-server authentication - using SSPI?

    幸运的是,我有一个完整的.SSPI包装器,以及一些演示程序:NSspi

    现在,我不确定它是如何集成到SSH协议或您正在使用的SSH服务器的。根据我的理解,SSH会话首先通过广告每一方支持的身份验证机制,我估计服务器正在宣传直接与SSPI或kerberos绑定的特定身份验证提供程序,并且只是期望你执行上述SSPI身份验证周期的客户端。诀窍在于确切地确定服务器期望的内容,以及如何使用满足预期的SSH客户端库注册提供程序。

相关问题