이미 설정된 SSH 채널 사용


50

두 컴퓨터 사이에 이미 ssh 연결이 설정되어 있습니다.

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

답변:


56

사전에 계획하고 있다면 OpenSSH의 최신 버전으로 매우 간단합니다.

마스터 연결을 처음으로 엽니 다. 후속 연결의 경우 기존 마스터 연결을 통해 슬레이브 연결을 라우팅하십시오. 에서 ~/.ssh/config자동으로 연결 공유를 설정 하십시오 .

ControlMaster auto
ControlPath ~/.ssh/control:%h:%p:%r

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


두 번째는 / var / log / secure 또는 /var/log/auth.log에 등록되지 않은 것 같습니다. 그러나 두 번째는 / var / log / wtmp에 등록됩니까?
SOUser

@XichenLi /var/log/secure/var/log/auth.log로그 SSH 연결; 기존 연결에서 피기 백되기 때문에 슬레이브 연결이 나타나지 않습니다. ssh 세션이 터미널을 할당 한 경우 (즉 ssh somehost, 명령이 제공되지 않은 또는 ssh -t), wtmp터미널이 어떻게 나타나는지 (연결을 설정하는 데 사용 된 방법, 터미널 에뮬레이터 응용 프로그램,…
Gilles 'SO- 악마 그만'

2
ControlPersist 600소켓이 자동으로 삭제되기 전에 유휴 상태 인 초 단위의 지연 시간을 사용할 수도 있습니다 . 그렇지 않으면 마스터 연결이 종료되면 자동으로 종료됩니다. 원격으로 일련의 명령 (예 : 다른 폴더에 대한 일련의 rsync 명령)을 실행하는 데 좋지 않습니다.

2
글로벌 구성을 편집하지 않으려 는 경우 SSH 클라이언트 의 옵션 -S(소켓 지정) 및 -M(마스터 연결 작성 )을 사용할 수도 있습니다 .
yankee

22

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 암호화가 필요한 경우 터널을 사용해야합니다.


3
좋은 대답입니다. 기술적으로, 서비스 콘솔에 들어가려면 ~캐릭터가 줄 바꿈 뒤에 와야하므로 LF ~ C더 나은 시퀀스 일 것입니다.
Alexios

@Alexios, 맞아.
ulidtko

놀라운 트릭! 기록을 위해, ssh 매뉴얼 페이지 는 그것에 대한 더 많은 정보를 보여줍니다 ( "ESCAPE CHARACTERS"섹션으로 스크롤)
Carles Sala

@CarlesSala는 또한 less일반적인 기본 호출기 인 키워드를 알고 있다면 입력 을하면 거기에 스크롤을 저장할 수있는 검색 을 지원합니다 man ssh /ESCAPE.
ulidtko

@ulidtko 확실하지만, 아는 한 CLI 명령을 SO 주석에 연결할 수 없으므로 HTML 매뉴얼 페이지가 더 나은 옵션이라는 것을 알았습니다. ;-)
Carles Sala
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.