AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 465675
Accepted
iamAguest
iamAguest
Asked: 2018-08-30 23:30:32 +0800 CST2018-08-30 23:30:32 +0800 CST 2018-08-30 23:30:32 +0800 CST

A instância da AWS me permite fazer ssh com uma chave privada pela primeira vez sem uma senha

  • 772

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.

ssh
  • 3 3 respostas
  • 146 Views

3 respostas

  • Voted
  1. cryptarch
    2018-08-31T01:47:18+08:002018-08-31T01:47:18+08:00

    Senhas vazias são permitidas com SSH. Você pode replicá-lo ssh-keygensimplesmente pressionando enter quando for solicitada uma senha. De man ssh-keygen:

    O programa também pede uma senha. A senha pode estar vazia para indicar que não há senha (as chaves do host devem ter uma senha vazia) ou pode ser uma string de tamanho arbitrário.

    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-keygentambém tem uma função para alterar a senha na chave privada sem precisar alterar a chave pública:

    ssh-keygen -p -f key_they_gave_me
    

    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.

    • 3
  2. RobotJohnny
    2018-08-31T02:08:07+08:002018-08-31T02:08:07+08:00

    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.

    KVMDito isto, o que é conhecimento publicamente disponível da AWS é que eles agora usam sua própria plataforma de virtualização caseira , em vez de XENcomo 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-sysprepem uma qcow2imagem com a --ssh-injectbandeira.

    Exemplo

    primeiro gere a chave pública no kvmhost com ssh-keygen. Digamos que seu usuário seja iamAgueste você armazenou a nova chave pública em/home/iamAguest/.ssh/id_rsa.pub

    Você então executaria virt-syspreppara injetar essas chaves em uma imagem:

    virt-sysprep -a a_linux_image.qcow2 --run-command 'useradd iamAguest' --ssh-inject iamAguest:file:/home/iamAguest/.ssh/id_rsa.pub 
    

    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:

    #!/usr/bin/bash
    
    # get image and user from user input
    image=$1
    user=$2
    
    # fail if no user input
    if [ -z "$image" ] || [ -z "$user" ]; then
        echo "you must enter a filepath to an image and a user name to run this"
        echo "e.g: inject_ssh.bash <image> <user>"
        exit 1
    fi
    
    # create ssh key for current logged in user with no passphrase
    echo -e "/home/$user/.ssh/id_rsa\n\n" | ssh-keygen
    
    # inject key into image 
    virt-sysprep -a $image --run-command "useradd $user" --ssh-inject $user:file:/home/$user/.ssh/id_rsa.pub
    

    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á.

    • 0
  3. Best Answer
    iamAguest
    2018-09-14T23:25:11+08:002018-09-14T23:25:11+08:00

    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-keygenon machine2. Você faz cat /path/.ssh/id_rsa.pub >> /path/.ssh/authorized_keys, então chmod 600 /path/.ssh/authorized_keys, então finalmente copia o id_rsaarquivo 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.

    • 0

relate perguntas

  • Por que o utilitário ssh é considerado um pty?

  • Auto-SSH funciona manualmente, mas não em segundo plano

  • Execute o aplicativo X remotamente, execute a GUI no host remoto [fechado]

  • rsync porta 22 e 873 uso

  • Aborto repentino do SCP: tubo quebrado, código de autenticação de mensagem incorreto

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve