2013-06-07 1 views
1

그래서 원격 시스템에 ssh를 통해 연결을 설정했습니다. 이제는 몇 가지 명령을 실행하고 일부 파일을 가져 와서 호스트 컴퓨터로 복사하는 작업을하고 싶습니다.ssh를 통해 연결된 장치에서 실행될 명령을 스크립팅하는 방법은 무엇입니까?

내가

ssh [email protected] "command1; command2;....command_n" 

를 실행 한 다음 연결을 닫을 수 있다는 것을 알고,하지만 난 aforememtioned 구문을 사용하지 않고 동일한 작업을 수행 할 수있는 방법? 나는 많은 인용문과 문자가있는 복잡한 명령을 많이 사용하여 도망 가기가 쉽지 않습니다.

감사합니다.

+1

흥미로운 솔루션에 대한 답변을 확인하십시오 : http://stackoverflow.com/a/3872762/379174 – Wheeyls

+0

[원격 컴퓨터에서 쉘 스크립트를 실행하기 위해 ssh를 사용하는 방법?] (http://stackoverflow.com)/questions/305035/how-to-use-ssh-to-run-shell-script-on-a-remote-machine) –

+1

감사합니다 Wheeyls; 그것을 보게 될 것이다. 그러나 처음에는 그것이 구조로서 꽤 혼란 스럽다. 나는 이것이 중복 된 것이라고 말하지 않을 것이다. 나는 대체 방법을 요구하고있다. SSH를 통해 명령을 전달하는 방법을 이미 알고 있습니다 ... SSH를 꼭 사용할 필요는 없습니다. 방금 연결했습니다. 감사! –

답변

1

즉각적인 생각은 스크립트를 작성하여 원격 시스템에 푸시하여 텍스트 파일로 로컬로 실행하지 않는 이유입니다. 당신이하지 어떤 이유로,이 주변에 바이올린을 할 수 있으며 당신이 아마 히어 닥으로 잘 할 수 있다고 생각하는 경우 :

ssh -t [email protected] bash << 'EOF' 
command 1 ... 
command 2 ... 
command 3 ... 

EOF 

을하고 옳은 일을하는 것 같다. 따옴표를 안전하게 보관하려면 heredoc을 사용하십시오.하지만 까다로울 수 있습니다. 유일한 다른 점은 나는 (와 나는 완전히이을 권 해드립니다하지 않음) 제공 할 수 있습니다 읽고 그래서 같은 ssh 과정에 쓸 perl 같은 장난감을 사용할 수 있습니다 :

open S, "| ssh -i ~/.ssh/host_dsa -t [email protected]om bash"; 
print S "date\n"; # and so on 

을하지만, 이것은 정말입니다 사물에 대해 다니는 뻔한 길. 다른 언어로도이 작업을 수행 할 수 있습니다.

0

셸 대신에 일부 스크립트 언어 (Perl, Python, Ruby 등)와 추악한 작업을 처리하는 일부 모듈을 사용하십시오. 여기에서

#!/usr/bin/perl 
use Net::OpenSSH; 
my $ssh = Net::OpenSSH->new($host, user => $user); 
$ssh->system('echo', 'Net::Open$$H', 'Quot%$', 'Th|s', '>For', 'You!'); 
$ssh->system({stdout_file => '/tmp/ls.out'}, 'ls'); 
$ssh->scp_put($local_path, $remote_path); 
my $out = $ssh->capture("find /etc"); 
0

: 예를 들어 Can I ssh somewhere, run some commands, and then leave myself a prompt?

스크립트의 편의를 위해 위의 링크가 아닌 내에서 복사 ... 매우 간단 보인다 기대하지만, 나는 그것이 매우 유용하다고의 사용.

#!/usr/bin/expect -f 
spawn ssh $argv 
send "export V=hello\n" 
send "export W=world\n" 
send "echo \$V \$W\n" 
interact 

내가

send "scp -Cpvr someLocalFileOrDirectory [email protected]/home/you 

같은 라인을 같은데요 ... 다시 파일을 당신에게 다음

과를 얻을 것 :

send "exit" 

세션을 종료 할 것 - 또는 상호 작용으로 끝낼 수 있고 출구에서 직접 입력 할 수 있습니다.

관련 문제