Jakie jest odpowiednie uprawnienie do pliku .pem do SSH i SCP

69

Próbowałem SSH na mój serwer AWS Ubuntu i skopiować katalog na mój komputer lokalny. W trakcie całego procesu występują różne błędy uprawnień do plików (wymienione poniżej).

Czy do pliku .pem potrzebne jest jedno określone uprawnienie do pliku, które pozwala mi na SSH i SCP?
Czy też muszę dwukrotnie zmieniać uprawnienia do plików - raz dla SSH, a drugi dla SCP po zalogowaniu?

Oto polecenia, których używam:

SSH:

ssh -i sentiment.pem [email protected]

Kopiuj ze zdalnego na komputer lokalny za pomocą:

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

Korzystam z systemu Mac OS X 10.7.5.


Wersja próbna i błąd:

1.) Po pierwszym pobraniu pliku .pem jego uprawnienia zostały ustawione na, MYŚLĘ: 0644

-rw-r - r - @ 1 sztab Toga 1692 18 lutego 21:21 sentiment.pem

Następnie próbowałem połączyć się przez SSH za pośrednictwem terminala i otrzymałem następujące informacje:

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.) Zaktualizowałem uprawnienia do pliku do: chmod 660 sentiment.pem

Po aktualizacji uprawnienia zostały ustawione na:

-rw-rw ---- @ 1 sztab Toga 1692 18 lutego 21:21 sentiment.pem

Następnie próbowałem połączyć się przez SSH za pośrednictwem terminala i otrzymałem następujące informacje:

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.) Zaktualizowałem uprawnienia do pliku do: chmod 600 sentiment.pem

Po aktualizacji uprawnienia zostały ustawione na:

-rw ------- @ 1 sztab Toga 1692 18 lutego 18 21:27 sentiment.pem

Następnie spróbowałem połączyć się przez terminal SSH i udało mi się !!

4.) Teraz zalogowany, uruchamiam polecenie skopiowania katalogu zdalnego na mój komputer lokalny za pomocą:

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

Które zwraca:

Permission denied (publickey).

Próbowano wykonać polecenia SCP:

1.) dodał polecenie -i i odwołał się do pliku .pem:

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

2.) dodał polecenie -i, odwołał się do pliku .pem i zmienił użytkownika AWS na ec2-user:

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

3.) dodał polecenie -i, odwołał się do pliku .pem, zmienił użytkownika AWS na ec2-user i dodał pełną ścieżkę pliku dla lokalizacji pliku .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
źródło
Musisz powiedzieć scp, aby używał również pliku .pem
Daniel Kullmann
dziękuję za odwołanie się do @danielkullmann, co ma sens. Próbowałem kombinacji poleceń, które bezpośrednio odwoływały się do pliku .pem, ale nic jeszcze nie działało. Zaktualizowałem pytanie o sekcję zatytułowaną „Próbowano wykonać polecenia SCP”, aby skatalogować to, co próbowałem. Jeśli masz alternatywne polecenie, daj mi znać. Dziękuję Ci.
George Jester

Odpowiedzi:

110

Odwiedź tutaj Jak połączyć się z Amazon EC2 zdalnie za pomocą SSH lub zapoznaj się poniżej.

Jak połączyć się z Amazon EC2 zdalnie za pomocą SSH:

  1. Pobierz plik .pem.
  2. W Amazon Dashboard wybierz „Instancje” z paska po lewej stronie, a następnie wybierz instancję, z którą chcesz się połączyć.
  3. Kliknij „Działania”, a następnie wybierz „Połącz”
  4. Kliknij „Połącz z samodzielnym klientem SSH”
  5. Otwórz okno terminala
  6. Utwórz katalog:

    # mkdir -p ~/.ssh
    
  7. Przenieś pobrany plik .pem do właśnie utworzonego katalogu .ssh:

    # mv ~/Downloads/ec2private.pem ~/.ssh
    
  8. Zmień uprawnienia do pliku .pem, aby tylko użytkownik root mógł go odczytać:

    # chmod 400 ~/.ssh/ec2private.pem
    
  9. Utwórz plik konfiguracyjny:

    # vim ~/.ssh/config
    

    Wprowadź następujący tekst do tego pliku konfiguracyjnego:

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

    Zapisz ten plik.

  10. Użyj polecenia ssh z publiczną nazwą hosta DNS, aby połączyć się z instancją.
    na przykład:

    # ssh ec2-54-23-23-23-34.example.amazonaws.com
    
Babin Lonston
źródło
1
Jestem ciekawy: dlaczego głosowanie negatywne?
erik
1
NIE oddałem głosu. To faktycznie wydaje się pomocne, nie jestem pewien, czy to rozwiąże problem, gdy będę musiał scpować ze zdalnego do mojej lokalnej kompilacji. Spróbuję i zobaczę, co się stanie. Dzięki Babin.
George Jester
Podczas kopiowania całego katalogu i jego zawartości użyj scp -r.
bahamat
1
Doskonała odpowiedź. Aby uniknąć przenoszenia pem, możesz użyć flagi ssh -i, aby określić klucz publiczny do użycia. np .: ssh -i path / to / ec2private.pem ec2-54-23-23-23-34.example.amazonaws.com
Mafro34
14

chmod 400 {keyfile}.pem to, co amazon polecił i działa.

John Zhang
źródło
Oto odpowiedź, której szukałem, wszystkie instrukcje w przyjętej odpowiedzi są dobrą praktyką ... ale nie mają znaczenia dla problemu.
sarink
3

Wygląda na to, że nie powinieneś używać adresu IP, ale pełną nazwę hosta systemu w poleceniu SCP. Dokumenty AWS opisują to na stronie http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AccessingInstancesLinux.html w sekcji „Przesyłanie plików do instancji Linux / Unix z Linux / Unix za pomocą SCP”.

I użyj -rdo skopiowania katalogów.

I pamiętaj, że domyślna nazwa użytkownika jest inna dla różnych obrazów:

W systemie Amazon Linux domyślna nazwa użytkownika to ec2-user. W przypadku RHEL5 nazwa użytkownika jest często, rootale może być ec2-user. W systemie Ubuntu nazwa użytkownika to ubuntu. W przypadku SUSE Linux nazwa użytkownika to root. W przeciwnym razie skontaktuj się z dostawcą AMI.

Więc użyj tego polecenia:

scp -r -i  /Users/Toga/Desktop/rollup/Personal/Serial_Project_Starter/sentiment/sentiment.pem [email protected]:~/sentiment /Users/Toga/Desktop/sentimentlocal
Daniel Kullmann
źródło
1
Dobre przypomnienie uderzenia głową, żebym użył poprawnej nazwy użytkownika. Otrzymaj powyższy błąd i musiałem pamiętać o używaniu użytkownika ubuntu w instancjach ubuntu.
md_rasler
2

„Odmowa uprawnień (publickey)” pochodzi ze zdalnego serwera, więc albo używasz niewłaściwego klucza, nie można się połączyć lub w zdalnym pliku kluczy autoryzowanych jest literówka.

maedox
źródło
2
chmod 0400 pemfile.pem

i

ssh -i path_to_pem_file -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no ec2-machine name
harsha konreddy
źródło
3
Wyjaśnij swoje sshpolecenie (i jeśli to możliwe, podaj również odniesienie). BTW, chmod 400udzielono odpowiedzi dziewięć miesięcy temu.
Scott