Como configurar o ssh para tentar não apenas a porta 22, mas a porta secundária toda vez?

9

Como parte do meu esforço para reduzir o ruído em logs e reduzir um pouco a capacidade de descoberta (e além do fail2ban, permitindo somente autenticação de chave pública etc.) eu rotineiramente altero as portas sshd em servidores que configuro para uma porta diferente, digamos 5492. Atualmente eu ou adiciono -p 5492 ao meu comando ssh, ou adiciono a porta para cada servidor específico no meu ssh_config .

Existe uma maneira de configurar o ssh para tentar se conectar à porta 22 e à porta 5492 se a porta 22 não funcionar?

    
por Riley 17.02.2018 / 10:48

3 respostas

11

Você pode envolver um script de shell em torno de ssh , mas ssh em si não fará isso.

Uma maneira de usar uma função bash é essa (colocar em ~/.bashrc ):

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

A propósito, é recomendado usar root -reserved ports para o sistema serviços como ssh para evitar que os usuários tenham um processo que ouça, digamos, a porta 5492. Eles podem, de outra forma, interpretar o homem no meio e, possivelmente, capturar dados de login. Então, use uma porta < 1024.

    
por 17.02.2018 / 10:54
10

ssh em si pode fazer isso via Match documentado em ssh_config(5) embora a documentação seja um pouco esparsa em exemplos. Este formulário pode ser adequado se alguém quiser empurrar a complexidade para a configuração do SSH, embora seja restrito pelas limitações da sintaxe ssh_config(5) e possa requerer algum trabalho com o resultado desejado. Notavelmente, a porta personalizada pode não ser configurada ou ser configurada incorretamente a partir da tentativa Match anterior. É por isso que, abaixo, ele é definido duas vezes quando testado, ou uma vez para o padrão, e não é definido ao estabelecer os padrões canônicos.

# 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 meramente verifica se algo responde na porta especificada e pode parecer

#!/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
    
por 17.02.2018 / 17:22
1

Você pode usar a função curinga de ~.ssh/config , colocando essa entrada em sua lista:

Host *
Port 5492

Mas isso não vai voltar para 22 por si só.

Se você colocá-lo no final, você ainda pode substituí-lo para os hosts que você precisa 22, colocando um valor diferente acima dele. (E você sempre pode sobrescrevê-lo na linha de comando).

    
por 17.02.2018 / 15:38