Quelle est la bonne autorisation de fichier pour un fichier .pem sur SSH et SCP?

70

J'ai essayé de SSH sur mon serveur AWS Ubuntu et de copier le répertoire sur ma machine locale. Tout au long du processus, je rencontre différentes erreurs d’autorisation d’accès aux fichiers (indiquées ci-dessous).

Existe-t-il une autorisation de fichier spécifique nécessaire pour le fichier .pem qui me permet d'utiliser SSH et SCP?
Ou dois-je changer l'autorisation de fichier deux fois - une fois pour SSH et une autre pour SCP après ma connexion?

Voici les commandes que j'utilise:

SSH:

ssh -i sentiment.pem [email protected]

Copier de l'ordinateur distant vers l'ordinateur local avec:

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

Je suis sous Mac OS X 10.7.5.


Essai et erreur:

1.) Après avoir initialement téléchargé le fichier .pem, ses autorisations ont été définies sur, je pense: 0644

-rw-r - r - @ 1 employé de Toga 1692 18 février 21:27 sentiment.pem

J'ai ensuite essayé de SSH via un terminal et j'ai reçu ce qui suit:

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.) J'ai mis à jour les autorisations de fichier à: chmod 660 sentiment.pem

Après la mise à jour, les autorisations ont été définies sur:

-rw-rw ---- @ 1 employé de Toga 1692 18 février 21:27 sentiment.pem

J'ai ensuite essayé de SSH via un terminal et j'ai reçu ce qui suit:

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.) J'ai mis à jour les autorisations de fichier à: chmod 600 sentiment.pem

Après la mise à jour, les autorisations ont été définies sur:

-rw ------- @ 1 personnel Toga 1692 18 février 21:27 sentiment.pem

J'ai ensuite essayé de SSH via un terminal et j'ai réussi !!

4.) Maintenant connecté, je lance la commande a pour copier le répertoire distant sur mon ordinateur local avec:

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

Qui retourne:

Permission denied (publickey).

Tentatives de commandes SCP:

1.) a ajouté la commande -i et référencé le fichier .pem:

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

2.) a ajouté la commande -i, référencé le fichier .pem et a modifié l'utilisateur AWS en utilisateur ec2:

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

3.) a ajouté la commande -i, référencée au fichier .pem, a modifié l'utilisateur AWS en utilisateur ec2 et ajouté le chemin d'accès complet à l'emplacement du fichier .pem:

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

George Jester
la source
Vous devez également dire à scp d'utiliser également le fichier .pem
daniel kullmann
merci d'avoir appelé cela @danielkullmann qui a du sens. J'ai essayé une combinaison de commandes faisant directement référence au fichier .pem, mais rien n'a encore fonctionné. J'ai mis à jour la question avec une section intitulée "Tentatives de commandes SCP" pour répertorier ce que j'ai essayé. Si vous avez une commande alternative, s'il vous plaît faites le moi savoir. Je vous remercie.
George Jester

Réponses:

110

Visitez ici Comment se connecter à Amazon EC2 à distance à l'aide de SSH ou reportez-vous ci-dessous.

Comment se connecter à Amazon EC2 à distance à l'aide de SSH:

  1. Téléchargez le fichier .pem.
  2. Dans Amazon Dashboard, choisissez "Instances" dans la barre de gauche, puis sélectionnez l'instance à laquelle vous souhaitez vous connecter.
  3. Cliquez sur "Actions", puis sélectionnez "Connecter"
  4. Cliquez sur "Se connecter avec un client SSH autonome"
  5. Ouvrir une fenêtre de terminal
  6. Créez un répertoire:

    # mkdir -p ~/.ssh
    
  7. Déplacez le fichier .pem téléchargé vers le répertoire .ssh que nous venons de créer:

    # mv ~/Downloads/ec2private.pem ~/.ssh
    
  8. Modifiez les autorisations du fichier .pem afin que seul l'utilisateur root puisse le lire:

    # chmod 400 ~/.ssh/ec2private.pem
    
  9. Créez un fichier de configuration:

    # vim ~/.ssh/config
    

    Entrez le texte suivant dans ce fichier de configuration:

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

    Enregistrez ce fichier.

  10. Utilisez la commande ssh avec votre nom d’hôte DNS public pour vous connecter à votre instance.
    par exemple:

    # ssh ec2-54-23-23-23-34.example.amazonaws.com
    
Babin Lonston
la source
1
Je suis curieux: pourquoi le vote négatif?
erik
1
Je n'ai pas voté bas ceci. Cela semble utile, pas sûr que cela résoudra le problème lorsque je devrai passer de la télécommande à ma comp locale. Je vais essayer et voir ce qui se passe. Merci Babin.
George Jester
Lors de la copie d'un répertoire entier et de son contenu, utilisez-le scp -r.
bahamat
1
Excellente réponse. Pour éviter de déplacer le pem, vous pouvez utiliser le drapeau ssh -i pour spécifier la clé publique à utiliser. Exemple: ssh -i chemin / vers / ec2private.pem ec2-54-23-23-23-34.example.amazonaws.com
Mafro34
16

chmod 400 {keyfile}.pem est ce que amazon a demandé et cela fonctionne.

John Zhang
la source
C’est la réponse que je cherchais. Toutes les instructions de la réponse acceptée sont une bonne pratique… mais sans rapport avec le problème.
Sarink
3

Il semble que vous n'êtes pas censé utiliser l'adresse IP, mais le nom d'hôte complet du système dans la commande SCP. La documentation AWS le décrit à l' adresse http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html dans la section "Transfert de fichiers vers des instances Linux / Unix à partir de Linux / Unix avec SCP".

Et utiliser -rpour copier des répertoires.

Et notez que le nom d'utilisateur par défaut est différent pour différentes images:

Pour Amazon Linux, le nom d'utilisateur par défaut est ec2-user. Pour RHEL5, le nom d'utilisateur est souvent, rootmais pourrait l'être ec2-user. Pour Ubuntu, le nom d'utilisateur est ubuntu. Pour SUSE Linux, le nom d'utilisateur est root. Sinon, vérifiez auprès de votre fournisseur AMI.

Alors, utilisez cette commande:

scp -r -i  /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem [email protected]:~/sentiment /Users/Toga/Desktop/sentimentlocal
daniel kullmann
la source
1
Un bon rappel de tête pour moi d'utiliser le nom d'utilisateur correct. Obtenez l'erreur ci-dessus et je devais me souvenir d'utiliser l'utilisateur Ubuntu sur des instances Ubuntu.
md_rasler le
2

La "permission refusée (publickey)" provient du serveur distant. Vous utilisez donc une mauvaise clé, vous ne pouvez pas vous connecter ou une faute de frappe dans le fichier allowed_keys à distance.

maedox
la source
2
chmod 0400 pemfile.pem

et

ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name
Harsha Konreddy
la source
3
S'il vous plaît expliquer votre sshcommande (et également fournir une référence, si possible). BTW, le a chmod 400été fourni dans une réponse il y a neuf mois.
Scott