설정된 SSH 채널 사용

설정된 SSH 채널 사용

두 컴퓨터 사이에 SSH 연결을 설정했습니다.

다른 SSH 세션을 시작하지 않고 이미 열려 있는 연결을 사용하여 로컬 컴퓨터에서 실행 중인 쉘 스크립트에서 원격 컴퓨터로 명령을 보내는 방법이 있습니까?

답변1

미리 계획을 세우면 매우 간단합니다.

처음으로 기본 연결을 엽니다. 후속 연결의 경우 슬레이브 연결은 기존 마스터 연결을 통해 라우팅됩니다. 당신의~/.ssh/config, 연결 공유 설정이 자동으로 수행됩니다.

ControlMaster auto
ControlPath ~/.ssh/control:%C

기존 연결과 동일한 연결(사용자, 포트, 컴퓨터)로 SSH 세션을 시작하면 두 번째 세션이 첫 번째 세션을 통해 터널링됩니다. 두 번째 연결을 설정하는 데는 새로운 인증이 필요하지 않으며 매우 빠릅니다.

ControlPersist 600에도 넣으면 .ssh/config터널은 사용을 중지한 후에도 10분(600초) 동안 열린 상태로 유지됩니다. 즉, 첫 번째 세션을 계속 실행할 필요가 없습니다. 연속 세션 10분 이상 일시 중지.

답변2

사용하면 쉽게 달성할 수 있습니다.CNC도구 및 SSH 터널.

1. SSH 터널 열기

SSH 세션에서 ~C새 줄을 입력합니다. 다음과 같은 SSH "서비스 콘솔" 프롬프트가 표시됩니다.

ssh> 

입력하다지역 전달SSH 터널을 여는 명령:

ssh> -L22000:targethost:22001
Forwarding port.

targethost연결하려는 컴퓨터의 호스트 이름이나 IP 주소는 어디에 있습니까?

이제 대상 머신의 SSH 서버가 터널링을 비활성화하도록 구성되지 않았다고 가정하면 필요한 연결 전달이 이루어집니다. ssh머신의 클라이언트는 포트 22000에서 수신 대기하고 해당 머신으로 전송된 모든 트래픽을 포트 22001로 전달합니다 targethost.

2. 원격 시스템에서 웹 서버를 시작합니다.

이는 이미 열려 있는 SSH 세션에 다음 명령을 입력하는 것만큼 간단합니다.

remote$ nc -l localhost 22001 | sh

그러면 포트 22001(ssh 터널의 대상 포트)에서 수신 대기하는 TCP 서버가 시작되고 수신된 데이터(아마도 셸 명령)가 targethost셸 인스턴스로 라우팅됩니다.

3. 터널을 통해 스크립트 보내기

local$ cat yourscript.sh | nc localhost 22000

그러면 스크립트 본문이 ssh 터널로 전송되고 결국 targethostssh 세션을 통해 터미널에 스크립트 출력이 표시됩니다.


또한 이 경우 SSH 터널(1단계)이 반드시 필요한 것은 아니며 서버를 열고 인터넷을 통해 직접 연결할 수도 있다는 점을 지적하고 싶습니다. 그러나 대상 호스트에 직접 연결할 수 없거나(예: NAT 뒤) SSH 암호화가 필요한 경우 터널이 필요합니다.

답변3

작동하는 데 시간이 좀 걸렸습니다. 참조여기완전한 예와 설명을 보려면.

즉, 다음이 필요합니다.

  1. SSH 세션에 대한 정보를 저장하기 위해 SSH 구성 파일을 만듭니다.

    remote=your_ip_address
    echo "HostName $remote" > ssh_config
    echo "User root" >> ssh_config
    echo "ControlMaster auto" >> ssh_config
    echo "ControlPath ~/.ssh/%C" >> ssh_config
    master_ssh='ssh -F ssh_config'
    
  2. 메인 세션 시작

    $master_ssh -MNf $remote
    
  3. 재동기화 수행

    rsync -e "$master_ssh" $opts $remote:/etc/some_file1  local_directory/
    rsync -e "$master_ssh" $opts $remote:/etc/some_file2  local_directory/
    rsync -e "$master_ssh" $opts $remote:/etc/some_file3  local_directory/
    
  4. 기본 세션 닫기

    $master_ssh -O exit $remote
    

관련 정보