Konfigurowanie i weryfikowanie protokołu SFTP za pomocą uwierzytelniania kluczem publicznym na klientach i serwerach

Data utworzenia strony :

środowisko

Windows
  • Windows 10 Pro
  • System Windows Server 2019
  • Okna 7
  • Windows Server 2012 R2
OpenSSH
  • 7,7p1
  • 8.1p1 - Beta

※ Działa w innych wersjach, ale jest niepotwierdzony

Na początku

Ostatnim razem skonfigurowano serwer SFTP w celu sprawdzenia, czy uwierzytelnianie hasłem umożliwia wysyłanie i odbieranie plików. Tym razem sftp wysyła i odbiera pliki przy użyciu uwierzytelniania klucza publicznego.

Przygotowanie z wyprzedzeniem

  • Klient ma zainstalowanego klienta OpenSSH
  • Serwer ma zainstalowany serwer OpenSSH.
  • Serwer uruchamia usługę OpenSSH i port 22 jest zwalniany.

Tworzenie kluczy prywatnych i publicznych w kliencie

Zaloguj się do klienta. Klucze prywatne i publiczne mogą być również tworzone po stronie serwera, ale klucz prywatny będzie klientem, a klucz publiczny będzie przechowywany przez serwer. Twórz po stronie klienta.

Uruchom program PowerShell z uprawnieniami administratora.

image

Utwórz plik, przejdź do dowolnego folderu za pomocą polecenia cd i wpisz następujące polecenie:

ssh-keygen -t rsa -f id_rsa

Możesz umieścić hasło (hasło) w kluczu, więc w razie potrzeby umieść je.

image

Jeśli klucz zostanie pomyślnie wygenerowany, klucze publiczne i prywatne zostaną utworzone w folderze w następujący sposób: "id_rsa" to klucz prywatny, a "id_rsa.pub" to klucz publiczny.

image

image

Umieszczanie klucza publicznego na serwerze

Zaloguj się do systemu Windows przy użyciu konta SFTP serwera.

Umieść utworzony klucz publiczny "id_rsa.pub" w następującym folderze na serwerze. 「. jeśli nie masz folderu "ssh", utwórz go. Zmień także nazwę pliku na "authorized_keys". (Zastąp <> nazwą użytkownika, do których logujesz się za pomocą protokołu SFTP).

  • C:\Users\< nazwa_użytkownika>\.ssh

image

Należy pamiętać, że tylko użytkownicy z "administratorami" lub użytkownikami SFTP powinni mieć dostęp do tego pliku. Połączenia Sftp zawsze kończą się niepowodzeniem, jeśli inni użytkownicy mają dostęp. Na przykład NG ma grupę Użytkownicy lub Wszyscy dołączoną do uprawnienia.

W tym przykładzie ". Prawa dostępu do folderu "ssh" to "Group:SYSTEM", "Group: Administrators" i "User: sftptest". Jeśli nie możesz usunąć uprawnienia, wyłącz dziedziczenie uprawnień.

Włączanie uwierzytelniania kluczem publicznym na serwerze

Zaloguj się do serwera z uprawnieniami administratora użytkowników, a następnie otwórz następujące foldery:

  • C: \\ ProgramData \\ ssh

Ponieważ istnieje plik o nazwie "sshd_config", skopiuj go i zmień nazwę pliku na "sshd_config_default" i skonfiguruj kopię zapasową.

image

Otwórz "sshd_config" w edytorze tekstu uruchomionym z uprawnieniami administratora.

Aby włączyć uwierzytelnianie za pomocą klucza publicznego, zmień je w następujący sposób:

#PubkeyAuthentication yes

↓↓↓

PubkeyAuthentication yes

Ponadto uwierzytelnianie hasłem jest domyślnie włączone, więc jeśli chcesz je wyłączyć, zmień je w następujący sposób.

#PasswordAuthentication yes

↓↓↓

PasswordAuthentication no

Chcę umieścić klucz publiczny dla każdego konta SFTP, więc skomentuję następujący wiersz:

Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

↓↓↓

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Jeśli chcesz określić katalog główny dla każdego konta SFTP, dodaj następujący wiersz: W zależności od tego, czy to określisz, czy nie, po określeniu ścieżki folderu z klienta może ona zmienić się na format "C:\xxxxx" lub "/xxxxx".

Match User <ユーザー名>
       ChrootDirectory <フォルダパス>

przykład

Match User TestUser
       ChrootDirectory C:\Users\TestUser

Po zapisaniu sshd_config uruchom ponownie serwer OpenSSH.

image

Wysyłanie i odbieranie plików od klientów z uwierzytelnianiem za pomocą klucza publicznego

Umieść klucz prywatny "id_rsa" utworzony przed nawiązaniem połączenia z protokołem SFTP w folderze dostępnym tylko dla użytkownika, który korzysta z protokołu SFTP. Należy pamiętać, że połączenia sftp nie posiądą się, jeśli zostaną umieszczone w folderze, do którego dostęp mają inni użytkownicy. Zwłaszcza jeśli folder ma uprawnienia dla grup Użytkownicy i Wszyscy, jest to NG.

Zasadniczo jest to zalecane, ponieważ automatycznie odwołuje się do ścieżki, jeśli umieścisz ją w następującym folderze.

  • C:\Users\< nazwa_użytkownika>\.ssh

Klient ". Prawa dostępu do folderu "ssh" to "Group:SYSTEM", "Group: Administrators", "User: < Login user >".

Jeśli chcesz uzyskać dostęp do sftp za pomocą klucza prywatnego, wpisz polecenie w następujący sposób (zastąp <>): Jeśli masz skonfigurowane hasło, wprowadź również hasło.

sftp -i id_rsa <ユーザー名>@<サーバー名>

image

Jeśli zalogujesz się pomyślnie, zostaniesz przełączony na wyświetlanie zalogowanego użytkownika.

image

Możesz również sprawdzić, czy możesz zalogować się za pomocą polecenia dir.

image

Teraz, gdy przygotowałeś plik o nazwie "test3.txt", wyślij plik za pomocą polecenia put.

put c:\temp\test3.txt

image

Jeśli spojrzysz na folder C:\Users\sftptest po stronie serwera, zobaczysz, że plik test3.txt jest wysyłany.

image

Spróbuj uzyskać od klienta.

get test3.txt c:\temp\test4.txt

image

Udało mi się potwierdzić, że plik można uzyskać.

image

Streszczenie

Można było wysyłać i odbierać pliki za pomocą protokołu SFTP przy użyciu uwierzytelniania za pomocą klucza publicznego. Korzystając z klucza publicznego, strona serwera nie będzie mogła poznać hasła. Pozwala na bezpieczniejszą wymianę plików niż uwierzytelnianie hasłem.