2016-08-21 3 views
0

stdin에서 root가 소유 한 파일에 텍스트를 쓰려고합니다.출력 리디렉션을 sudo와 함께 사용하는 방법은 무엇입니까?

SSH 연결 (기본적으로 스크립트에서)을 통해 프로그래밍 방식으로이 작업을 수행하므로 텍스트 편집기를 사용하는 것이 좋습니다. 터미널이 없습니다. 프로세스는 완전히 자동화되어 있습니다.

루트 고도가 sudo를 통해 얻을 수 있으며, [B] 파일이 리디렉션 cat를 사용하여 쓸 수 있습니다 [A], 나는 가정 것을 감안할 때 작동합니다 다음

ssh [email protected] sudo cat >the-file 

불행하게도, 리디렉션은 sudo에 적용되고 cat에는 적용되지 않습니다. 이 예에서 cat에 리디렉션을 적용하려면 어떻게해야합니까? 이 작업을 수행하는

+0

는 사실, 심지어 SSH 연결을 통해 텍스트 편집기를 사용할 수 있습니다, 정력 또는 나노 등의 편집자는 잘 작동합니다. SSH 연결로 사례를 더 잘 설명하십시오. 리디렉션을 시도 할 때 이미 기록 했습니까? – paulequilibrio

+0

sudo 명령이 올바르지 않습니다. 'sudo -u user -h host cat> the-file'이어야합니다. 그건 내 시스템에서 작동합니다. "SSH 연결을 통해이 작업을 수행하므로 텍스트 편집기를 사용하는 것이 좋습니다." 그 결론은 당신이하는 것처럼 자명하지 않습니다. 'vim','nano','emacs -nw '와 같은 편집자들은 단말기에서 잘 작동합니다. – kaylum

+0

@ John1024 예, 티를 사용할 수는 있지만 리디렉션 문제를 직접 수정하는 것이 좋습니다. –

답변

2

일반적인 패턴은 다음과 같습니다

ssh [email protected] 'cat | sudo tee the-file' 

tee 파일로 출력을 리디렉션 및 sudo 실행할 수 있습니다.

파일이 추가되는 >>을 모방하려면 sudo tee -a을 사용하십시오.

파이프가 로컬 쉘에 의해 해석되지 않도록 위와 같이 명령을 인용해야합니다.

편집

tee 명령 is part of POSIX, 당신이 기존에 의존 할 수 있습니다.

뿐만 아니라 표준 오류를 리디렉션하려면 :

ssh [email protected] 'some_command 2>&1 | sudo tee output-file' 
+0

리디렉션 *은'sudo' 명령에서 사용할 수 없습니까? 예를 들어,'tee' (그리고'dd'라고 가정)이 시스템 상에 존재하지 않는다면, 나는 뼈 빠질 것입니까? 아니면 stderr를 리다이렉트하고 싶다면 나도 뼈 빠질 것입니까? –

+0

내 편집을보세요 :) 예, 아마도'ssh 'sudo sh -c "cat> the-file"''을 사용할 수 있지만, "두 가지 수준의 인용"문제에 신속하게 빠질 수 있습니다. ssh를 통해'sh -c'를 통해 리디렉션이 제대로 작동하는지 확신 할 수 없습니다. – Will

+1

원하는 모든 명령에서 리디렉션을 사용할 수 있지만 리디렉션은 명령이 실행되기 전에 수행됩니다. (사실, 당신의 질문은 잘못되었다; 리다이렉션은'sudo'가 아니라 전체'ssh' 명령 행에 적용된다.)'sudo sh -c 'cat> output-file'과 같이 뭔가 특권이있는 리디렉션을 얻을 수있다. ,'sudo tee'는 훨씬 간단합니다. 'sudo '를 사용하면 권한이 부여 된 작업을 가능한 가장 단순한 명령으로 제한하려고 항상 노력해야합니다. – tripleee