Putty能够做到这一点,我不知道如何 - 我希望能够对SSH.NET或其他.NET库执行相同的操作。
无论如何 - 当我在我的Windows系统上以我的域帐户身份登录时,我可以启动putty,SSH到一台机器,只有得到我正在远程登录的机器提示我的用户名,从来没有我的密码 - 但是putty似乎能够登录我;我猜测,可能是使用某种形式的域身份验证。
SSH.NET能做到这一点,任何.NET库都可以吗?我想在Windows中作为用户使用模拟启动一个进程,然后从该进程代表该用户SSH进入一台机器,但我不想请求或处理用户的密码,出于明显的安全原因。
答案 0 :(得分:1)
这种身份验证通常使用Windows SSPI API完成,该API包装各种安全服务提供程序ala NTLM / Kerberos。
SSPI的呼叫者可以获取当前用户凭据的句柄,并使用此凭据句柄要求SSP提供身份验证令牌。客户端将令牌发送到服务器,服务器接受这些令牌并将令牌发送给客户端,冲洗重复直到双方都满意为止。
对于应用程序开发人员,您只需要请求这些令牌,将它们连接到您的连接,并将它们泵入适当的SSPI呼叫。
通常如此:
..重复,直到两个函数都表示满意为止。
我发布了以下问题,以了解如何直接执行此操作:Client-server authentication - using SSPI?
幸运的是,我有一个完整的.SSPI包装器,以及一些演示程序:NSspi。
现在,我不确定它是如何集成到SSH协议或您正在使用的SSH服务器的。根据我的理解,SSH会话首先通过广告每一方支持的身份验证机制,我估计服务器正在宣传直接与SSPI或kerberos绑定的特定身份验证提供程序,并且只是期望你执行上述SSPI身份验证周期的客户端。诀窍在于确切地确定服务器期望的内容,以及如何使用满足预期的SSH客户端库注册提供程序。