Как SSH на порт, отличный от 22


151

У меня есть два компьютера за одним маршрутизатором. Давайте назовем их А и Б.

A может SSH к B следующим образом: ssh usr@<internal ip of computer>

B может использовать SSH для A, делая то же самое, но должен использоваться внешний IP. Я перенаправил порт 22 моего маршрутизатора на IP-адрес компьютера A, так что все это имеет для меня смысл.

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

Я попытался разрешить порт 26 через OUTPUT 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 г.

У Ubuntu 12.04, B - Raspberry Pi с Raspbian.

РЕДАКТИРОВАТЬ: что-то, что я забыл вставить: я попытался переключить файл конфигурации 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
Решил проблему. Не нужно было менять настройки брандмауэра.
Гэри

372

Если вы работаете в системе Linux и хотите подключиться к SSH-серверу через порт 26, вы можете использовать следующую команду.

ssh user@192.168.1.1 -p 26

Примечание:

  1. Замените IP-адрес сервера на IP-адрес или DNS-имя вашего сервера.
  2. Измените свой номер порта, как вы установили.
  3. если вы используете настраиваемый порт SSH, то для исходящего будет разрешен тот же самый порт, что входящее соединение на брандмауэре, иначе соединение не будет установлено

17
Этот должен быть помечен как правильный.
ken_oy

1
Я согласен, что это правильный ответ. Этот прост и подходит к делу.
m4l490n

1
@ Гэри пометить это как правильный
поэзия скорби

7
Нет, это не правильный ответ. У OP возникли проблемы с тем, что демон не прослушивает нужный порт. Он явно просил помочь с настройкой SSH-сервера и / или NAT, но текущий ответ игнорирует исходное сообщение и описывает опцию команды клиента, уже известную OP. Интересно, как этот ответ получил так много голосов.
nnovich-OK

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-адресами

/ И т.д. / 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-сервер на LAN 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.