Não se trata de copiar a chave pública no servidor e depois ssh-ing, se você vai sugerir isso.
Então, criei uma instância do AWS Linux e criei um par de chaves ssh e baixei automaticamente a chave privada.
Agora posso me conectar à minha instância do AWS Linux simplesmente:
ssh -i key_they_gave_me ec2-user@AWSinstanceIP
Como faço para configurar esse tipo de coisa para minhas próprias vms Linux? Para que alguém possa simplesmente entrar nele com a chave privada, sem precisar de uma senha?
EDIT: não estou falando de copiar o id_rsa.pub. Eu sei como fazer isso, e a instância da AWS não exige isso. Isso é o que eu quero.
Senhas vazias são permitidas com SSH. Você pode replicá-lo
ssh-keygen
simplesmente pressionando enter quando for solicitada uma senha. Deman ssh-keygen
:Esse é o comportamento padrão para chaves geradas como parte de vários serviços de nuvem. Espero que você descubra que a mesma coisa acontece se você usasse as nuvens do Google ou da Microsoft. Pode parecer inseguro, mas as alternativas também não são ótimas. De alguma forma, eles precisam dar acesso à VM.
Para quem se preocupa com segurança,
ssh-keygen
também tem uma função para alterar a senha na chave privada sem precisar alterar a chave pública:Pessoalmente, tenho senhas por padrão, mas armazeno chaves sem senha dentro de um volume LUKS. Quando sei que estou prestes a fazer muito sshing, monto as chaves sem senha por cima das chaves padrão. Quando termino o trabalho, desmonto para que qualquer intruso ainda tenha que lidar com uma senha. Isso evita a necessidade do ssh-agent na maior parte do tempo, ao mesmo tempo em que dá muito controle sobre a segurança das chaves.
Você está perguntando sobre como a infraestrutura da AWS gera chaves ssh. A menos que alguém que trabalhe para a AWS e tenha permissão para divulgar essas informações ( altamente improvável), você não receberá uma resposta completa.
Além disso, a resposta que você procura depende inteiramente de qual back-end de virtualização você usa.
KVM
Dito isto, o que é conhecimento publicamente disponível da AWS é que eles agora usam sua própria plataforma de virtualização caseira , em vez deXEN
como costumavam usar.Assim, podemos arriscar um palpite de como a AWS faz isso, ou pelo menos fornecer um método de fazer isso por meio de um host kvm. A maneira mais comum que conheço é usar
virt-sysprep
em umaqcow2
imagem com a--ssh-inject
bandeira.Exemplo
primeiro gere a chave pública no kvmhost com
ssh-keygen
. Digamos que seu usuário sejaiamAguest
e você armazenou a nova chave pública em/home/iamAguest/.ssh/id_rsa.pub
Você então executaria
virt-sysprep
para injetar essas chaves em uma imagem:Depois de implantar uma instância usando essa imagem
a_linux_image.qcow2
, você poderá usar o ssh usando suas novas chaves geradas.como a amazon faz isso com um clique de um botão?
Um script bastante simples poderia fazer isso, mas em uma plataforma da escala da AWS, sem dúvida seria bastante complexo.
Se você está apenas executando uma instância kvm própria, algo tão simples quanto isso pode resolver o problema:
Observe, no entanto, que seria uma boa ideia copiar a imagem primeiro, para que você ainda tenha uma imagem limpa, sem chaves, se estiver planejando fornecer isso como uma solução para o consumidor. Também seria uma boa ideia colocar mais validação no script; é apenas um exemplo simples como está.
Na verdade, eu descobri a maneira de fazer isso. É muito simples na verdade.
Digamos que você tenha machine1 e machine2 e queira poder acessar machine2 de machine1 sem manipular a chave de machine1, por meio de um método que permita que o usuário de machine1 acesse machine2 mesmo de outra máquina que não seja machine1.
Você faz o
ssh-keygen
on machine2. Você fazcat /path/.ssh/id_rsa.pub >> /path/.ssh/authorized_keys
, entãochmod 600 /path/.ssh/authorized_keys
, então finalmente copia oid_rsa
arquivo permission.pem e o entrega para machine1.Desta forma machine1 pode se conectar a machine2 fazendo
ssh -i permission.pem thatuser@machine2
. O usuário da máquina1 pode levar o permission.pem com ele e conectar-se à máquina2 sem uma senha de qualquer máquina.Claro que isso é inseguro, mas você também pode usar uma senha. O que eu queria saber era como um CONCEITO como fazer. Isso responde.