2013-06-20 1 views
4

Linux 머신에서 bash 스크립팅을 사용하여 원격 Linux 머신에서 자동화하고 작동중인 명령이 있습니다 (중괄호는 cmd 연결에서 사라집니다).) : 백그라운드에 넣을 때 ssh 클라이언트 (라우터에서 dropbear)가 출력되지 않습니다.

(ssh -i /path/to/private_key [email protected] 'sh -c "echo 1; echo 2; echo 3; uname -a"')

그러나 앰퍼샌드는 백그라운드로 실행 연결된 경우, 그것을 실행하는 것 같다,하지만 출력이 인쇄되지 않습니다, 둘 다 표준 출력에,이나 표준 오류에, 그리고

파일로도 리디렉션 (중괄호 안에) 작동하지 않습니다 ... :

(ssh -i /path/to/private_key [email protected] 'sh -c "echo 1; echo 2; echo 3; uname -a"') &

그건 그렇고, 난 리눅스 2.4.37.10 (WRT54G에 TomatoUSB 빌드)에서 BusyBox v1.17.4에 ssh 클라이언트 dropbear v0.52를 실행 중입니다.

출력을 얻는 방법이 있습니까? 이 행동의 이유는 무엇입니까?

편집 :

의 편의를 위해, 여기에 일반 ssh 도움말 출력 (내 TomatoUSB에)입니다 :

Dropbear client v0.52 
Usage: ssh [options] [[email protected]]host[/port][,[[email protected]]host/port],...] [command] 
Options are: 
-p <remoteport> 
-l <username> 
-t Allocate a pty 
-T Don't allocate a pty 
-N Don't run a remote command 
-f Run in background after auth 
-y Always accept remote host key if unknown 
-s Request a subsystem (use for sftp) 
-i <identityfile> (multiple allowed) 
-L <listenport:remotehost:remoteport> Local port forwarding 
-g Allow remote hosts to connect to forwarded ports 
-R <listenport:remotehost:remoteport> Remote port forwarding 
-W <receive_window_buffer> (default 12288, larger may be faster, max 1MB) 
-K <keepalive> (0 is never, default 0) 
-I <idle_timeout> (0 is never, default 0) 
-B <endhost:endport> Netcat-alike forwarding 
-J <proxy_program> Use program pipe rather than TCP connection 

개정 1 일 이후 :

중괄호는 상처와하지 않는다 같은 결과없이 배경에 ssh 인증을 넣으려고 했으므로 -f 옵션은 해결책이 아닙니다. 흥미로운 부가 메모 : 예기치 않은 옵션 (예 : -v)이 지정되면 배경에 넣을 때도 오류 메시지 WARNING: Ignoring unknown argument '-v'이 표시되므로 백그라운드 프로세스에서 출력하는 것이 일반적으로 내 환경에서 작동합니다.

나는 x86 우분투에서 일반 ssh 클라이언트를 사용해 보았습니다. 작동합니다. 나는 또한 x86 우분투에서 dbclient을 시도했다. 그래서이 문제는 TomatoUSB 빌드 - 또는 "dropbear v0.52"TomatoUSB 및 우분투 빌드에서 알 수없는 수정 (도움말 출력의 차이는 단지 이중 크기의 기본 창 버퍼를 제공합니다. 우분투에서) ... 프로세스가 백그라운드에 놓여 있는지 어떻게 알 수 있습니까? 문제의 해결책이 있습니까?

+0

verbose 모드로 실행 해 보셨습니까? (-v) –

+0

지금은 알 수없는 인수를 무시하고 '경고 : -v'를 얻습니다. - 배경에서는 실행되지만 다른 출력은 출력하지 않습니다. – tueftl

+0

'()'문자를 포함하여'(....)'을 실제로 실행 중이라면 그 문자를 제거 할 수 있습니까? 그것들은 하위 셸 (프로세스)에 대한 호출로 해석됩니다. 그들은 당신의 산출물을 "삼킬"수 있습니다. 나는 항상 백그라운드 출력을 가진 ssh를 사용했다. 그것은 작동해야합니다. – shellter

답변

6

나는 내 OpenWRT 라우터에서 비슷한 문제가있었습니다. Dropbear SSH 클라이언트는 표준 입력이없는 경우 아무 것도 출력하지 않습니다. cron으로 실행할 때. 나는 &이 프로세스 표준 입력 (입력 없음)에 동일한 효과가 있다고 가정합니다.

작성자의 버그 트래커에 대한 해결 방법이 있습니다./dev/zero에서 입력을 리디렉션하십시오. 처럼 : 나는 my blog page에서 설명하는 시도로 그것은 나를 위해 일한

ssh -i yourkey [email protected] "echo 123" </dev/zero & 

.

+0

많은 감사합니다! 너 해결 했어! – tueftl

+0

OpenWRT (KAMIKAZE, 최첨단, r20828)와 동일한 문제가 발생했습니다. init.d 스크립트에서 ssh의 출력을 변수로 잡으려고합니다. 나는 모든 것을 시도한 다음이 해결 방법을 발견했습니다! 그것은 매력처럼 작동합니다, 많은 감사합니다! – lukyer