Comment 1 by Sindre Myren, Apr 19, 2009
At least SSH_ORIGINAL_COMMAND actually seems to be set.
This is what I have done so far in hope of retrieving some useful
information:
1) Adding this script as a ForcedCommand for the git user in
/etc/ssh/sshd_conf:
#!/bin/bash
export SSH_SESSION=1
if [ -z "$SSH_ORIGINAL_COMMAND" ] ; then
export SSH_LOGIN=
echo "Error: Login to this account is not permitted!"
else
export SSH_LOGIN=
[ -r /etc/profile ] && source /etc/profile
[ -r ~/.profile ] && source ~/.profile
echo Your command was: $SSH_ORIGINAL_COMMAND
fi
2) On the command line of my laptop, i run the command:
$ ssh git@my.domain.com hello
Your command was: hello
Comment 2 by Sindre Myren, Apr 19, 2009
Also the python script (gitserve.py), are able to read
SSH_ORIGINAL_COMMAND
1) So, i remove the ForcedCommand from the config file, and add an
extra line to /home/www/indefero/scripts:
sys.stderr.write("DEBUG: Your command was: %s\n" %
os.environ["SSH_ORIGINAL_COMMAND"])
So that the code looks like this:
/gitserve.py:n = len("/gitserve.py")
GITSERVEPHP = '%s/gitserve.php' %
traceback.extract_stack(limit=1)[0][0][0:-n]
status, output = commands.getstatusoutput('php %s %s' %
(GITSERVEPHP, sys.argv[1]))
if status == 0:
os.execvp('git', ['git', 'shell', '-c', output.strip()])
else:
sys.stderr.write("DEBUG: Your command was: %s\n" %
os.environ["SSH_ORIGINAL_COMMAND"])
sys.stderr.write("%s\n" % output)
sys.exit(1)
2)I then return to my laptop, and executes the command:
$ git pull origin master
DEBUG: Your command was: git-upload-pack 'repos/test-private.git'
Need SSH_ORIGINAL_COMMAND in environment.
fatal: The remote end hung up unexpectedly
Comment 3 by Sindre Myren, Apr 19, 2009
progress.. I figured out that if i replaced '$_ENV' with '$_SERVER' in scripts/gitserve.php, thins started to work. Almost... Also, I had do set the ..._git_home_dir in the config file, as my git home was not /home/git but /srv/git (which was not documented). When I that was done, I got a new error: $ git pull Repository read access denied. fatal: The remote end hung up unexpectedly This happen despite that the user in question has his public ssh key commited, and that he is a member of the project in question.
Comment 4 by Sindre Myren, Apr 19, 2009
(solved) Ok. setting the last variable idf_plugin_syncgit_base_repositories solved my problem. But as mentioned earlier, $_ENV had to be replaces with $_SERVER for everything to work for me.
Comment 5 by Loïc d'Anterroches, Apr 19, 2009
waouh! This is one of the best bug report I have ever read, with detailed steps etc. I will merge $_SERVER and $_ENV to be sure the data are there.
Labels:
Priority:High
Priority:Medium
Comment 6 by Loïc d'Anterroches, Apr 19, 2009
Fixed in commit 2b87437, thanks a lot. If you are ok, I will add you to the list of the contributors as your bug reports have helped the fast fixing of critical issues.
Status:
Fixed
Comment 7 by Brenda Wallace, Jun 10, 2010
I just hit this bug too -- i don't think you pushed it to the master branch on git://projects.ceondo.com/indefero.git yet. I solved it using git cherry-pick 2b8743727a35397be5dbbc12a537562c0d85041d
Sign in to reply to this comment.
Reported by Sindre Myren, Apr 19, 2009