Як встановити ssh кожен раз, щоб спробувати не тільки порт 22, але і вторинний порт?


9

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

Чи є спосіб налаштувати ssh, щоб спробувати підключитися і до порту 22, і до порту 5492, якщо порт 22 не працює?


1
Я вважаю за краще замість того, щоб захищати через невідомість, налаштовувати VPN і взагалі не мати відкритих ssh-портів до Інтернету.
Rui F Ribeiro

2
@RuiFRibeiro Я згоден, що це не більш безпечно. Однак, це дозволяє зменшити шум у файлах журналів. Можна також використовувати стукування порту для зменшення спроб входу, що збільшує безпеку.
Ned64

2
@RuiFRibeiro Чи надійніше VPN-сервер, ніж SSH-сервер?
Райлі

Все залежить від реалізації. У своїй колишній роботі я визначив 2 записи VPN для надмірності, і жодної sshприсутності зовні.
Rui F Ribeiro

2
Безпека від невідомості - це хороший ДОПОМОГА прошарок, який є найкращим для налаштування, особливо якщо мова йде про умовно-зловживаючих нападників.
rackandboneman

Відповіді:


11

Ви можете обгорнути сценарій оболонки навколо, sshале sshсам цього не зробить.

Один із способів використання функції bash ~/.bashrc:

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

До речі, рекомендується використовувати rootзарезервовані порти для системних служб, наприклад ssh, щоб уникнути того, щоб користувачі не мали процесу, який слухає, скажімо, порт 5492. Інакше вони можуть грати людиною посередині і, можливо, фіксувати дані для входу. Отже, використовуйте порт <1024.


1
Це чудове рішення. Також чудова нота про порти!
Райлі

5
Зверніть увагу, що друге з'єднання буде здійснено, навіть якщо перше буде успішним, якщо команда, що виконується, sshповертається не нульовою. Тривіальним прикладом може бути ssh user@server false.
Kusalananda

1
@Kusalananda Спасибі, я вже писав command. Просто хотів уникнути рекурсії, як ви правильно здогадалися.
Ned64

Проблему, яку згадує @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

1
if-then-else в .ssh / config? Я б не повірив !!
Архемар

1

Ви можете використовувати функцію підстановки ~.ssh/config, додавши цей запис у свій список:

Host *
Port 5492

Але це не повернеться до 22 само собою.

Якщо поставити його в кінці, ви все одно можете змінити його для тих хостів, якщо вам знадобиться 22, поставивши над ним інше значення. (І ви завжди можете змінити це в командному рядку.)

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