Используя git с apache sshd

Я пытаюсь использовать msysgit через сервер SSH, который я написал на Java, используя sshd и я добился большого прогресса в том, что я преодолел некоторые ошибки git, я могу подключиться, используя putty и получить оболочку, у меня есть git в моем пути к Windows, но я все еще не могу использовать git для подключения к своему хранилищу через мой демон ssh Я получаю следующую ошибку от msysgit:

fatal: ''/C/gitrepo'' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Я использовал следующее, чтобы добавить пульт в репозиторий, с которого пытаюсь подключиться:

git remote set-url origin "ssh://test@localhost:22/C/gitrepo".

Я перепробовал множество других вариантов пути, но не повезло. У меня есть два репозитория git на локальном хосте: один, с которого я запускаю git push, и один на c:\gitrepo,

Что мне не хватает?

Кроме того, мне пришлось добавить путь к mysysgit / bin в мою переменную среды Windows 7, но также хотелось бы, чтобы этот способ работал, не добавляя его в переменные среды Windows, но задавая его программно на моем SSH-сервере, но, что более важно, я хотел бы иметь возможность запускать git через этот ssh-сервер.

Код для моего сервера ниже.

import java.io.IOException;
import java.net.InetSocketAddress;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;
import org.apache.sshd.SshServer;
import org.apache.sshd.server.UserAuth;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.common.util.OsUtils;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.CommandFactory;
import org.apache.sshd.server.ForwardingFilter;
import org.apache.sshd.server.PasswordAuthenticator;
import org.apache.sshd.server.auth.UserAuthPassword;
import org.apache.sshd.server.command.ScpCommandFactory;
import org.apache.sshd.server.filesystem.NativeFileSystemFactory;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.apache.sshd.server.session.ServerSession;
import org.apache.sshd.server.shell.ProcessShellFactory;

public class SSHD {

   public SSHD() {
      init();
   }

   public void start() throws IOException {
      sshServer.start();
   }

   private void init() {
      sshServer = SshServer.setUpDefaultServer();

      sshServer.setPort(22);
      sshServer.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey.ser"));

      setupAuthentication();
      setupCommandHandling();
   }

   private void setupAuthentication() {
      sshServer.setPasswordAuthenticator(new SSHD.MyPasswordAuthenticator());

      List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
      userAuthFactories.add(new UserAuthPassword.Factory());
      sshServer.setUserAuthFactories(userAuthFactories);
   }

   private void setupCommandHandling() {
      CommandFactory myCommandFactory = new CommandFactory() {
         @Override
         public Command createCommand(String command) {
            System.out.println("command = \"" + command + "\"");
            return new ProcessShellFactory(command.split(" ")).create();
         }

      };

      sshServer.setCommandFactory(new ScpCommandFactory(myCommandFactory));

      sshServer.setFileSystemFactory(new NativeFileSystemFactory());

      sshServer.setForwardingFilter(new ForwardingFilter() {
         public boolean canForwardAgent(ServerSession session) {
            return true;
         }

         public boolean canForwardX11(ServerSession session) {
            return true;
         }

         public boolean canListen(InetSocketAddress address, ServerSession session) {
            return true;
         }

         public boolean canConnect(InetSocketAddress address, ServerSession session) {
            return true;
         }

      });

      ProcessShellFactory shellFactory = null;
      if (OsUtils.isUNIX()) {
         shellFactory = new ProcessShellFactory(new String[]{"/bin/sh", "-i", "-l"},
                 EnumSet.of(ProcessShellFactory.TtyOptions.ONlCr));
      } else {
         shellFactory = new ProcessShellFactory(new String[]{"cmd.exe "},
                 EnumSet.of(ProcessShellFactory.TtyOptions.Echo, ProcessShellFactory.TtyOptions.ICrNl, ProcessShellFactory.TtyOptions.ONlCr));
      }

      sshServer.setShellFactory(shellFactory);
   }

   private static class MyPasswordAuthenticator implements PasswordAuthenticator {

      @Override
      public boolean authenticate(String username, String password, ServerSession session) {
         return true;
      }

   }

   public static void main(String[] args) {
      SSHD sshd = new SSHD();

      try {
         sshd.start();
      } catch (IOException ex) {
         System.out.println("EXCEPTION: " + ex);
         ex.printStackTrace();
      }
   }

   private SshServer sshServer;
}

Кто-нибудь знает, как исправить этот ручной анализ на стороне сервера. Я могу использовать другой командный процессор или что-то в этом роде?

0 ответов

Другие вопросы по тегам