ssh -L (오류 : 바인드 : 이미 사용중인 주소)


48

아주 간단합니다. 이전에 이런 일이 발생했음을 알고 있습니다. AU에서 좋은 답변을 찾을 수 없습니다.

포트가 바인딩 된 ssh 세션을 실행 중이었습니다.

ssh -L 3000:<server_name>:22

방금 연결이 끊어졌습니다. 동일한 명령을 사용하여 다시 연결하려고하면 다음 오류가 발생합니다.

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 3000

포트를 다시 바인딩 할 수 있도록 내 컴퓨터에서 ssh를 어떻게 재설정합니까? 로컬 머신 재설정이 작동합니다.

답변:


66

그 포트를 사용하는 것을 죽일 수는 없습니까?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901port를 사용하는 모든 것을 찾으십시오 5901.

kill -9port를 사용하고 있던 것을 죽이려 면 모든 것을 전달하십시오 5901.

다시 열고 자하는 포트로 교체하십시오.


예, 포트 번호를 차단중인 포트로 변경할 수 있습니다. 나는 이것을 대답으로 표시 할 것입니다.
kbuilds

나처럼 조심스럽고 잊어 버린 경우 lsof를 자체적으로 실행하고 프로세스를 종료하기 전에 프로세스를 확인하는 것이 좋습니다. lsof -ti:5901프로세스 번호를 반환합니다. 그러면 프로세스 번호가 다음과 같이 전달됩니다.kill -9
octern

3
포트 5901을 사용하지 않는 포트 (또는 지정하는 로컬 포트)는 무엇입니까?
Michael

sudo프로세스가 진행되지 않는 경우 시도lsof
풍부한 remer

2
kill -9프로그램이 완전히 응답하지 않는 한 이유가 없습니다 . 프로세스가 모두 등 임시 파일을 제거, 신호 # 9 (SIGKILL) 즉시 다량 버퍼, 가까운 파일 핸들과 소켓 과정에게 기회를주지 않고 그것을 종료와 프로세스를 죽이는 수 있습니다 당신이 사용하는 경우 수행 kill(SIGTERM에 기본값) , 뒤에 kill -1(SIGHUP; hangup) 및 kill -2(SIGINT; Ctrl + C가 보내는 것)이 작동하지 않으면 마지막으로 kill -9 아무것도 작동하지 않는 경우 .
TheDudeAbides

12

여전히 로컬 포트 ​​3000에 연결된 것이 있다고 가정합니다.

당신은 그것을 찾을 수 있습니다

netstat -tulpn | grep 3000 

그런 다음 폐기하십시오. 예를 들어 내 컴퓨터에서 :

[:~] % netstat -tulpn | grep 5900
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:5900            0.0.0.0:*               LISTEN      2547/vino-server
tcp6       0      0 :::5900                 :::*                    LISTEN      2547/vino-server

포트 5900 (vnc 서버)에서 대기 중이고 연결된 프로세스를 올바르게 식별합니다.

또 다른 유용한 명령은

fuser 3000/tcp 

... sudo포트를 여는 프로세스를 소유하지 않은 경우 모두 실행해야 할 수도 있습니다 .


답변 해주셔서 감사합니다. 문제를 재현 할 수 있는지 확인하기 위해 조사해야합니다. 포트 3000에서 수신 할 수 있었던 유일한 응용 프로그램은 연결이 끊어진 이전 ssh 세션이었습니다. 내 사용자가 프로세스를 소유했기 때문에 실행할 수 killall ssh있고 죽을 것이라고 생각했습니다. 사실이 아닌 것 같습니다
kbuilds

미리 알림을 사용해 주셔서 감사합니다 sudo. 이것이 내가 놓친 것입니다.
ACV

5

다음을 수행하여 다시 작성하고 수정할 수있었습니다.

  • 프로세스를 나열 할 무언가를 엽니 다 ( ps -ae)
  • sh( kill <proc_number>) 라는 프로세스를 종료하십시오.

그런 다음 SSH 연결을 다시여십시오.

또는 나는 다음과 같이 성공했습니다.

killall ssh

로컬 머신의 터미널에서


2

하나 더 도전자 : ss

다음과 같이 사용할 수 있습니다 : ss -ltp | grep 3000포트 3000에서 청취중인 프로그램 찾기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.