sshを介してJavaでgitプロジェクトのクローンを作成しようとしています。資格情報としてgit-shellユーザーのユーザー名とパスワードを持っています。次のコマンドを使用して、ターミナルでプロジェクトのクローンを作成できます。(もちろん、最初にパスワードを要求します)
git clone user@HOST:/path/Example.git
ただし、JGITAPIを使用して次のコードを試すと
File localPath = new File("TempProject");
Git.cloneRepository()
.setURI("ssh://HOST/path/example.git")
.setDirectory(localPath)
.setCredentialsProvider(new UsernamePasswordCredentialsProvider("***", "***"))
.call();
私は得た
Exception in thread "main" org.eclipse.jgit.api.errors.TransportException: ssh://HOST/path/example.git: Auth fail
私は何をすべきか?何か案は?(私はOSX10.9.4とJDK1.8を使用しています)
SSHによる認証の場合、JGitはJSchを使用します。JSchは、SshSessionFactory
SSH接続を作成および破棄するためのを提供します。どのSSHセッションファクトリを使用する必要があるかをJGitに伝える最も簡単な方法は、を介してグローバルに設定することSshSessionFactory.setInstance()
です。
JGitは抽象を提供しJschConfigSessionFactory
、そのconfigure
メソッドをオーバーライドしてパスワードを提供できます。
SshSessionFactory.setInstance( new JschConfigSessionFactory() {
@Override
protected void configure( Host host, Session session ) {
session.setPassword( "password" );
}
} );
Git.cloneRepository()
.setURI( "ssh://username@host/path/repo.git" )
.setDirectory( "/path/to/local/repo" )
.call();
SshSessionFactory
より賢明な方法でを設定することは少し複雑です。CloneCommand
-から継承-接続を開く可能性のあるすべてのJGitのコマンドクラスのようにTransportCommand
。このクラスにはsetTransportConfigCallback()
、実際のコマンドのSSHセッションファクトリを指定するためにも使用できるメソッドがあります。
CloneCommand cloneCommand = Git.cloneRepository();
cloneCommand.setTransportConfigCallback( new TransportConfigCallback() {
@Override
public void configure( Transport transport ) {
if( transport instanceof SshTransport ) {
SshTransport sshTransport = ( SshTransport )transport;
sshTransport.setSshSessionFactory( ... );
}
}
} );
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加