Como SSH em uma porta diferente de 22

151

Eu tenho dois computadores atrás do mesmo roteador. Vamos chamá-los de A e B.

A pode SSH para B da seguinte maneira: ssh usr@<internal ip of computer>

B pode SSH para A fazendo o mesmo, mas o IP externo deve ser usado. Encaminhei a porta 22 do meu roteador para o IP do computador A, para que tudo faça sentido para mim.

No entanto, também desejo encaminhar a porta 26 para o computador B e o SSH de fora da rede usando o IP externo para ambos, mas especificando a porta 22 ou 26, para selecionar efetivamente qual computador usar.

Tentei permitir a porta 26 através de SAÍDA de iptablesA e ENTRADA de B, mas isso não pareceu funcionar. Também encaminhei a porta 26 para o IP interno de B (através do roteador), como fiz com 22 para A.

Aqui está o que recebo quando tento SSH de A para B usando o IP externo e a porta 26:

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

Versões:

  • A = OpenSSH_5.9p1 Debian-5ubuntu1, OpenSSL 1.0.1 14 de março de 2012
  • B = OpenSSH_6.0p1 Debian-4, OpenSSL 1.0.1c 10 de maio de 2012

A tem 12.04 Ubuntu, B é um Raspberry Pi com Raspbian.

EDIT: Algo que eu esqueci de colocar em: Eu tentei mudar o arquivo SSH config (eu achei que é /etc/ssh/ssh_config) Eu uncommented (excluída a #) a linha com Porte mudou 22para 26. Ainda me deu a mensagem de conexão recusada. (Reiniciei sem sucesso.)

Gary
fonte
Você tem SSH em execução na porta 22 ou 26 na segunda máquina?
Nerdfest
1
Observe que / etc / ssh / ssh_config é a configuração do cliente ssh. Onde / etc / ssh / sshd_config é a configuração do daemon ssh.
Steakunderscore

Respostas:

45

Parece que você não está executando o SSH na porta 26 na segunda máquina. Você pode alterar o número da porta nessa máquina para 26.

Edite /etc/ssh/sshd_confige não esqueça de reiniciar o SSH ou deixá-lo em 22, mas encaminhe a porta 26 no roteador para a porta 22 na segunda máquina. Além disso, não esqueça de alterar as configurações de firewall na segunda máquina para permitir a conexão.

Nerdfest
fonte
Ahhh ... então o sshd_config deve mudar, não o ssh_config?
Gary
2
Corrigir. sshd é o serviço (d é para daemon). Edite o arquivo de configuração (com o sudo gedit) e reinicie o serviço com "sudo service ssh restart".
Nerdfest
2
Resolveu o problema. Também não foi necessário alterar as configurações do firewall.
Gary
372

Se você estiver no sistema Linux e desejar conectar-se a um servidor SSH na porta 26, poderá usar o seguinte comando.

ssh [email protected] -p 26

Nota:

  1. Substitua o IP do servidor pelo endereço IP ou nome DNS do seu servidor.
  2. Mude o número da porta conforme definido.
  3. se você estiver usando a porta SSH personalizada, a mesma porta será permitida para a conexão de entrada e saída no firewall, caso contrário, a conexão não será estabelecida.
Shiv Singh
fonte
17
Este deve ser marcado como correto.
ken_oy
1
Concordo que esta é a resposta correta. Este é simples e vai direto ao ponto.
M4l490n
1
@gary marcar este como correta
poesia tristeza
7
Não, essa NÃO é a resposta correta. O OP teve problemas com o daemon não escutando na porta desejada. Ele claramente pediu ajuda com o servidor SSH e / ou configuração NAT, mas a resposta atual ignora a postagem original e descreve a opção de comando do cliente já conhecida pelo OP. Eu me pergunto como essa resposta recebeu tantos votos positivos.
Nnovich-OK
2
Isso está correto para a maioria, mas não está correto para o problema do OP.
Ultrasonic54321
9

Eu uso a porta 22 apenas para o acesso ssh da intranet.

Para acessar via internet, eu uso uma porta personalizada (incomum). Isso tem o benefício de reduzir a carga gerada por crianças de script que estão varrendo a porta 22 em busca de "nomes de usuário conhecidos".

Os processos sshd externos são controlados xinetde executados em paralelo ao processo interno sshd . No exemplo a seguir, uso a porta 12345:

Você pode alterar isso para qualquer número de porta livre disponível no seu sistema. Talvez um valor mais alto torne também um pouco mais improvável que essa porta seja verificada por uma "verificação rápida de porta" .

A xinetdconfiguração é:

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
}

O arquivo /etc/ssh/external-ssdh.configpode ser uma cópia da sua sshdconfiguração usual . Verifique se as seguintes instruções estão configuradas:

Port 12345
AddressFamily inet

Sugiro também impor a autenticação de chave pública e desativar a autenticação de senha para o acesso à Internet:

PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
H.-Dirk Schmitt
fonte
7

As portas de escuta também podem ser vinculadas a endereços IP

/ etc / ssh / sshd_config:

ListenAddress 10.10.10.10:22
ListenAddress 20.20.20.20:4444
OasisInDesert
fonte
isso deve ser um comentário, não uma resposta.
Pablo Pazos 23/10
1

Como expliquei em uma resposta relacionada , o cliente ssh permite especificar o formato URI como ssh://user@host:1234. Por exemplo:

ssh  ssh://[email protected]:2222

onde 2222 é o número da porta. Substitua o número da porta que você pretende usar. Obviamente, lembre-se de que, para conectar-se à porta especificada, o servidor ssh (no host ao qual você está tentando se conectar) precisa escutar na porta especificada em primeiro lugar

Sergiy Kolodyazhnyy
fonte
0

Não é uma boa idéia executar o ssh na porta padrão (TCP / 22), nem encaminhar do WAN IP 22 para qualquer porta que esteja usando o servidor ssh no IP da LAN.

Em um sentido mais geral, a conexão com o serviço ssh-server deve estar ouvindo nessa porta. Voce tem que

  1. Edite em /etc/ssh/sshd_config( observe o d ) de #Port 22até Port 26. Ou seja, descomente e altere a porta. Talvez melhor que 26 seja algo aleatoriamente acima , como 42895.
  2. Reinicie o serviço ssh-server

    sudo systemctl restart sshd.service
    

Então, a partir do ssh-client, você poderá se conectar

ssh user@serverNameOrIP -p 42895

Bônus: mosh

Se o pacote mosh estiver instalado no servidor, você utilizará

mosh --ssh="ssh -p 42895" serverNameOrIP
Pablo A
fonte