한 서버의 stdout을 다른 서버의 stdin으로 파이프할 수 있나요?

한 서버의 stdout을 다른 서버의 stdin으로 파이프할 수 있나요?

stdoutstdin하나의 CentOS 서버에서 다른 CentOS 서버 로 파이프되어야 합니다 . 이것이 가능한가?

업데이트

ScottPack, MikeyB 및 jofel은 모두 유효한 답변을 가지고 있습니다. 내 질문이 보안을 요구 사항으로 지정하지는 않았지만 안전하다는 것은 항상 좋은 일이기 때문에 Scott에게 답변을 제공했습니다. 그러나 다른 두 동료의 제안도 효과가 있을 것입니다.

답변1

이것은 부끄럽지 않은 예입니다.

원격 서버에서 명령을 실행하는 데 사용하면 ssh일종의 멋진 내부 입력/출력 리디렉션이 수행됩니다. 사실 저는 이것이 OpenSSH의 미묘하고 멋진 기능 중 하나라고 생각합니다. 특히 ssh원격 시스템에서 임의의 명령을 실행하는 데 사용하는 경우 ssh는 실행 중인 명령의 명령에 매핑 STDIN됩니다 .STDOUT

예를 들어, 백업 tarball을 만들고 싶지만 로컬에 저장하고 싶지 않거나 저장할 수 없다고 가정해 보겠습니다. 이 구문을 살펴보겠습니다.

$ tar -cf - /path/to/backup/dir | ssh remotehost "cat - > backupfile.tar"

우리는 tarball을 만들고 그것을 STDOUT일반적인 내용에 쓰고 있습니다. 원격 명령을 실행하기 위해 ssh를 사용하고 있으므로 STDIN은 STDINof 에 매핑됩니다 cat. 그런 다음 파일로 리디렉션됩니다.

답변2

유선을 통한 보안에 대해 걱정할 필요가 없을 때 호스트 간에 데이터를 파이프하는 편리한 방법은 netcat연결의 양쪽 끝을 사용하는 것입니다.

이를 통해 비동기식으로 설정할 수도 있습니다.

"수신기"(실제로는 양방향 통신이 가능하지만 이렇게 생각하는 것이 더 쉽습니다)에서 다음을 실행합니다.

nc -l -p 5000 > /path/to/backupfile.tar

그리고 "발신자"에서 다음을 실행합니다.

tar cf - /path/to/dir | nc 1.2.3.4 5000

답변3

단방향 및 양방향 연결을 생성하는 매우 강력한 도구는 다음과 같습니다.socat. 가능성을 간략하게 살펴보려면 해당 항목의 예를 살펴보세요.맨페이지.

유사한 도구를 완전히 대체하며 netcatSSL 암호화 연결을 지원합니다. 초보자에게는 충분히 간단하지 않을 수도 있지만, 적어도 그것이 존재한다는 것을 아는 것은 좋습니다.

답변4

하나의 명령으로 SSH 공개 키를 다른 호스트에 넣으십시오.

ssh [email protected] 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub

관련 정보