Copiando arquivos no linux utilizando Runtime

5 respostas
dahenz

Bom dia!

Estou utilizando a classe Runtime para copiar arquivos de um servidor linux para outro, o comando de runtime está como segue:

sshpass -p senha123 scp root@servidor://cte/filial/cuba/cte_dacte_saida/CTe51091076080738003193570010000000779525932157.pdf /opt/apache-tomcat-6.0.14/webapps/cte/pdf_temp

Observem que estou utilizando um aplicativo chamado sshpass que me permite passar a senha como parâmetro ao comando scp do linux que funciona perfeitamente no console, mas o Runtime do java me traz esse erro:

java.io.IOException: java.io.IOException: error=2, No such file or directory

segue o código de como estou utilizando o comando da classe Runtime:

private void deployFile(String pathPdf) throws IOException{
		
		String from = "sshpass -p senha123 scp root@servidor:/"+pathPdf;
		String to = FacesUtil.getCurrentDirectory();
		String comando = from+" "+to+"pdf_temp";
		
		Process processo = Runtime.getRuntime().exec(comando);
		
		BufferedReader buffer = new BufferedReader(new InputStreamReader(processo.getErrorStream())); 						
		String erro = ""; 
				
		while((erro = buffer.readLine())!= null){ 
				    
			System.out.println(erro); 
				
		}											
		
	}

5 Respostas

E

O seu programa java está encontrando o comando sshpass? Se não estiver (porque ele não está no path), indique o caminho completo do comando. Por exemplo:

private void deployFile(String pathPdf) throws IOException{  

    String[] parametros = {
        "/usr/local/bin/sshpass", // como exemplo. Troque pelo path correto.
       "-p",
      senha, 
      "scp",
      "root@servidor:/" + pathPdf,
      FacesUtil.getCurrentDirectory() + "pdf_temp");

    Process processo = Runtime.getRuntime().exec(parametros);  

    BufferedReader buffer = new BufferedReader(new InputStreamReader(processo.getErrorStream()));                         
    String erro;   
    while ((erro = buffer.readLine())!= null){   
        System.out.println(erro);   
    }                                             
}
dahenz

Apontei o caminho na "mão" para me certificar de que não haja erro, mas mesmo assim acontece o maledeto.... :lol:

private void undeployFile(String fileName) throws IOException{
		
		//String comando = "rm -f "+FacesUtil.getCurrentDirectory()+"pdf_temp/"+fileName;
		
		//System.out.println(comando);
		
		String comando = "sshpass -p senha123 scp root@servidor://cte/filial/cuba/cte_dacte_saida/CTe51091076080738003193570010000000074525932157.pdf /opt/apache-tomcat-6.0.14/webapps/cte/pdf_temp";
		
		Process processo = Runtime.getRuntime().exec(comando);

		BufferedReader buffer = new BufferedReader(new InputStreamReader(processo.getErrorStream())); 						
		String erro = ""; 
				
		while((erro = buffer.readLine())!= null){ 
				    
			System.out.println(erro); 
				
		}											

	}
Será que o problema está no comando sshpass???
E

Você executou o sshpass na mão?

dahenz

sim… eu mostrei uma mensagem no browser trazendo aquele comando, só para copiar e colar no servidor… e roda blzinha… mas na aplicação o mesmo comando não…

Fiz o comando assim:

String comando = "/opt/install/sshpass-1.04/sshpass -p senha123 scp root@servidor://cte/filial/cuba/cte_dacte_saida/CTe51091076080738003193570010000000074525932157.pdf /opt/apache-tomcat-6.0.14/webapps/cte/pdf_temp";

Continua o mesmo erro… pode ser que o comando sshpass não esteja sendo encontrado portanto coloquei o caminho dele também…

Estranho…

V

Bom dia.
Eu sei que o tópico é antigo, mas hoje eu precisei fazer a mesma coisa e consegui desta maneira

Process processo;
				processo = Runtime
						.getRuntime()
						.exec(
								"/usr/bin/sshpass -p senha scp arquivo origem usuario@servidor://arquivo destino",
								null, new File("arquivo origem"));
				BufferedReader buffer = new BufferedReader(
						new InputStreamReader(processo.getErrorStream()));
				String erro;
				while ((erro = buffer.readLine()) != null) {
					System.out.println(erro);
				}

encontrei esse trecho de código em http://www.daniweb.com/forums/thread159224.html
flo t+!

Criado 9 de outubro de 2009
Ultima resposta 14 de out. de 2010
Respostas 5
Participantes 3