두 컴퓨터 사이에 이미 ssh 연결이 설정되어 있습니다.
이미 열려있는 연결을 사용하고 다른 ssh 세션을 시작하지 않고 로컬 컴퓨터에서 실행되는 셸 스크립트에서 원격 컴퓨터로 명령을 보내는 방법이 있습니까?
답변
사전에 계획하고 있다면 OpenSSH의 최신 버전으로 매우 간단합니다.
마스터 연결을 처음으로 엽니 다. 후속 연결의 경우 기존 마스터 연결을 통해 슬레이브 연결을 라우팅하십시오. 에서 ~/.ssh/config
자동으로 연결 공유를 설정 하십시오 .
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
기존 연결과 동일한 (사용자, 포트, 시스템)에 대한 ssh 세션을 시작하면 두 번째 세션이 첫 번째 세션을 통해 터널링됩니다. 두 번째 연결을 설정하려면 새로운 인증이 필요하지 않으며 매우 빠릅니다.
답변
nc 도구와 ssh 터널을 사용하면 쉽게 달성 할 수 있습니다.
1. SSH 터널 열기
ssh 세션에서 ~C새 줄을 입력하십시오 . 다음과 같은 ssh “서비스 콘솔”프롬프트가 나타납니다.
ssh>
local forward 명령을 입력 하여 ssh 터널을 엽니 다.
ssh> -L22000:targethost:22001
Forwarding port.
targethost
연결된 컴퓨터의 호스트 이름 또는 IP 주소는 어디에 있습니까 ?
이제 대상 시스템의 ssh 서버가 터널을 금지하도록 구성되지 않았다고 가정하면 원하는 연결 전달이 있습니다. ssh
시스템의 클라이언트는 포트 22000을 수신하고 전송 된 모든 트래픽을의 22001 포트로 전달합니다 targethost
.
2. 원격 머신에서 네트워크 서버를 시작하십시오
이것은 이미 열린 ssh 세션에 다음 명령을 입력하는 것만 큼 간단합니다.
remote$ nc -l localhost 22001 | sh
그러면 ssh 터널의 대상 포트 인 포트 22001에서 수신 대기하는 TCP 서버가 시작되고 수신 된 데이터 (아마도 쉘 명령)를 targethost
쉘 인스턴스로 라우팅합니다 .
3. 터널을 통해 스크립트를 보내십시오
local$ cat yourscript.sh | nc localhost 22000
그러면 스크립트 본문이 ssh 터널로 전송되고의 쉘에서 실행됩니다 targethost
. ssh 세션을 사용하여 터미널에 스크립트 출력이 표시됩니다.
또한이 시나리오에서 ssh 터널 (1 단계)은 반드시 필요한 것은 아닙니다. 서버를 열고 인터넷을 통해 직접 연결할 수도 있습니다. 그러나 대상 호스트에 직접 연결할 수 없거나 (예 : NAT 뒤에 있음) ssh 암호화가 필요한 경우 터널을 사용해야합니다.