Javaで記述したSSHサーバー上でmsysgitを使用しようとしていますがsshd
、いくつかのgitエラーを乗り越え、パテを使用して接続してシェルを取得でき、Windowsパスにgitがあります。 、しかし、実際には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".
運が悪かったので、他の多くのバリエーションも試してみました。ローカルホストに2つのgitリポジトリを設定しています。1つはgitpushfromを実行しており、もう1つはにありc:\gitrepo
ます。
私は何が欠けていますか?
また、mysysgit /binへのパスをWindows7環境変数に追加する必要がありましたが、Windows環境変数に追加せずに、sshサーバーでプログラムで指定することなく、これを機能させる方法も必要ですが、さらに重要なのは、このsshサーバー上でgitを実行できるようにしたいと考えています。
私のサーバーのコードは以下のとおりです。
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;
}
サーバー側でこの手動解析を修正する方法を知っている人はいますか?使用できる別のコマンドプロセッサなどはありますか?