SSH 전달 포트를 제거하는 방법


52

내가 사용하는 ssh -L 10002:192.168.0.30:10002 192.168.1.135포트 포워딩을 설정하지만, 지금은 그것을 제거해야합니다.

어떻게해야합니까?


동일한 명령을 다시 실행하고 Warning: remote port forwarding failed for listen port메시지를 수신 하는 새 ssh 세션을 시작하면 포트가 여전히 전달되고 있음을 종종 알 수 있습니다.
GabLeRoux

답변:


56

Linux를 사용하는 경우 다음을 수행하여 프로세스를 종료 할 수 있습니다.

ps aux | grep ssh

그런 다음 사용

kill <id>

프로세스를 종료합니다.

kill 명령이 실패하면 시도해 볼 수 있습니다

kill -9 <id>

31
제발 호 호 호, 제발 제발 하지 사용 kill -9방금 시도했습니다 때까지 kill. 많은 프로세스에는 신호 처리기가있어 리소스 사용을 정리하고 연결을 완전히 닫고 다른 사전 종료 작업을 수행합니다. -9를 사용하여 종료하면 정리하지 않고 프로세스가 즉시 종료됩니다. 없이 -9 죽이는 것입니다 대부분의 시간을 작동합니다.
Doug Harris

17
kill -9이유없이 산탄 총을 사용하여 모기를 죽이는 것과 같습니다. :)
Darren Hall

2
나는 보통 하나의 라이너를 수행합니다 pgrep ssh | xargs kill. -9실제로 아무것도 사용하지 마십시오
GabLeRoux

2
@GabLeRoux 즉 ssh, 명령 이 하나만 있거나 ssh실행중인 모든 명령 이 종료 된 것으로 가정합니다 . 이것은 일반적으로 좋은 가정은 아닙니다.
tripleee 2017

2
@Avamander 저는 ssh여러 원격 서버의 여러 인스턴스에 항상 연결합니다 . 예를 들어, Emacs Tramp 모드 ssh는 원격 버퍼를 방문 할 때 장면 뒤에서 연결을 엽니 다 . 어떤 사람들은 비슷한 작업을 수행하는 사용자 공간 파일 시스템을 사용합니다. 전혀 드문 일이 아닙니다. 실제로 단일 사용자, 단일 ssh인스턴스를 소수 프린지 사용 사례로 가정합니다. 그것이 당신에게 도움이된다면, 당신에게 좋지만 좋은 조언은 아닙니다.
tripleee

19

ssh 멀티플렉싱을 사용하는 경우 ssh 프로세스를 종료하는 것은 종종 바람직하지 않으며 (해당 호스트와 열려있는 모든 연결을 종료) "멀티플렉싱 된 세션에서 이스케이프를 사용할 수 없으므로"이스케이프에 쉽게 액세스 할 수 없습니다. 올바른 방법은 취소하려는 전달 명령의 아날로그를 실행하지만을 추가하는 것 -O cancel입니다. 예를 들어 :

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

세션을 종료하지 않고이 포트 전달을 비활성화합니다. 192.168.1.135 연결에 ssh 멀티플렉싱을 사용하는 경우에만 다시 작동합니다 .


나는 이것이 존재해서 매우 기쁘고 그것을 발견했다.
galva

2
이것이 가장 좋은 해결책입니다. 마스터를 죽이려면 그냥 실행하십시오 ssh -O exit 192.168.1.135.
Orient

멀티플렉싱 세션 이 아닌 경우 exhuma의 탁월한 답변을 참조하십시오! (내 오타를 잡은 것에 대해 a3nm에게 감사드립니다.)
Alan De Smet

대박! 이것은 정답입니다!
Truong Nguyen

12

"탈출 키"(보통 ~) 다음에 C를 사용하여 연결 상태를 확인할 수 있습니다. 연결을 끊지 않고도 터널을 제거 할 수 있습니다.


1
이것의 세부 사항을 알고 싶습니다. SSH를 입력 한 후에 터널을 추가 할 수 있지만 아직 터널을 내리는 방법을 찾지 못했습니다.
carestad

9
CLI 모드에 있으면 도움을받을 수 있습니다. -KL은 -L의 oppsite이고, -KR은 -R의 oppsite이고 -KD는 -D의 oppsite입니다. "이스케이프 키"(~) 다음에 #을 표시하면 터널이 표시됩니다.
Jimmy Hedman

1
@JimmyHedman 댓글을 추가하여 답변을 추가로 수정하고 싶을 수도 있습니다. 모든 것을 더 읽기 쉽게 만듭니다. 때로는 주석이 숨겨져 있습니다 (너무 많은 경우).
exhuma

12

이미 실행중인 SSH 세션에서 전달 된 포트를 취소하는 방법 :

  1. ~+ C(물결 + 대문자 C)를 누릅니다.
  2. 유형 -KL port
  3. 엔터 키를 치시오

당신은 이것을 볼 수 있습니다 :

ssh> -KL 10002
Canceled forwarding.

7

~C(대문자 "C")를 입력하여 대화식 콘솔에 들어갈 수 있습니다 . 이를 통해 포트 전달을 동적으로 추가 및 제거 할 수 있습니다 (몇 가지 사항 포함).

이 순서는 캐리지 리턴 / 개행 직후 에 와야 합니다. 따라서 의심의 여지없이 Enter~C(순서대로) 입력하십시오.

콘솔에 문자가 표시되지 않으면 올바르게 수행하는 것입니다. :)

이제 ssh>프롬프트가 나타납니다.

포트를 제거하려면 간단히 -KL 10002다음을 입력하십시오 Enter( 10002전달 된 포트는 어디에 있습니까 ).

새로운 전진을 추가하는 반대는 다음과 같이 수행 할 수 있습니다 (시작부터 끝까지).

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter


멀티플렉싱 연결 이 아닌 경우 정답 입니다. 그렇다면으로 바운스됩니다 ~C escape not available to multiplexed sessions. 이 경우 a3nm의 훌륭한 답변을 참조하십시오.
Alan De Smet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.