我正在尝试在我的远程 linux 服务器上设置一个 git 存储库,以便我可以通过 ssh 连接并以相当安全的方式与几个朋友共享单一登录。我遇到了问题,因为我的 sshd 通过FORCE_COMMAND
ssh 配置中的 set 调用 duo security(指向'/usr/sbin/login_duo'
)。我决定解决这个问题;所以我检查了 git 代码并选择了足够的 C 来进行更改(在shell.c中),以便它忽略 /usr/sbin/login_duo 调用和run_shell()
创建正常 git-shell 提示符的调用。(我现在很确定这不是正确的解决方案,因为我不希望git clone
调用以 shell 结束,但这个问题似乎仍然有效)
无论如何,我设法让git>
提示出现,但它似乎没有处理我传入的输入(一旦我输入了输入/退出然后点击返回)。我希望它打印“git got x”,但它只是坐在那里。有任何想法吗?
fprintf(stderr, "git> ");
if (strbuf_getline(&line, stdin, '\n') == EOF) {
fprintf(stderr, "\n");
strbuf_release(&line);
break;
}
fprintf(stderr, "git got %s\n", line );
例子:
egwor@mars:~/projects/test$ git clone ssh://git@localhost/home/git/repo1
Cloning into repo1...
git@localhost's password:
login_duo ignored <-- where I split off and call the shell function
git> exit
<--hangs-->`