Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 如何在给定Kerberos票证的情况下在服务器上登录用户并运行进程_Ssh_Kerberos_Windows Authentication_Gssapi_Sspi - Fatal编程技术网

Ssh 如何在给定Kerberos票证的情况下在服务器上登录用户并运行进程

Ssh 如何在给定Kerberos票证的情况下在服务器上登录用户并运行进程,ssh,kerberos,windows-authentication,gssapi,sspi,Ssh,Kerberos,Windows Authentication,Gssapi,Sspi,身份验证和登录如何在使用Kerberos的Windows上工作?我想要实现的是在服务器上登录一个用户并为该用户运行一个进程 作为第一步,我在客户机上创建一个Kerberos票证并将其发送到服务器。在服务器上,我不知道给用户提供票证的用户登录的API。 当然,我可以使用AcceptSecurityContext(SSPI)接受安全上下文,但这不会启动登录 我认为一些针对Windows的SSH实现正是这样做的。但我想知道他们可能如何使用以及使用什么API?有几种方法可以做到这一点。您确实需要在票据上

身份验证和登录如何在使用Kerberos的Windows上工作?我想要实现的是在服务器上登录一个用户并为该用户运行一个进程

作为第一步,我在客户机上创建一个Kerberos票证并将其发送到服务器。在服务器上,我不知道给用户提供票证的用户登录的API。 当然,我可以使用AcceptSecurityContext(SSPI)接受安全上下文,但这不会启动登录


我认为一些针对Windows的SSH实现正是这样做的。但我想知道他们可能如何使用以及使用什么API?

有几种方法可以做到这一点。您确实需要在票据上调用
AcceptSecurityContext
,以获取安全上下文。这就是在Windows中引导一切的原因。从那里你可以做一些不同的事情

通常您调用
ImpersonateSecurityContext
,以便当前线程了解它认为需要的用户。之后,您可以调用
QuerySecurityContextToken
以获取Windows访问令牌句柄。然后使用此句柄调用
CreateProcessAsUser
。如果需要,您还可以告诉它执行加载配置文件之类的操作


这并不像
LogonUserX
那样进行登录,但它有效地启动了一个用户的过程,这通常是人们希望完成的任务。

感谢您的回答。到目前为止,它与
CreateProcessAsUser
一起工作,一个新的进程开始以用户身份运行。但是,它无法与不同服务器上的其他服务(例如REST API)通信。无法为其他服务创建新票证(使用
AquireCredentialsHandle
InitializeSecurityContext
),我收到一个错误:“安全包中没有可用的凭据”。我可以在
ImpersonateSecurityContext
之后和创建新流程之前在服务中创建新票据(委派)。但这不是我想要的。在新流程中可以这样做吗?是的,在该场景中还需要一个步骤,那就是配置父流程正在运行的帐户以允许委派和模拟。因此
client=>server=>child进程
,这意味着
server
进程正在以用户身份运行,并且该用户必须配置了模拟和委托。它似乎可以处理无约束的委托。您知道这种方法是否适用于受约束的委派(其中TGT不随服务票证一起发送以用于委派目的)。