Как настроить ssh на то, чтобы каждый раз пробовать не только порт 22, но и вторичный порт?

9

В рамках моих усилий по снижению шума в журналах и незначительному уменьшению возможности обнаружения (и в дополнение к fail2ban, разрешающему только аутентификацию с открытым ключом и т. Д.) Я обычно меняю sshd-порты на серверах, которые я настроил на другой порт, скажем, 5492. В настоящее время Я либо добавляю -p 5492 к моей команде ssh, либо добавляю порт для каждого конкретного сервера в мой ssh_config.

Есть ли способ настроить ssh для подключения к порту 22 и к порту 5492, если порт 22 не работает?

Райли
источник
1
Я предпочитаю вместо обеспечения безопасности через мрак, настройку VPN и вообще не открывать ssh-порты для Интернета.
Руи Ф Рибейру
2
@RuiFRibeiro Я согласен, что это не более безопасно. Это, однако, подавляет шум в файлах журнала. Можно также использовать стук портов, чтобы уменьшить количество попыток входа в систему, что повышает безопасность.
Нед64
2
@RuiFRibeiro Является ли VPN-сервер более безопасным, чем SSH-сервер?
Райли
Все зависит от реализации. В моей прежней работе я определил 2 записи VPN для избыточности, и никакого sshвнешнего присутствия.
Руи Ф Рибейро
2
Безопасность от неясности - это хороший ДОПОЛНИТЕЛЬНЫЙ слой поверх хорошей установки, особенно когда речь идет о оппортунистических злоумышленниках.
rackandboneman

Ответы:

11

Вы можете обернуть сценарий оболочки, sshно sshсам не сделает этого.

Один из способов использования bash-функции заключается в следующем ~/.bashrc:

function ssh() { command ssh -p 22 "$@" || command ssh -p 5492 "$@"; }

rootМежду прочим, рекомендуется использовать зарезервированные порты для системных служб, например ssh, чтобы пользователи не могли прослушивать процессы, скажем, на порту 5492. В противном случае они могут воспроизвести человека посередине и, возможно, получить данные для входа. Итак, используйте порт <1024.

Ned64
источник
1
Это отличное решение. Также отличная заметка о портах!
Райли
5
Обратите внимание, что второе соединение будет выполнено, даже если первое будет успешным, если команда, выполненная с помощью, sshвозвращает ненулевое значение. Тривиальный пример будет ssh user@server false.
Кусалананда
1
@Kusalananda Спасибо, я написал commandсейчас. Просто хотел избежать рекурсии, как вы уже догадались.
Нед64
Проблему, о которой упоминает @Kusalananda, можно (в основном) избежать, проверив конкретное состояние выхода ssh- если есть ошибка ssh (в отличие от сбоя удаленной команды), он выйдет со статусом 255. Таким образом, command ssh -p 22 "$@"; if [ "$?" -eq 255 ]; then command ssh -p 5492 "$@"; fiдолжно работать.
Гордон Дэвиссон
10

sshСам может сделать это с помощью Matchдокументированных в документах, ssh_config(5)хотя в документации несколько примеров. Эта форма может быть подходящей, если кто-то хочет внедрить сложность в конфигурацию SSH, хотя она ограничена ограничениями ssh_config(5)синтаксиса и может потребовать некоторого вмешательства для желаемого результата. Примечательно, что пользовательский порт не может быть установлен или может быть установлен неправильно с предыдущей Matchпопытки. Вот почему ниже он устанавливается дважды при проверке или один раз по умолчанию и не устанавливается при установлении канонических значений по умолчанию.

# here we set the defaults for the host (no port!)
Match !canonical host testhost
  CanonicalizeHostname yes
  Hostname 192.0.2.42
  IdentityFile ~/.ssh/id_blahblah
  ...
# port available?
Match canonical host 192.0.2.42 exec "is-ssh-up %h 2222"
  Port 2222
# or the default port
Match canonical host 192.0.2.42
  Port 22

is-ssh-up просто проверяет, реагирует ли что-либо на данный порт и может ли

#!/usr/bin/env expect
package require Tcl 8.5
if {[llength $argv] < 2} {
   puts stderr "Usage: is-ssh-up host port"
   exit 1
}
puts stderr "is-ssh-up: DEBUG trying $argv"
set socket [socket -async [lindex $argv 0] [lindex $argv 1]]
chan event $socket readable [list exit 0]
after 3000 [list exit 1]
vwait godot
thrig
источник
1
если-то-еще в .ssh / config? Я бы не поверил в это !!
Архемар
1

Вы можете использовать функцию подстановки ~.ssh/config, добавив эту запись в свой список:

Host *
Port 5492

Но это не вернется к 22 сам по себе.

Если вы поставите его в конце, вы все равно можете переопределить его для тех хостов, где вам нужно 22, поставив другое значение над ним. (И вы всегда можете переопределить его в командной строке.)

Пауло Эберманн
источник