public void listKnownHosts() { HostKeyRepository hkr = this.jsch.getHostKeyRepository(); HostKey[] hks = hkr.getHostKey(); if (hks != null) { System.out.println("Host keys in " + hkr.getKnownHostsRepositoryID()); for (int i = 0; i < hks.length; i++) { HostKey hk = hks[i]; System.out.println(hk.getHost() + " " + hk.getType() + " " + hk.getFingerPrint(jsch)); } System.out.println(""); } }
public static void main(String[] args) throws GeneralSecurityException, JSchException, IOException { SimpleGeneratorHostKeyProvider p; if (args.length != 1) { System.err.println("Error: requires path to the SSH host key"); return; } else { File file = new File(args[0]); if (!file.exists() || !file.isFile() || !file.canRead()) { System.err.println("Error: ssh key should exist and be readable"); return; } } p = new SimpleGeneratorHostKeyProvider(); // Gerrit's SSH "simple" keys are always RSA. p.setPath(args[0]); p.setAlgorithm("RSA"); Iterable<KeyPair> keys = p.loadKeys(); // forces the key to generate. for (KeyPair k : keys) { System.out.println("Public Key (" + k.getPublic().getAlgorithm() + "):"); // From Gerrit's SshDaemon class; use JSch to get the public // key/type final Buffer buf = new Buffer(); buf.putRawPublicKey(k.getPublic()); final byte[] keyBin = buf.getCompactData(); HostKey pub = new HostKey("localhost", keyBin); System.out.println(pub.getType() + " " + pub.getKey()); System.out.println("Private Key:"); // Use Bouncy Castle to write the private key back in PEM format // (PKCS#1) // http://stackoverflow.com/questions/25129822/export-rsa-public-key-to-pem-string-using-java StringWriter privout = new StringWriter(); JcaPEMWriter privWriter = new JcaPEMWriter(privout); privWriter.writeObject(k.getPrivate()); privWriter.close(); System.out.println(privout); } }
public void openConnectionInternal() throws AuthenticationException { if (authenticationInfo == null) { authenticationInfo = new AuthenticationInfo(); } if (!interactive) { uIKeyboardInteractive = null; setInteractiveUserInfo(new NullInteractiveUserInfo()); } JSch sch = new JSch(); File privateKey; try { privateKey = ScpHelper.getPrivateKey(authenticationInfo); } catch (FileNotFoundException e) { throw new AuthenticationException(e.getMessage()); } try { Connector connector = ConnectorFactory.getDefault().createConnector(); if (connector != null) { IdentityRepository repo = new RemoteIdentityRepository(connector); sch.setIdentityRepository(repo); } } catch (AgentProxyException e) { fireSessionDebug("Unable to connect to agent: " + e.toString()); } if (privateKey != null && privateKey.exists()) { fireSessionDebug("Using private key: " + privateKey); try { sch.addIdentity(privateKey.getAbsolutePath(), authenticationInfo.getPassphrase()); } catch (JSchException e) { throw new AuthenticationException("Cannot connect. Reason: " + e.getMessage(), e); } } String host = getRepository().getHost(); int port = repository.getPort() == WagonConstants.UNKNOWN_PORT ? ScpHelper.DEFAULT_SSH_PORT : repository.getPort(); try { String userName = authenticationInfo.getUserName(); if (userName == null) { userName = System.getProperty("user.name"); } session = sch.getSession(userName, host, port); session.setTimeout(getTimeout()); } catch (JSchException e) { throw new AuthenticationException("Cannot connect. Reason: " + e.getMessage(), e); } Proxy proxy = null; ProxyInfo proxyInfo = getProxyInfo(ProxyInfo.PROXY_SOCKS5, getRepository().getHost()); if (proxyInfo != null && proxyInfo.getHost() != null) { proxy = new ProxySOCKS5(proxyInfo.getHost(), proxyInfo.getPort()); ((ProxySOCKS5) proxy).setUserPasswd(proxyInfo.getUserName(), proxyInfo.getPassword()); } else { proxyInfo = getProxyInfo(ProxyInfo.PROXY_HTTP, getRepository().getHost()); if (proxyInfo != null && proxyInfo.getHost() != null) { proxy = new ProxyHTTP(proxyInfo.getHost(), proxyInfo.getPort()); ((ProxyHTTP) proxy).setUserPasswd(proxyInfo.getUserName(), proxyInfo.getPassword()); } else { // Backwards compatibility proxyInfo = getProxyInfo(getRepository().getProtocol(), getRepository().getHost()); if (proxyInfo != null && proxyInfo.getHost() != null) { // if port == 1080 we will use SOCKS5 Proxy, otherwise will use HTTP Proxy if (proxyInfo.getPort() == SOCKS5_PROXY_PORT) { proxy = new ProxySOCKS5(proxyInfo.getHost(), proxyInfo.getPort()); ((ProxySOCKS5) proxy).setUserPasswd(proxyInfo.getUserName(), proxyInfo.getPassword()); } else { proxy = new ProxyHTTP(proxyInfo.getHost(), proxyInfo.getPort()); ((ProxyHTTP) proxy).setUserPasswd(proxyInfo.getUserName(), proxyInfo.getPassword()); } } } } session.setProxy(proxy); // username and password will be given via UserInfo interface. UserInfo ui = new WagonUserInfo(authenticationInfo, getInteractiveUserInfo()); if (uIKeyboardInteractive != null) { ui = new UserInfoUIKeyboardInteractiveProxy(ui, uIKeyboardInteractive); } Properties config = new Properties(); if (getKnownHostsProvider() != null) { try { String contents = getKnownHostsProvider().getContents(); if (contents != null) { sch.setKnownHosts(new StringInputStream(contents)); } } catch (JSchException e) { // continue without known_hosts } config.setProperty("StrictHostKeyChecking", getKnownHostsProvider().getHostKeyChecking()); } if (authenticationInfo.getPassword() != null) { config.setProperty( "PreferredAuthentications", "gssapi-with-mic,publickey,password,keyboard-interactive"); } config.setProperty("BatchMode", interactive ? "no" : "yes"); session.setConfig(config); session.setUserInfo(ui); StringWriter stringWriter = new StringWriter(); try { session.connect(); if (getKnownHostsProvider() != null) { PrintWriter w = new PrintWriter(stringWriter); HostKeyRepository hkr = sch.getHostKeyRepository(); HostKey[] keys = hkr.getHostKey(); for (int i = 0; keys != null && i < keys.length; i++) { HostKey key = keys[i]; w.println(key.getHost() + " " + key.getType() + " " + key.getKey()); } } } catch (JSchException e) { if (e.getMessage().startsWith("UnknownHostKey:") || e.getMessage().startsWith("reject HostKey:")) { throw new UnknownHostException(host, e); } else if (e.getMessage().contains("HostKey has been changed")) { throw new KnownHostChangedException(host, e); } else { throw new AuthenticationException("Cannot connect. Reason: " + e.getMessage(), e); } } try { getKnownHostsProvider().storeKnownHosts(stringWriter.toString()); } catch (IOException e) { closeConnection(); throw new AuthenticationException( "Connection aborted - failed to write to known_hosts. Reason: " + e.getMessage(), e); } }