当前位置: 首页 > 知识库问答 >
问题:

如何在使用JSch库的ec2连接中使用.pem文件内容作为字符串

督冠玉
2023-03-14

这是使用. pem文件获取与Amazon实例的连接的代码。

import com.jcraft.jsch.*;

public class JConnectEC2shell{
  public static void main(String[] arg){

    try{
      JSch jsch=new JSch();

      String user = "ec2-user";
      String host = "Enter Ip address of your instance";
      int port = 22;
      String privateKey = "D:\\privateKeyFile.pem";

      jsch.addIdentity(privateKey);
      System.out.println("identity added ");

      Session session = jsch.getSession(user, host, port);
      System.out.println("session created.");

      // disabling StrictHostKeyChecking may help to make connection but makes it insecure
      // see http://stackoverflow.com/questions/30178936/jsch-sftp-security-with-session-setconfigstricthostkeychecking-no
      // 
         java.util.Properties config = new java.util.Properties();
         config.put("StrictHostKeyChecking", "no");
         session.setConfig(config);

      session.connect();

      Channel channel=session.openChannel("shell");

      // Enable agent-forwarding.
      //((ChannelShell)channel).setAgentForwarding(true);

      channel.setInputStream(System.in);
      /*
      // a hack for MS-DOS prompt on Windows.
      channel.setInputStream(new FilterInputStream(System.in){
          public int read(byte[] b, int off, int len)throws IOException{
            return in.read(b, off, (len>1024?1024:len));
          }
        });
       */

      channel.setOutputStream(System.out);

      /*
      // Choose the pty-type "vt102".
      ((ChannelShell)channel).setPtyType("vt102");
      */

      /*
      // Set environment variable "LANG" as "ja_JP.eucJP".
      ((ChannelShell)channel).setEnv("LANG", "ja_JP.eucJP");
      */

      //channel.connect();
      channel.connect(3*1000);
    }
    catch(Exception e){
      System.out.println(e);
    }
  }
}

我想把私钥放进去。pem文件(< code > jsch . addidentity(private key);)作为来自数据库的字符串。现在它是一个文件名。这是可能的,任何帮助将是可观的。我从点击这里的链接中获得了这段代码

共有3个答案

姬慎之
2023-03-14

呼叫JSCH

String pemFormat = addMarkers(connectionParams.getIdentity());
jsch.addIdentity("TunnelPrivateKey.pem", pemFormat.getBytes(), null, null);

删除空间并添加标记

private static String addMarkers(String identity) {
        identity = identity.replaceAll("\\s+", "");
        String lineBreak = "\r\n";
        StringBuilder key = new StringBuilder();
        key.append("-----BEGIN RSA PRIVATE KEY-----");
        key.append(lineBreak);
        for (int i = 0; i< identity.length(); i+=76) {
            int len = Math.min(i+76 , identity.length());
            key.append(identity.substring(i, len));
            key.append(lineBreak);
        }
        key.append("-----END RSA PRIVATE KEY-----");
        return key.toString();
}
扈沛
2023-03-14

我只是将pem文件名作为“我的密钥”,并将pem的内容作为字节[]传递,如下所示。jsch.addIdentity(“privateKeyFile.pem”,pemString.getBytes(),null,null);

请注意,我必须在 pem 内容的第一行附加“ System.getProperty(”line.separator“)”。其他行不需要行分隔符,但除非第一行以分隔符结尾,否则它会出错。例如 “-----BEGIN RSA PRIVATE KEY-----” System.GETProperty(“line.separator”)

韦鸣
2023-03-14

Jsch类提供了这个方法,它将私钥和公钥都作为字节数组:

addIdentity(String name, byte[]prvkey, byte[]pubkey, byte[] passphrase)

因此,您可以将数据库字段读入字符串,然后传递它,例如。

// read db columns
String privateKey = ... 
String publicKey = ...
String passphrase = ...

final JSch jsch = new JSch();
jsch.addIdentity("my key", privateKey.getBytes(), publicKey.getBytes(), passphrase.getBytes());
 类似资料:
  • 我正在尝试使用Java代码中的JSch库SSH到EC2。我在中引用了此链接,因此如何使用。pem使用JSch库在ec2连接中将内容作为字符串进行归档,并尝试了下面提到的两种方法,但都没有成功。有人能指导我如何实现我的目标吗? 客观的 我有一个这样的PEM文件。我不想把我的PEM文件存储在AWS的任何地方,因此我的方法是提取一个等效的字符串,我可以编码和存储在数据库中,并从java解码,用于将参数传

  • 问题内容: 我正在使用JSCH进行sftp文件上传。在当前状态下,每个线程都会在需要时打开和关闭连接。 是否可以在JSCH中使用连接池,以避免由于大量打开和关闭连接而导致的开销? 这是从线程内部调用的函数的示例 问题答案: 为此,我希望使用commons-pool。;)

  • 问题内容: 我使用来了解Java与运算符的工作方式。 它是用同样的操作? 问题答案: 不。使用和做不一样。 在Java中,字符串实例是不可变的。 因此,如果您这样做: 每次连接时都在创建新的字符串。 另一方面,StringBuilder就像一个缓冲区,可以在追加新Strings时根据需要增长。 经验法则是(由于我的评论而改变): 如果要进行大量连接(例如,在循环内进行连接,或生成由多个字符串连接的

  • 我想在逻辑应用程序中使用连接器,但当我们向服务总线添加连接时。 我需要使用密钥保险库,而不是将服务总线连接字符串插入到服务总线连接器中,有什么办法吗? 如何在logic应用程序中使用它?

  • 问题内容: 基本上,问题是如何从中得到: 对此: 问题答案: http://dev.mysql.com/doc/refman/5.0/zh/group-by- functions.html#function_group- concat 在上面的链接中:该函数返回一个字符串结果,其中包含来自组的串联的非NULL值。如果没有非NULL值,则返回NULL。

  • 我正在使用cURL命令行实用程序向web服务发送HTTPPOST。我想包括一个文件的内容作为文章的主体实体。我试过使用