Como o ssh manipula 2 computadores na rede local com o mesmo nome de usuário?

2

Por exemplo, se alguém quiser acessar o bob da conta em uma máquina em uma rede local atrás de um roteador, eles simplesmente digitarão:

$ ssh -p xx [email protected]'

No entanto, como ssh lida com a possibilidade de duas máquinas na rede local terem o mesmo nome de usuário? Existe um sinalizador para diferenciar entre o usuário bob na máquina A versus um usuário diferente bob na máquina B, ou ssh gera um erro?

    
por K. W. Cooper 20.07.2018 / 22:35

3 respostas

17

Por que ssh se preocuparia com a reiteração de nomes de usuários em hosts diferentes? É absolutamente esperado que isso aconteça. Dica: o usuário root é onipresente, não é?

Portanto, a resposta às suas perguntas é: ssh lida com isso da mesma maneira que todo o resto lida com isso: não se importando com qual usuário está sendo referenciado até falar com o host em questão.

Uma expansão simplificada do acima:

A primeira coisa que acontece é que o cliente ssh tenta estabelecer uma conversa com o servidor ssh remoto. Depois que um canal de comunicação é aberto, o cliente procura ver se é um host conhecido (por exemplo, uma entrada está presente em ~/.ssh/known_hosts ) e manipula as coisas corretamente se for um host desconhecido ou um host conhecido com credenciais inválidas (por exemplo, host chave havia mudado).

Agora que tudo o que está fora do caminho e uma linha de comunicação está aberta corretamente entre o ssh server e o cliente, o cliente dirá ao servidor "Eu gostaria de autenticar para o usuário bob ". Naturalmente, o servidor não se importará com nenhum outro bob s na rede; só ele mesmo.

    
por 20.07.2018 / 22:42
4

Acho que o comentário de Gordon Davisson identifica corretamente seu mal-entendido:

I think there's a fundamental misunderstanding here: ssh never uses the username to decide which computer to connect to. It simply connects to a specified destination IP address (maybe specified via a name) and TCP port number; that might get redirected by a NAT router to a local computer, but if so that's done based on the IP and port numbers, not the username.

E isso é 100% verdadeiro para instalações padrão do SSH: se você se conectar a [email protected] , ele não irá procurar por outros hosts para o nome de usuário.

No entanto, é possível que example.com possa redirecionar a conexão para outro computador. Às vezes, vi sistemas que permitem que ssh se conecte primeiro e depois redirecione com base no nome de usuário. No entanto, isso não é um comportamento padrão do SSH, e o destino dependerá completamente das regras de redirecionamento definidas no servidor.

    
por 21.07.2018 / 11:09
2

Com relação à sua pergunta real:

However, how does ssh handle the possibility of two machines on the local network having the same username? Is there a flag to differentiate between user bob on machine A vs a different user bob on machine B, or does ssh throw an error?

Todo sistema Linux, por padrão, gerencia seus próprios usuários, grupos & senhas localmente em 3 arquivos.

  • /etc/password

    $ head -4 /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    user1:x:1001:1001::/home/user1:/bin/bash
    
  • /etc/shadow

    $ head -4 /etc/shadow
    root:$1$jmJYUghS$AxysSW9MzG6AmmweysZsi1::0:99999:7:::
    bin:*:17110:0:99999:7:::
    daemon:*:17110:0:99999:7:::
    user1:!!:17717:0:99999:7:::
    
  • /etc/group

    $ head -4 /etc/group
    root:x:0:
    bin:x:1:
    daemon:x:2:
    user1:x:1001:
    

Dentro desses arquivos estão os números reais. Você pode vê-los nesta linha do arquivo /etc/password :

    user1:x:1001:1001::/home/user1:/bin/bash

Qual é o ID do usuário (UID) & ID de grupo (GID) de 1001 & 1001. Se fôssemos listar o diretório home deste user1 , você verá esses mesmos números lá também:

$ ls -lnd /home/user1
drwx------ 4 1001 1001 4096 Jul 12 00:05 /home/user1

OBSERVAÇÃO: No comando acima, estamos instruindo ls a exibir o número. O padrão é exibir os nomes de outra forma:

$ ls -ld /home/user1
drwx------ 4 user1 user1 4096 Jul 12 00:05 /home/user1

E o SSH

Quando você ssh para outro servidor e você inclui o usuário para efetuar login como:

$ ssh [email protected]

você está se autenticando em relação aos "detalhes" armazenados localmente sobre um determinado usuário. Com o SSH, é um pouco mais complicado, já que você normalmente estará usando um par de chaves privada / pública para fazer login em um servidor via ssh .

arquivos de pares de chaves de exemplo
$ ls -l ~/.ssh/id_rsa*
-rw------- 1 root root 1675 Jul 21 00:50 /root/.ssh/id_rsa
-rw-r--r-- 1 root root  394 Jul 21 00:50 /root/.ssh/id_rsa.pub

Nesse cenário, quando você ssh envia "segredos" para o servidor remoto, usando a parte privada do par de chaves SSH do usuário, no servidor está a parte pública do par de chaves, que é o servidor pode usar para confirmar que você é de fato quem você diz que é.

Aqui, por exemplo, a sua parte da chave privada:

meu laptop
$ ssh-keygen -l -f ~/.ssh/id_rsa
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA)

Se olharmos para um cliente em que esse usuário pode ssh usar um par de chaves:

servidor remoto X
$ ssh-keygen -l -f ~user1/.ssh/authorized_keys
2048 SHA256:HvNN38AS9H7tIHaaE+51lqv6bgL7AmyDdqHIZIyBimg root@centos7 (RSA) 

Observe a correspondência das chaves.

    
por 21.07.2018 / 06:58