11

我希望能够使用 JSch Java SSH 库连接到我的 EC2 实例。如何将来自 AWS 的 .pem 密钥对与 JSch 一起使用?尝试连接时如何处理 UnknownHostKey 错误?

4

2 回答 2

19

groovy 代码将使用 JSch 库连接到 EC2 实例,运行 whoami 和 hostname 命令,然后将结果打印到控制台:

@Grab(group='com.jcraft', module='jsch', version='0.1.49')

import com.jcraft.jsch.*

JSch jsch=new JSch();
jsch.addIdentity("/your path to your pem/gateway.pem");
jsch.setConfig("StrictHostKeyChecking", "no");

//enter your own EC2 instance IP here
Session session=jsch.getSession("ec2-user", "54.xxx.xxx.xxx", 22);
session.connect();

//run stuff
String command = "whoami;hostname";
Channel channel = session.openChannel("exec");
channel.setCommand(command);
channel.setErrStream(System.err);
channel.connect();

InputStream input = channel.getInputStream();
//start reading the input from the executed commands on the shell
byte[] tmp = new byte[1024];
while (true) {
    while (input.available() > 0) {
        int i = input.read(tmp, 0, 1024);
        if (i < 0) break;
        print(new String(tmp, 0, i));
    }
    if (channel.isClosed()){
        println("exit-status: " + channel.getExitStatus());
        break;
    }
    sleep(1000);
}

channel.disconnect();
session.disconnect();

这是另一个如何建立相同连接的示例,但通过网关 ssh 隧道(NAT 堡垒):https ://gist.github.com/scoroberts/5605655

于 2013-05-18T16:39:53.993 回答
2

1:复制ec2.pem文件到~/.ssh/

2:然后 chmod 700 ~/.ssh/ec2.pem

3:新建文件~/.ssh/config

vi ~/.ssh/config

Host ec2server1 
HostName ec2.Server-Name.com 
User ec2-user 
IdentityFile "~/.ssh/ec2.pem"

4:现在使用您在 ~/.ssh/config 文件的第一行中给出的带有 ssh 和主机值的命令。像这样

ssh ec2server1

5:现在在您的代码中使用第 4 步命令

于 2013-05-18T17:00:12.870 回答