Qual é a permissão de arquivo correta para um arquivo .pem para SSH e SCP

69

Tentei fazer o SSH no meu servidor AWS Ubuntu e copiar o diretório para minha máquina local. Durante todo o processo, experimentei diferentes erros de permissão de arquivo (mencionados abaixo).

Existe uma permissão de arquivo específica necessária para o arquivo .pem que permita o SSH e o SCP?
Ou preciso alterar a permissão do arquivo duas vezes - uma para o SSH e outra para o SCP após o login?

Aqui estão os comandos que estou usando:

SSH:

ssh -i sentiment.pem [email protected]

Copie do computador remoto para o local com:

scp [email protected]:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal

Estou em um Mac OS X 10.7.5.


Tentativa e erro:

1.) Após o download inicial do arquivo .pem, suas permissões foram definidas para, I THINK: 0644

-rw-r - r - @ 1 Toga staff 1692 18 de fevereiro às 21:27 sentiment.pem

Eu tentei fazer o SSH via terminal e recebi o seguinte:

WARNING: UNPROTECTED PRIVATE KEY FILE! 
Permissions 0644 for 'sentiment.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: sentiment.pem
Permission denied (publickey).

2.) Atualizei as permissões do arquivo para: chmod 660 sentiment.pem

Após a atualização, as permissões foram definidas para:

-rw-rw ---- @ 1 Staff Toga 1692 18 de fevereiro às 21:27 sentiment.pem

Eu tentei fazer o SSH via terminal e recebi o seguinte:

WARNING: UNPROTECTED PRIVATE KEY FILE! 
Permissions 0660 for 'sentiment.pem' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: sentiment.pem
Permission denied (publickey).

3.) Atualizei as permissões do arquivo para: chmod 600 sentiment.pem

Após a atualização, as permissões foram definidas para:

-rw ------- @ 1 Toga staff 1692 18 de fev 21:27 sentiment.pem

Eu então tentei SSH via terminal e foi bem-sucedido !!

4.) Agora logado, executei o comando a para copiar o diretório remoto para o meu computador local com:

scp [email protected]:/home/ubuntu/sentimentfolder /Users/Toga/Desktop/sentimentlocal

Que retorna:

Permission denied (publickey).

Comandos SCP tentados:

1.) adicionou o comando -i e referenciou o arquivo .pem:

scp -i sentiment.pem [email protected]: / home / ubuntu / sentimentfolder / Usuários / Toga / Desktop / sentimentlocal

2.) adicionou o comando -i, referenciou o arquivo .pem e alterou o usuário da AWS para ec2-user:

scp -i sentiment.pem [email protected]: / home / ubuntu / sentimentfolder / Usuários / Toga / Desktop / sentimentlocal

3.) adicionou o comando -i, referenciou o filem .pem, alterou o usuário da AWS para ec2-user e adicionou o caminho completo do arquivo para o local do arquivo .pem:

scp -i /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem [email protected]: / home / ubuntu / sentiment / Usuários / Toga / Desktop / sentimentlocal

George Jester
fonte
Você tem que dizer scp também usar o arquivo .pem
daniel Kullmann
obrigado por chamar isso @danielkullmann que faz sentido. Tentei uma combinação de comandos que faziam referência diretamente ao arquivo .pem, mas nada funcionou ainda. Atualizei a pergunta com uma seção intitulada: "Tentativa de comandos do SCP" para catalogar o que tentei. Se você é um comando alternativo, por favor me avise. Obrigado.
George Jester

Respostas:

110

Visite aqui Como conectar-se ao Amazon EC2 remotamente usando SSH ou consulte abaixo.

Como conectar-se ao Amazon EC2 remotamente usando SSH:

  1. Faça o download do arquivo .pem.
  2. No Amazon Dashboard, escolha "Instâncias" na barra lateral esquerda e selecione a instância à qual você deseja se conectar.
  3. Clique em "Ações" e selecione "Conectar"
  4. Clique em "Conectar-se com um cliente SSH autônomo"
  5. Abra uma janela do Terminal
  6. Crie um diretório:

    # mkdir -p ~/.ssh
    
  7. Mova o arquivo .pem baixado para o diretório .ssh que acabamos de criar:

    # mv ~/Downloads/ec2private.pem ~/.ssh
    
  8. Altere as permissões do arquivo .pem para que somente o usuário root possa lê-lo:

    # chmod 400 ~/.ssh/ec2private.pem
    
  9. Crie um arquivo de configuração:

    # vim ~/.ssh/config
    

    Digite o seguinte texto nesse arquivo de configuração:

    Host *amazonaws.com
    IdentityFile ~/.ssh/ec2private.pem
    User ec2-user
    

    Salve esse arquivo.

  10. Use o comando ssh com seu nome de host DNS público para conectar-se à sua instância.
    por exemplo:

    # ssh ec2-54-23-23-23-34.example.amazonaws.com
    
Babin Lonston
fonte
11
Estou curioso: por que o voto negativo?
19414 erik
11
Eu NÃO votei para baixo. Na verdade, isso parece útil, não tenho certeza se isso resolverá o problema de quando eu precisar do scp do controle remoto para o meu comp local. Vou tentar e ver o que acontece. Obrigado Babin.
George Jester
Ao copiar um diretório inteiro e seu conteúdo, use scp -r.
bahamat
11
Excelente resposta. Para evitar mover o pem, você pode usar o sinalizador ssh -i para especificar a chave pública a ser usada. por exemplo: ssh caminho -i / a / ec2private.pem ec2-54-23-23-23-34.example.amazonaws.com
Mafro34
15

chmod 400 {keyfile}.pem é o que a amazon instruiu e funciona.

John Zhang
fonte
Esta é a resposta que eu estava procurando, todas as instruções na resposta aceita são boas práticas ... mas irrelevantes para o problema.
sarink 16/05
3

Parece que você não deve usar o endereço IP, mas o nome completo do host do sistema no comando SCP. Os documentos da AWS descrevem isso em http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html na seção "Transferindo arquivos para instâncias Linux / Unix do Linux / Unix do Linux / Unix com SCP".

E use -rpara copiar diretórios.

E observe que o nome de usuário padrão é diferente para imagens diferentes:

Para Amazon Linux, o nome de usuário padrão é ec2-user. Para RHEL5, o nome do usuário geralmente é, rootmas pode ser ec2-user. Para Ubuntu, o nome de usuário é ubuntu. Para o SUSE Linux, o nome do usuário é root. Caso contrário, verifique com seu provedor de AMI.

Então, use este comando:

scp -r -i  /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem [email protected]:~/sentiment /Users/Toga/Desktop/sentimentlocal
daniel kullmann
fonte
11
Um bom lembrete para eu usar o nome de usuário correto. Obtenha o erro acima e eu precisava me lembrar de usar o usuário do Ubuntu em instâncias do Ubuntu.
md_rasler 16/04
2

A "Permissão negada (chave pública)" é do servidor remoto; portanto, você está usando a chave errada, não é permitido se conectar ou há um erro de digitação no arquivo remoto remote_keys.

maedox
fonte
2
chmod 0400 pemfile.pem

e

ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name
harsha konreddy
fonte
3
Por favor, explique seu sshcomando (e também forneça uma referência, se possível). BTW, o chmod 400foi fornecido em uma resposta há nove meses.
Scott