SSH sem senha para “Usuário do sistema” com o NO Login Shell

2

Eu aprendi muito hoje brincando com ssh com RSA e criando contas de usuário do sistema sem senha, sem login, etc. O que eu estava tentando fazer era criar um usuário com um diretório home necessário para ~ / .ssh / e uma senha (necessária para a configuração inicial do ssh)

Mas parece que não consigo configurar corretamente.

Eu sei usar

ssh-keygen
ssh-copy-id user@remotehost

Isso é simples para o RSA

e eu sei como criar um usuário com dizer

useradd -r newuser

OR

adduser newuser --system --shell=/bin/false
passwd newuser
passwd -d newuser
  • O objetivo final

    é um usuário que não possui um shell, ou pelo menos não pode ter efetuado login a partir de um computador remoto, mas ainda pode ser usado para executar ssh em outro computador e executar um comando. Isso é possível?

  • O MOTIVO / OBJETIVO

    é ter um usuário que, quando os altos ficam sem energia, desliga os outros computadores conectados via ssh antes de desligar o computador principal. (Apenas um computador pode se conectar à UPS via USB de cada vez para monitorar as estatísticas).

Eu não quero que as pessoas consigam se conectar via SSH com o nome de usuário UPS, mas eu preciso de ups para poder usar o ssh em remotehost sem senha.

    
por FreeSoftwareServers 17.08.2016 / 23:19

4 respostas

7

Defina o campo de criptografia como * ou !! em /etc/shadow

por exemplo

# adduser tst  
# passwd -l tst
Locking password for user tst.
passwd: Success
# grep tst /etc/passwd
tst:x:1000:1000::/home/tst:/bin/bash
# grep tst /etc/shadow
tst:!!:17030:0:99999:7:::

Neste ponto, o usuário não pode fazer o login porque não há senha válida.

Agora adicione um command="/thing/to/do" ao início da chave pública no arquivo authorized_keys

por exemplo

# ls -l $PWD/authorized_keys 
-rw-r--r-- 1 tst tst 431 Aug 17 17:54 /home/tst/.ssh/authorized_keys

# cat $PWD/authorized_keys
command="/bin/echo hello" ssh-rsa AAAAB3NzaC1yc2E....etcetc

Agora, esta chave pode ser usada, mas a única coisa que pode ser usada é o comando forçado:

$ ssh -i ~/.ssh/id_rsa tst@test1
hello
Connection to test1 closed.

Se você tentar fazer qualquer outra coisa, ela falhará e ainda forçará o mesmo comando

$ ssh -i ~/.ssh/id_rsa tst@test1 reboot 
hello
$
    
por 17.08.2016 / 23:57
1

Você pode especificar um comando forçado associado a uma determinada chave pública no arquivo de chaves autorizadas. Veja a seção 'AUTHORIZED_KEYS FILE FORMAT' de man sshd .

command="command"
    Specifies that the command is executed whenever this key is used for authentication. The command supplied by the user (if any) is ignored....

Você também pode usar a opção no-pty na chave para não permitir a alocação de pty.

    
por 17.08.2016 / 23:49
0

Você pode fazer o inverso: configurar uma tarefa agendada para verificar se a máquina conectada por USB ao no-break está on-line a partir das máquinas que precisam ser desligadas, se a máquina conectada ao no-break estiver off-line de tempo em uma fileira. Como a máquina usará uma conta local para executar a tarefa agendada, nenhuma senha ou certificado será necessário para executar a tarefa. Se a máquina responder a pings, pode ser tão fácil quanto verificar se você recebe uma resposta do ping.

Outro método seria usar o KVM para iniciar o desligamento, como se o botão liga / desliga fosse pressionado. Dependendo das configurações da máquina, pressionar o botão liga / desliga iniciará a operação de desligamento normal ou colocará a máquina em suspensão no disco.

Eu não conheço um método para logar em uma máquina remota sem algum tipo de autenticação, a menos que você deixe uma conta aberta ou use uma falha de segurança, um backdoor.

Embora esse não seja o método que você solicitou para realizar a tarefa, é um método que funcionará para atingir suas metas.

    
por 17.08.2016 / 23:48
0

Você criou uma conta com nologin shell nessa máquina "principal". Para essa conta você deve gerar chaves ssh que podem ser usadas para login remoto na máquina que deve ser desligada.

nologin shell impedirá o login nessa conta, mas ainda pode ser usado para login remoto em outro sistema.

Para entrar como usuário com nologin shell você terá que usar su - user_name -s /bin/bash

Meu ponto é que a máquina 'principal' desligará automaticamente os servidores remotos, sem interação humana.

    
por 17.08.2016 / 23:46