¿Cuál es el permiso de archivo correcto para un archivo .pem a SSH y SCP?

69

He intentado SSH en mi servidor AWS Ubuntu y copiar el directorio a mi máquina local. A lo largo del proceso, experimento diferentes errores de permisos de archivos (que se indican a continuación).

¿Se necesita un permiso de archivo específico para el archivo .pem que me permita utilizar SSH y SCP?
¿O necesito cambiar el permiso de archivo dos veces, una para SSH y otra para SCP después de iniciar sesión?

Aquí están los comandos que estoy usando:

SSH:

ssh -i sentiment.pem [email protected]

Copie de la computadora remota a la local con:

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

Estoy en una Mac OS X 10.7.5.


Prueba y error:

1.) Después de descargar inicialmente el archivo .pem, sus permisos se establecieron en, PIENSO: 0644

-rw-r - r - @ 1 personal de Toga 1692 18 de febrero 21:27 sentiment.pem

Luego intenté SSH a través de la terminal y recibí lo siguiente:

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.) Actualicé los permisos del archivo a: chmod 660 sentiment.pem

Después de la actualización, los permisos se establecieron en:

-rw-rw ---- @ 1 personal de Toga 1692 18 de febrero 21:27 sentiment.pem

Luego intenté SSH a través de la terminal y recibí lo siguiente:

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.) Actualicé los permisos del archivo a: chmod 600 sentiment.pem

Después de la actualización, los permisos se establecieron en:

-rw ------- @ 1 personal de Toga 1692 18 de febrero 21:27 sentiment.pem

¡Entonces intenté SSH a través de la terminal y tuve éxito!

4.) Ahora conectado, ejecuto un comando para copiar el directorio remoto a mi computadora local con:

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

Que devuelve:

Permission denied (publickey).

Comandos de SCP intentados:

1.) agregó el comando -i y hizo referencia al archivo .pem:

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

2.) agregó el comando -i, hizo referencia al archivo .pem y cambió el usuario de AWS a ec2-user:

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

3.) agregó el comando -i, hizo referencia al archivo .pem, cambió el usuario de AWS a ec2-user y agregó la ruta completa del archivo para la ubicación del archivo .pem:

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

George Jester
fuente
Tienes que decirle a scp que también use el archivo .pem
daniel kullmann
gracias por llamar a eso @danielkullmann que tiene sentido. Intenté una combinación de comandos que hacían referencia al archivo .pem directamente pero nada ha funcionado todavía. He actualizado la pregunta con una sección titulada: "Intentos de comandos SCP intentados" para catalogar lo que intenté. Si tiene un comando alternativo, hágamelo saber. Gracias.
George Jester

Respuestas:

110

Visite aquí Cómo conectarse a Amazon EC2 de forma remota utilizando SSH o consulte a continuación.

Cómo conectarse a Amazon EC2 de forma remota mediante SSH:

  1. Descargue el archivo .pem.
  2. En Amazon Dashboard, elija "Instancias" en la barra lateral izquierda y luego seleccione la instancia a la que desea conectarse.
  3. Haga clic en "Acciones", luego seleccione "Conectar"
  4. Haga clic en "Conectar con un cliente SSH independiente"
  5. Abre una ventana de Terminal
  6. Crea un directorio:

    # mkdir -p ~/.ssh
    
  7. Mueva el archivo .pem descargado al directorio .ssh que acabamos de crear:

    # mv ~/Downloads/ec2private.pem ~/.ssh
    
  8. Cambie los permisos del archivo .pem para que solo el usuario root pueda leerlo:

    # chmod 400 ~/.ssh/ec2private.pem
    
  9. Crea un archivo de configuración:

    # vim ~/.ssh/config
    

    Ingrese el siguiente texto en ese archivo de configuración:

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

    Guarda ese archivo.

  10. Use el comando ssh con su nombre de host DNS público para conectarse a su instancia.
    p.ej:

    # ssh ec2-54-23-23-23-34.example.amazonaws.com
    
Babin Lonston
fuente
1
Tengo curiosidad: ¿por qué el voto negativo?
erik
1
NO rechacé votar esto. Esto realmente parece útil, no estoy seguro de si resolverá el problema cuando necesito scp desde el control remoto a mi comp local. Voy a intentar esto y ver qué pasa. Gracias Babin
George Jester
Al copiar un directorio completo y su contenido, use scp -r.
bahamat
1
Excelente respuesta Para evitar mover el pem, puede usar el indicador ssh -i para especificar la clave pública que se usará. por ejemplo: ssh -i path / to / ec2private.pem ec2-54-23-23-23-34.example.amazonaws.com
Mafro34
15

chmod 400 {keyfile}.pem es lo que amazon instruyó y funciona.

John Zhang
fuente
Esta es la respuesta que estaba buscando, todas las instrucciones en la respuesta aceptada son buenas prácticas ... pero irrelevantes para el problema.
sarink
3

Parece que no debes usar la dirección IP, sino el nombre completo del sistema en el comando SCP. Los documentos de AWS describen esto en http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html en la sección "Transferencia de archivos a instancias Linux / Unix desde Linux / Unix con SCP".

Y usar -rpara copiar directorios.

Y tenga en cuenta que el nombre de usuario predeterminado es diferente para diferentes imágenes:

Para Amazon Linux, el nombre de usuario predeterminado es ec2-user. Para RHEL5, el nombre de usuario es a menudo rootpero podría ser ec2-user. Para Ubuntu, el nombre de usuario es ubuntu. Para SUSE Linux, el nombre de usuario es root. De lo contrario, consulte con su proveedor de AMI.

Entonces, 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
fuente
1
Un buen recordatorio para que use el nombre de usuario correcto. Obtuve el error anterior y necesitaba recordar usar el usuario de ubuntu en instancias de ubuntu.
md_rasler
2

El "Permiso denegado (clave pública)" proviene del servidor remoto, por lo que está utilizando la clave incorrecta, no está permitido conectarse o hay un error tipográfico en el archivo remote_keys remoto.

maedox
fuente
2
chmod 0400 pemfile.pem

y

ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name
harsha konreddy
fuente
3
Explique su sshcomando (y también proporcione una referencia, si es posible). Por cierto, el chmod 400fue proporcionado en una respuesta hace nueve meses.
Scott