
stdout
stdin
하나의 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은 STDIN
of 에 매핑됩니다 cat
. 그런 다음 파일로 리디렉션됩니다.
답변2
유선을 통한 보안에 대해 걱정할 필요가 없을 때 호스트 간에 데이터를 파이프하는 편리한 방법은 netcat
연결의 양쪽 끝을 사용하는 것입니다.
이를 통해 비동기식으로 설정할 수도 있습니다.
"수신기"(실제로는 양방향 통신이 가능하지만 이렇게 생각하는 것이 더 쉽습니다)에서 다음을 실행합니다.
nc -l -p 5000 > /path/to/backupfile.tar
그리고 "발신자"에서 다음을 실행합니다.
tar cf - /path/to/dir | nc 1.2.3.4 5000
답변3
답변4
하나의 명령으로 SSH 공개 키를 다른 호스트에 넣으십시오.
ssh [email protected] 'cat >> .ssh/authorized_keys' < .ssh/id_rsa.pub