Java 通过运行scp命令(JSCH),将视频从我自己的机器复制到EC2服务器

Java 通过运行scp命令(JSCH),将视频从我自己的机器复制到EC2服务器,java,linux,amazon-web-services,amazon-ec2,jsch,Java,Linux,Amazon Web Services,Amazon Ec2,Jsch,我需要使用Java程序将视频文件从本地机器SCP到EC2云服务器。我正在使用JSCH库来实现这一点 到目前为止,我可以连接到EC2服务器,并可以在其上运行基本命令。代码如下: import com.jcraft.jsch.*; import java.io.*; import java.io.IOException; public class EC2 { public static void main(String[] args) throws JSchException, IOEx

我需要使用Java程序将视频文件从本地机器SCP到EC2云服务器。我正在使用JSCH库来实现这一点

到目前为止,我可以连接到EC2服务器,并可以在其上运行基本命令。代码如下:

import com.jcraft.jsch.*;
import java.io.*;
import java.io.IOException;

public class EC2 
{
    public static void main(String[] args) throws JSchException, IOException,     InterruptedException 
    {
        JSch jsch=new JSch();
        jsch.addIdentity("yyyy.pem");
        jsch.setConfig("StrictHostKeyChecking", "no");

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

        //run stuff
        String command = "whoami;hostname";
        Channel channel = session.openChannel("exec");
        ((ChannelExec) channel).setCommand(command);
        ((ChannelExec) 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;
                System.out.println(new String(tmp, 0, i));
            }
            if (channel.isClosed())
            {
                System.out.println("exit-status: " + channel.getExitStatus());
                break;
            }
            Thread.sleep(1000);
        }

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

}
import com.jcraft.jsch.*;
导入java.io.*;
导入java.io.IOException;
公共类EC2
{
公共静态void main(字符串[]args)抛出JSCHEException、IOException、InterruptedException
{
JSch JSch=新的JSch();
jsch.addIdentity(“yyyy.pem”);
setConfig(“StrictHostKeyChecking”、“no”);
//在此处输入您自己的EC2实例IP
Session Session=jsch.getSession(“ec2用户”,“xx.xxx.xxx.xxx”,22);
session.connect();
//跑东西
String命令=“whoami;主机名”;
Channel=session.openChannel(“exec”);
((ChannelExec)channel).setCommand(command);
((ChannelExec)channel.setErrStream(System.err);
channel.connect();
InputStream输入=channel.getInputStream();
//开始从shell上执行的命令中读取输入
字节[]tmp=新字节[1024];
while(true)
{
while(input.available()>0)
{
inti=input.read(tmp,0,1024);
如果(i<0)断裂;
System.out.println(新字符串(tmp,0,i));
}
if(channel.isClosed())
{
System.out.println(“退出状态:+channel.getExitStatus());
打破
}
睡眠(1000);
}
通道断开();
session.disconnect();
}
}
现在我了解了文件传输的SCP语法。但这里的问题是,我现在在这里的每个命令都将在EC2服务器上运行 例如:String command=“ls-l”;将给我EC2中的主文件列表


因此,如何将存储在笔记本电脑上的视频传输到ec2的主/ec2用户目录?

您的
scp
命令必须在本地运行,而不是在ec2实例上运行。这不需要JSCH库。有关更多详细信息,请参见此问题

当然,
scp
也必须在本地提供


--Seb

是的,但我需要对EC2进行性能测试,所以我最终会将1000个视频放入其中。因此,我正在编写一个JAVA程序来实现这一点。有时,一个简单的shell脚本比JAVA应用程序更容易开发。如果您必须将大量数据推送到AWS,以便在EC2实例上进行处理,我建议您看看S3。您的本地计算机可以在处理文件之前上载到s3(使用CLI或Java程序),并从s3下载EC2程序。