ssh -L (hata: bağlama: Adres zaten kullanımda)


48

Oldukça basit, bunun daha önce başıma geldiğini biliyorum. AU hakkında iyi bir cevap bulamadım.

Bağlantı noktaları bağlı bir ssh oturumu çalıştırıyordum:

ssh -L 3000:<server_name>:22

Sadece bağlantımı kaybettim. Aynı komutu kullanarak tekrar bağlanmayı denediğimde aşağıdaki hatayı alıyorum:

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

Bağlantı noktasını yeniden bağlamak için makinemdeki ssh'ı nasıl sıfırlarım? Yerel makinenin sıfırlanması çalışıyor.

Yanıtlar:


66

O limanı ne kullanıyorsa onu öldüremez misin?

 lsof -ti:5901 | xargs kill -9

lsof -ti:5901bağlantı noktasını kullanarak ne olursa olsun bulmak için 5901.

kill -9Limanı kullanan her şeyi öldürmek için her şeyi geç 5901.

Tekrar açmak istediğiniz port ile değiştirin.


Evet, port numarasını, hangi portun engellendiğini değiştirebilirsin. Bunu cevap olarak işaretleyeceğim.
kbuilds

Eğer benim gibi temkinli ve / veya unutkansanız, kendi başınıza koşup, öldürmeden önce sürecin ne olduğunu öğrenmek isteyebilirsiniz. lsof -ti:5901daha sonra geçeceğiniz bir işlem numarası döndürecektirkill -9
sekiz

3
ya 5901 numaralı bağlantı noktasını hiçbir şey kullanmıyorsa (ya da hangi yerel bağlantı noktasını belirlerseniz)?
Michael

sudoSürecin gelip gelmeyeceğini deneyinlsof
zengin hatırlatma

2
kill -9Program tamamen tepkisiz olmadıkça hiçbir sebep yoktur . Süreç hepsi vs. geçici dosyaları kaldırmak, sinyal # 9 (SIGKILL) hemen aynı hizada tamponları, yakın filehandles ve prizlere sürecini bir şans vermeden onu sonlandırır bir süreç Killing yapabilirsiniz kullanırsanız yapmak kill(SIGTERM varsayılan olarak) , kill -1(SIGHUP; hangup) ve kill -2(SIGINT; ne Ctrl + C ne gönderirse), eğer işe yaramazsa ve nihayet kill -9 başka hiçbir şey işe yaramazsa, onu takip eder .
thedudeabides

12

Sanırım hala yerel 3000 limanına bağlı bir şeyin var.

İle bulabilirsin

netstat -tulpn | grep 3000 

ve sonra onu atın. Örneğin makinemde:

[:~] % 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 numaralı bağlantı noktasına (vnc sunucusu) bağlanan ve bekleyen işlemi doğru olarak tanımlar.

Başka bir yararlı komut

fuser 3000/tcp 

... sudoeğer limanı açan sürecin sahibi değilseniz, hepsiyle birlikte çalışmanız gerekebilir .


Cevap için teşekkürler. Sorunu yeniden oluşturabilecek miyim diye görmek için araştırmam gerekecek. 3000 numaralı bağlantı noktasını dinleyebilecek tek uygulama, bağlantısı kesilen eski ssh oturumu idi. Kullanıcım bu işleme sahipti, bu yüzden bir koştum killall sshve öldürebileceğimi sandım . Sanırım durum bu değil
kbuilds

Kullanımı hatırlattığınız için teşekkürler sudo- eksik olan buydu.
ACV

5

Aşağıdakileri yaparak yeniden oluşturup düzeltebildim:

  • İşlemlerinizi listeleyecek bir şey açın ( ps -ae)
  • sh( kill <proc_number>) Adlı süreci öldür

Sonra ssh bağlantısını yeniden açın

Alternatif olarak, ile başardım:

killall ssh

Yerel makinedeki terminalde


2

bir yarışmacı daha: ss

Bu şekilde kullanılabilir: ss -ltp | grep 30003000 numaralı bağlantı noktasını dinleyen programı bulmak için

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.