Як SSH на інший порт, ніж 22


150

У мене два комп'ютери позаду одного маршрутизатора. Назвемо їх A і B.

А може бути SSH до B таким чином: ssh usr@<internal ip of computer>

B можна SSH до A, роблячи те саме, але зовнішній IP повинен бути використаний. Я переслав порт 22 свого маршрутизатора на IP комп'ютера A, так що для мене все має сенс.

Однак я хочу також перенести порт 26 на комп'ютер B і SSH з-за меж мережі, використовуючи зовнішній IP для обох, але вказавши або порт 22, або 26, щоб ефективно вибрати, який комп'ютер використовувати.

Я спробував дозволити порт 26 через вихідний вихід iptablesна A і INPUT B, але, схоже, це не спрацювало. Я також переслав порт 26 на внутрішній IP B (через маршрутизатор), як це робив з 22 для A.

Ось що я отримую, коли намагаюся SSH від A до B, використовуючи зовнішній IP та порт 26:

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

Версії:

  • A = OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 березня 2012 року
  • B = OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 травня 2012 року

A має 12,04 Ubuntu, B - це Raspberry Pi з Raspbian.

EDIT: Щось, що я забув вкласти: я спробував переключити конфігураційний файл SSH (я виявив, що він є /etc/ssh/ssh_config), я прокоментував (видалив #) рядок Portі змінив 22на 26. Це дало мені зв’язок відмовився досі. (Я перезавантажив безрезультатно.)


Чи буде юю SSH працює на порту 22 або 26 на другій машині?
Nerdfest

1
Зауважте, що / etc / ssh / ssh_config - це конфігурація ssh-клієнта. Де як / etc / ssh / sshd_config - це конфігурація демона ssh.
steakunderscore

Відповіді:


45

Схоже, ви не працюєте з SSH на порту 26 на другій машині. Ви можете або змінити номер порту на цій машині на 26.

Або редагуйте, /etc/ssh/sshd_configі не забудьте перезапустити SSH або залишити його на 22, але передати порт 26 на маршрутизаторі до порту 22 на другій машині. Крім того, не забудьте змінити параметри брандмауера на другому пристрої, щоб дозволити з'єднання пройти.


А-а-а ... значить, sshd_config повинен змінитися, а не ssh_config?
Гері

2
Правильно. sshd - послуга (d - для демон). Відредагуйте конфігураційний файл (з sudo gedit), після чого перезапустіть службу за допомогою "sudo service ssh restart".
Nerdfest

2
Вирішили проблему. Також не потрібно було змінювати параметри брандмауера.
Гері

370

Якщо ви працюєте в системі Linux і хочете підключитися до SSH-сервера на порту 26, ви можете скористатися наступною командою.

ssh user@192.168.1.1 -p 26

Примітка:

  1. Замініть IP-адресу сервера на IP-адресу або DNS-ім’я вашого сервера.
  2. Змініть номер порту, як ви встановили.
  3. якщо ви використовуєте спеціальний порт SSH, тоді цей самий порт найбільше дозволений для вихідного, вхідного з'єднання на брандмауері, інакше з'єднання не встановиться

17
Це слід позначити як правильне.
ken_oy

1
Я згоден, це правильна відповідь. Цей простий і йде до суті.
m4l490n

1
@gary відзначте це як правильне
скорботна поезія

7
Ні, це НЕ правильна відповідь. У OP були проблеми з демоном, який не слухав потрібний порт. Він чітко попросив допомоги з налаштуванням сервера SSH та / або NAT, але поточна відповідь ігнорує оригінальний пост та описує варіант клієнтської команди, який уже відомий ОП. Цікаво, як ця відповідь отримала стільки відгуків.
nnovich-ОК

2
Це правильно для більшості, але це неправильно для проблеми ОП.
Ultrasonic54321

9

Я використовую порт 22 тільки для доступу до інтрамережі ssh.

Для доступу через Інтернет я використовую користувальницький (незвичний) порт. Це має перевагу в тому, що я знижую завантаження, створене дітьми сценаріїв, які сканують порт 22 на "добре відомі імена користувачів".

На зовнішніх процесах SSHd контролюються xinetdі працюють паралельно з внутрішнім sshd процесом. У наступному прикладі я використовую порт 12345:

Ви можете змінити це на будь-який доступний номер безкоштовного порту у вашій системі. Можливо, більш високе значення зробить це також трохи більш малоймовірним, що цей порт сканується "швидким скануванням портів" .

xinetdконфігурація:

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
}

Цей файл /etc/ssh/external-ssdh.configможе бути копією звичайної sshdконфігурації. Переконайтеся, що такі оператори налаштовані:

Port 12345
AddressFamily inet

Я також пропоную застосувати аутентифікацію відкритих ключів та відключити автентифікацію пароля для доступу в Інтернет:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no

7

Порти прослуховування також можуть бути важко пов'язані з IP-адресами

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444

це має бути коментар, а не відповідь.
Пабло Пацос

1

Як я пояснив у відповідній відповіді , ssh-клієнт дозволяє вказати формат URI як ssh://user@host:1234. Наприклад:

ssh  ssh://myuser@mydomain.com:2222

де 2222 - номер порту. Замініть номер порту, який ви хочете використовувати замість цього. Звичайно, пам’ятайте, що для підключення до заданого порту ssh-сервера (на хості, до якого ви намагаєтеся підключитися) потрібно слухати в першу чергу вказаний порт


0

Не є гарною ідеєю запускати ssh на порт за замовчуванням (TCP / 22), а також переходити з WAN IP 22 на будь-який порт, що використовує ssh-сервер у локальній мережі IP.

У більш загальному сенсі підключення до служби ssh-сервера повинно прослуховувати цей порт. Ти мусиш

  1. Редагувати /etc/ssh/sshd_config( примітка d ) від #Port 22до Port 26. Тобто, коментуйте і змініть порт. Можливо, краще за 26 було б щось випадковим чином вище , як, наприклад, 42895.
  2. Перезавантажте сервіс ssh-сервера

    sudo systemctl restart sshd.service
    

Тоді від ssh-клієнта ви зможете підключитися

ssh user@serverNameOrIP -p 42895

Бонус: mosh

Якщо пакет mosh встановлений на сервері, який ви використовуєте

mosh --ssh="ssh -p 42895" serverNameOrIP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.