답변:
사전에 계획하고 있다면 OpenSSH의 최신 버전으로 매우 간단합니다.
마스터 연결을 처음으로 엽니 다. 후속 연결의 경우 기존 마스터 연결을 통해 슬레이브 연결을 라우팅하십시오. 에서 ~/.ssh/config자동으로 연결 공유를 설정 하십시오 .
ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r
기존 연결과 동일한 (사용자, 포트, 시스템)에 대한 ssh 세션을 시작하면 두 번째 세션이 첫 번째 세션을 통해 터널링됩니다. 두 번째 연결을 설정하려면 새로운 인증이 필요하지 않으며 매우 빠릅니다.
/var/log/secure및 /var/log/auth.log로그 SSH 연결; 기존 연결에서 피기 백되기 때문에 슬레이브 연결이 나타나지 않습니다. ssh 세션이 터미널을 할당 한 경우 (즉 ssh somehost, 명령이 제공되지 않은 또는 ssh -t), wtmp터미널이 어떻게 나타나는지 (연결을 설정하는 데 사용 된 방법, 터미널 에뮬레이터 응용 프로그램,…
ControlPersist 600소켓이 자동으로 삭제되기 전에 유휴 상태 인 초 단위의 지연 시간을 사용할 수도 있습니다 . 그렇지 않으면 마스터 연결이 종료되면 자동으로 종료됩니다. 원격으로 일련의 명령 (예 : 다른 폴더에 대한 일련의 rsync 명령)을 실행하는 데 좋지 않습니다.
-S(소켓 지정) 및 -M(마스터 연결 작성 )을 사용할 수도 있습니다 .
nc 도구와 ssh 터널을 사용하면 쉽게 달성 할 수 있습니다.
ssh 세션에서 ~C새 줄을 입력하십시오 . 다음과 같은 ssh "서비스 콘솔"프롬프트가 나타납니다.
ssh>
local forward 명령을 입력 하여 ssh 터널을 엽니 다.
ssh> -L22000:targethost:22001
Forwarding port.
targethost연결된 컴퓨터의 호스트 이름 또는 IP 주소는 어디에 있습니까 ?
이제 대상 시스템의 ssh 서버가 터널을 금지하도록 구성되지 않았다고 가정하면 원하는 연결 전달이 있습니다. ssh시스템의 클라이언트는 포트 22000을 수신하고 전송 된 모든 트래픽을의 22001 포트로 전달합니다 targethost.
이것은 이미 열린 ssh 세션에 다음 명령을 입력하는 것만 큼 간단합니다.
remote$ nc -l localhost 22001 | sh
그러면 ssh 터널의 대상 포트 인 포트 22001에서 수신 대기하는 TCP 서버가 시작되고 수신 된 데이터 (아마도 쉘 명령)를 targethost쉘 인스턴스로 라우팅합니다 .
local$ cat yourscript.sh | nc localhost 22000
그러면 스크립트 본문이 ssh 터널로 전송되고의 쉘에서 실행됩니다 targethost. ssh 세션을 사용하여 터미널에 스크립트 출력이 표시됩니다.
또한이 시나리오에서 ssh 터널 (1 단계)은 반드시 필요한 것은 아닙니다. 서버를 열고 인터넷을 통해 직접 연결할 수도 있습니다. 그러나 대상 호스트에 직접 연결할 수 없거나 (예 : NAT 뒤에 있음) ssh 암호화가 필요한 경우 터널을 사용해야합니다.
~캐릭터가 줄 바꿈 뒤에 와야하므로 LF ~ C더 나은 시퀀스 일 것입니다.
less일반적인 기본 호출기 인 키워드를 알고 있다면 입력 을하면 거기에 스크롤을 저장할 수있는 검색 을 지원합니다 man ssh /ESCAPE.