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

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

stdoutstdin한 CentOS 서버의 데이터는 파이프를 통해 다른 CentOS 서버 로 전송되어야 합니다 . 가능합니까?

고쳐 쓰다

ScottPack, MikeyB 및 jofel은 모두 유효한 답변을 가지고 있습니다. 내 질문에 보안이 요구 사항으로 지정되지는 않았지만 보안은 항상 우수하기 때문에 Scott에게 답변을 드립니다. 그러나 다른 두 동료의 제안도 가능합니다.

답변1

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

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

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

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

우리는 tarball을 만들고 STDOUT거기에 일반 내용을 쓰고 있습니다. SSH를 사용하여 원격 명령을 실행하므로 STDIN STDINcat. 그런 다음 파일로 리디렉션합니다.

답변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

관련 정보