summaryrefslogtreecommitdiffstats
path: root/java/com/google/gerrit/acceptance/SshSessionJsch.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/google/gerrit/acceptance/SshSessionJsch.java')
-rw-r--r--java/com/google/gerrit/acceptance/SshSessionJsch.java174
1 files changed, 0 insertions, 174 deletions
diff --git a/java/com/google/gerrit/acceptance/SshSessionJsch.java b/java/com/google/gerrit/acceptance/SshSessionJsch.java
deleted file mode 100644
index fa4d1d11fd..0000000000
--- a/java/com/google/gerrit/acceptance/SshSessionJsch.java
+++ /dev/null
@@ -1,174 +0,0 @@
-// Copyright (C) 2021 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-package com.google.gerrit.acceptance;
-
-import static java.nio.charset.StandardCharsets.US_ASCII;
-import static java.nio.charset.StandardCharsets.UTF_8;
-
-import com.google.gerrit.acceptance.testsuite.account.TestAccount;
-import com.google.gerrit.acceptance.testsuite.account.TestSshKeys;
-import com.jcraft.jsch.ChannelExec;
-import com.jcraft.jsch.JSch;
-import com.jcraft.jsch.JSchException;
-import com.jcraft.jsch.Session;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.StringWriter;
-import java.net.InetSocketAddress;
-import java.nio.charset.StandardCharsets;
-import java.security.GeneralSecurityException;
-import java.security.KeyPair;
-import java.security.KeyPairGenerator;
-import java.security.NoSuchAlgorithmException;
-import java.security.SecureRandom;
-import java.util.Properties;
-import java.util.Scanner;
-import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
-import org.bouncycastle.openssl.jcajce.JcaPKCS8Generator;
-import org.bouncycastle.util.io.pem.PemObject;
-import org.eclipse.jgit.transport.SshSessionFactory;
-import org.eclipse.jgit.transport.ssh.jsch.JschConfigSessionFactory;
-import org.eclipse.jgit.transport.ssh.jsch.OpenSshConfig.Host;
-import org.eclipse.jgit.util.FS;
-
-public class SshSessionJsch extends SshSession {
-
- private Session session;
-
- public static void initClient(KeyPair keyPair) {
- Properties config = new Properties();
- config.put("StrictHostKeyChecking", "no");
- JSch.setConfig(config);
-
- // register a JschConfigSessionFactory that adds the private key as identity
- // to the JSch instance of JGit so that SSH communication via JGit can
- // succeed
- SshSessionFactory.setInstance(
- new JschConfigSessionFactory() {
- @Override
- protected void configure(Host hc, Session session) {
- try {
- JSch jsch = getJSch(hc, FS.DETECTED);
- jsch.addIdentity(
- "KeyPair", privateKey(keyPair), TestSshKeys.publicKeyBlob(keyPair), null);
- } catch (JSchException | GeneralSecurityException | IOException e) {
- throw new RuntimeException(e);
- }
- }
- });
- }
-
- public static KeyPairGenerator initKeyPairGenerator() throws NoSuchAlgorithmException {
- KeyPairGenerator gen;
- gen = KeyPairGenerator.getInstance("RSA");
- gen.initialize(512, new SecureRandom());
- return gen;
- }
-
- public SshSessionJsch(TestSshKeys sshKeys, InetSocketAddress addr, TestAccount account) {
- super(sshKeys, addr, account);
- }
-
- @Override
- public void open() throws Exception {
- getJschSession();
- }
-
- @Override
- public void close() {
- if (session != null) {
- session.disconnect();
- session = null;
- }
- }
-
- @SuppressWarnings("resource")
- @Override
- public String exec(String command) throws Exception {
- ChannelExec channel = (ChannelExec) getJschSession().openChannel("exec");
- try {
- channel.setCommand(command);
- InputStream in = channel.getInputStream();
- InputStream err = channel.getErrStream();
- channel.connect();
-
- Scanner s = new Scanner(err, UTF_8.name()).useDelimiter("\\A");
- error = s.hasNext() ? s.next() : null;
-
- s = new Scanner(in, UTF_8.name()).useDelimiter("\\A");
- return s.hasNext() ? s.next() : "";
- } finally {
- channel.disconnect();
- }
- }
-
- @SuppressWarnings("resource")
- @Override
- public int execAndReturnStatus(String command) throws Exception {
- ChannelExec channel = (ChannelExec) getJschSession().openChannel("exec");
- try {
- channel.setCommand(command);
- InputStream err = channel.getErrStream();
- channel.connect();
-
- Scanner s = new Scanner(err, UTF_8.name()).useDelimiter("\\A");
- error = s.hasNext() ? s.next() : null;
- return channel.getExitStatus();
- } finally {
- channel.disconnect();
- }
- }
-
- @Override
- public Reader execAndReturnReader(String command) throws Exception {
- ChannelExec channel = (ChannelExec) getJschSession().openChannel("exec");
- channel.setCommand(command);
- channel.connect();
-
- return new InputStreamReader(channel.getInputStream(), StandardCharsets.UTF_8) {
- @Override
- public void close() throws IOException {
- super.close();
- channel.disconnect();
- }
- };
- }
-
- private Session getJschSession() throws Exception {
- if (session == null) {
- KeyPair keyPair = sshKeys.getKeyPair(account);
- JSch jsch = new JSch();
- jsch.addIdentity("KeyPair", privateKey(keyPair), TestSshKeys.publicKeyBlob(keyPair), null);
- String username = getUsername();
- session = jsch.getSession(username, addr.getAddress().getHostAddress(), addr.getPort());
- session.setConfig("StrictHostKeyChecking", "no");
- session.connect();
- }
- return session;
- }
-
- private static byte[] privateKey(KeyPair keyPair) throws IOException {
- // unencrypted form of PKCS#8 file
- JcaPKCS8Generator gen1 = new JcaPKCS8Generator(keyPair.getPrivate(), null);
- PemObject obj1 = gen1.generate();
- StringWriter sw1 = new StringWriter();
- try (JcaPEMWriter pw = new JcaPEMWriter(sw1)) {
- pw.writeObject(obj1);
- }
- return sw1.toString().getBytes(US_ASCII.name());
- }
-}