Jak korzystać z SSH na porcie innym niż 22

150

Mam dwa komputery za tym samym routerem. Nazwijmy je A i B.

Puszka SSH do B w następujący sposób: ssh usr@<internal ip of computer>

B może wykonać SSH do A, robiąc to samo, ale należy użyć zewnętrznego adresu IP. Przekierowałem port 22 mojego routera na adres IP komputera A, aby wszystko miało dla mnie sens.

Chcę jednak również przekierować port 26 na komputer B i SSH spoza sieci, używając zewnętrznego adresu IP dla obu, ale określając port 22 lub 26, aby skutecznie wybrać, którego komputera użyć.

Próbowałem zezwolić na port 26 przez OUTPUT z iptablesA i INPUT z B, ale to nie działało. Przekierowałem również port 26 na wewnętrzny adres IP B (przez router), podobnie jak w przypadku 22 dla A.

Oto, co otrzymuję, gdy próbuję SSH z A do B przy użyciu zewnętrznego adresu IP i portu 26:

ssh: connect to host xx.xx.xxx.xx port 26: Connection refused.

Wersje:

  • A = OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 marca 2012
  • B = OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 maja 2012 r

A ma 12.04 Ubuntu, B to Raspberry Pi z Raspbian.

EDYCJA: Coś, o czym zapomniałem wstawić: Próbowałem zmienić plik konfiguracyjny SSH (okazało się, że jest /etc/ssh/ssh_config) Odkomentowałem (usunąłem #) linię Porti zmieniłem 22na 26. To wciąż dawało mi komunikat o odmowie połączenia. (Uruchomiłem ponownie bezskutecznie.)

Gary
źródło
Czy masz SSH działający na porcie 22 lub 26 na drugiej maszynie?
Nerdfest,
1
Zauważ, że / etc / ssh / ssh_config jest konfiguracją klienta ssh. Gdzie jako / etc / ssh / sshd_config jest konfiguracja demona ssh.
steakunderscore

Odpowiedzi:

45

Wygląda na to, że nie używasz SSH na porcie 26 na drugim komputerze. Możesz zmienić numer portu na tym komputerze na 26.

Edytuj lub /etc/ssh/sshd_confignie zapomnij zrestartować SSH lub pozostaw go na 22, ale przekieruj port 26 na routerze do portu 22 na drugim komputerze. Nie zapomnij również zmienić ustawień zapory na drugim komputerze, aby umożliwić połączenia.

Nerdfest
źródło
Ahhh ... więc sshd_config musi się zmienić, a nie ssh_config?
Gary
2
Poprawny. sshd to usługa (d jest dla demona). Edytuj plik konfiguracyjny (za pomocą sudo gedit), a następnie uruchom ponownie usługę za pomocą „sudo service ssh restart”.
Nerdfest,
2
Rozwiązać problem. Nie musiałem też zmieniać żadnych ustawień zapory.
Gary
370

Jeśli korzystasz z systemu Linux i chcesz połączyć się z serwerem SSH na porcie 26, możesz użyć następującego polecenia.

ssh [email protected] -p 26

Uwaga:

  1. Zastąp adres IP serwera adresem IP lub nazwą DNS swojego serwera.
  2. Zmień numer portu zgodnie z ustawieniami.
  3. jeśli używasz niestandardowego portu SSH, ten sam port jest najczęściej dozwolony dla połączenia wychodzącego, przychodzącego na zaporze, w przeciwnym razie połączenie nie zostanie nawiązane
Shiv Singh
źródło
17
Ten należy oznaczyć jako poprawny.
ken_oy
1
Zgadzam się, że to poprawna odpowiedź. Ten jest prosty i do rzeczy.
m4l490n
1
@ Gary oznaczy to jako poprawne
poezja smutku
7
Nie, to NIE jest poprawna odpowiedź. OP miał problem z tym, że demon nie nasłuchuje na pożądanym porcie. Wyraźnie poprosił o pomoc w konfiguracji serwera SSH i / lub NAT, ale obecna odpowiedź ignoruje oryginalny post i opisuje opcję polecenia klienta znaną już OP. Zastanawiam się, skąd ta odpowiedź ma tyle głosów poparcia.
nnovich-OK
2
Jest to poprawne dla większości, ale nie jest to właściwe dla problemu OP.
Ultrasonic54321
9

Używam portu 22 tylko do dostępu do intranetowego ssh.

Aby uzyskać dostęp przez Internet, używam niestandardowego (nietypowego) portu. Ma to tę zaletę, że zmniejszam obciążenie generowane przez dzieci skryptów, które skanują port 22 w poszukiwaniu „dobrze znanych nazw użytkowników”.

Do zewnętrznych procesów sshd są sterowane xinetdi działa równolegle do wewnętrznego sshd procesu. W poniższym przykładzie używam portu 12345:

Możesz to zmienić na dowolny dostępny wolny numer portu w systemie. Być może wyższa wartość sprawi, że jest również mało prawdopodobne, że ten port zostanie przeskanowany przez „szybkie skanowanie portu” .

xinetdKonfiguracja jest:

service ssh-external
{
    socket_type = stream
    wait = no
    protocol = tcp
    type = UNLISTED
    user = root
    server = /usr/sbin/sshd
    server_args = -i -f  /etc/ssh/external-sshd.config
    port = 12345
    log_on_failure += USERID
}

Plik /etc/ssh/external-ssdh.configmoże być kopią zwykłej sshdkonfiguracji. Upewnij się, że skonfigurowano następujące instrukcje:

Port 12345
AddressFamily inet

Proponuję również wymusić uwierzytelnianie za pomocą klucza publicznego i wyłączyć uwierzytelnianie za pomocą hasła w celu uzyskania dostępu do Internetu:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
H.-Dirk Schmitt
źródło
7

Porty nasłuchiwania mogą być również powiązane z adresami IP

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444
OasisInDesert
źródło
powinien to być komentarz, a nie odpowiedź.
Pablo Pazos
1

Jak wyjaśniłem w pokrewnej odpowiedzi , klient ssh pozwala na określenie formatu URI jako ssh://user@host:1234. Na przykład:

ssh  ssh://[email protected]:2222

gdzie 2222 to numer portu. Zamiast tego wpisz numer portu, którego zamierzasz użyć. Oczywiście pamiętaj, że aby połączyć się z określonym portem, serwer ssh (na hoście, z którym próbujesz się połączyć) musi przede wszystkim nasłuchiwać na określonym porcie

Sergiy Kolodyazhnyy
źródło
0

Nie jest dobrym pomysłem uruchamianie ssh na domyślnym porcie (TCP / 22), ani przekazywanie dalej z WAN IP 22 do dowolnego portu używającego ssh-server na LAN IP.

W bardziej ogólnym sensie połączenie z usługą ssh-server powinno nasłuchiwać na tym porcie. Musisz

  1. Edytuj na /etc/ssh/sshd_config( zwróć uwagę na d ) od #Port 22do Port 26. To znaczy, odkomentuj i zmień port. Może lepszym niż 26 byłoby coś losowego powyżej , na przykład 42895.
  2. Uruchom ponownie usługę ssh-server

    sudo systemctl restart sshd.service
    

Następnie z klienta ssh będziesz mógł się połączyć

ssh user@serverNameOrIP -p 42895

Premia: mosh

Jeśli pakiet mosh jest zainstalowany na serwerze, użyj go

mosh --ssh="ssh -p 42895" serverNameOrIP
Pablo A.
źródło