Eu não tenho ideia do porquê você está tentando fazer isso, e parece uma péssima idéia.
Dito isso, por alguma razão a pergunta me deixou viciada e precisei encontrar uma resposta.
A resposta curta é que isso não pode ser feito prontamente simplesmente configurando os pacotes disponíveis no debian.
Se você quiser fazer isso, você tem que escrever dois módulos: um para o NSS e outro para o PAM.
Para o módulo NSS você precisará fornecer pelo menos _getpwbynam_r
. Para o módulo PAM , há muito mais clichê.
Isso parece ser muito trabalhoso e não é o que você está procurando, mas desde que você mencionou que deseja cuidar da autenticação, essa é a maneira de fazer isso.
Uma opção muito mais simples (e provavelmente muito menos segura) seria usar paramiko para configurar um servidor SSH em Python e personalizar / ligar as funções de autenticação.
Felizmente, os caras da paramiko já fizeram a maior parte do levantamento de peso neste servidor de demonstração eles têm em seu repo.
Ao substituir o check_auth_password
ou check_auth_publickey
, você pode aceitar qualquer usuário como válido. Um exemplo de senha auth (*) :
# pip install pam
import pam
MYUSER = 'testuser'
class Server(paramiko.ServerInterface):
def check_auth_password(self, username, password):
if password and pam.authenticate(username=MYUSER, password=password):
return paramiko.AUTH_SUCCESSFUL
return paramiko.AUTH_FAILED
Como isso não é StackOverflow, vou parar por aí:)
Isto criará um servidor ssh que irá ignorar nomes de usuários para autenticação de senha e verificará a senha dada em relação a testuser
.
Por padrão, este servidor solicitará um nome e sairá. Você pode querer substituir isso por um shell ou seu aplicativo personalizado.
Eu codifiquei o nome de usuário, mas você pode facilmente obtê-lo de um arquivo de configuração ou de uma pesquisa de banco de dados ou qualquer outra coisa.
Você também pode querer substituir a variável host_key
e talvez o número da porta.
Há tantas maneiras de se atirar no pé com isso. Você deve ser muito, muito, muito cuidado. Este código não está pronto para produção, revise a coisa toda. Se você não encontrar nada de errado, você não fez uma boa revisão; -).
* : isto está simplesmente substituindo uma função na classe Server
em demo_server.py
e adicionando algumas coisas no topo