web-dev-qa-db-ja.com

ssh -L(エラー:バインド:すでに使用されているアドレス)

とても簡単です。これは以前に私に起こったことを知っています。 AUで適切な答えが見つかりませんでした。

ポートをバインドしてsshセッションを実行していました。

ssh -L 3000:<server_name>:22

接続が切れました。同じコマンドを使用して再接続しようとすると、次のエラーが表示されます。

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

ポートを再びバインドできるように、マシンのsshをリセットするにはどうすればよいですか?ローカルマシンのリセットは機能します。

44
kbuilds

そのポートを使用しているものをすべて殺すことはできませんか?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901は、ポート5901を使用しているものを見つけます。

kill -9にすべてを渡して、ポート5901を使用していたものをすべて削除します。

再度開きたいポートに置き換えます。

62
user974407

ローカルポート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で実行する必要があります。

12
Rmano

次の操作を行うことで、再作成して修正することができました。

  • プロセスをリストするものを開きます(ps -ae
  • shkill <proc_number>)というプロセスを強制終了します

次に、ssh接続を再度開きます

あるいは、私は以下で成功しました:

killall ssh

ローカルマシンのターミナルで

5
kbuilds

もう1つの候補:ss

次のように使用できます。ss -ltp | grep 3000は、ポート3000でリッスンしているプログラムを検索します

2
mnagel