Jak tworzyć narzędzia PowerShell do konfiguracji SFTP

W przypadku korzystania z wielu komputerów z systemem Windows może zaistnieć potrzeba uzyskania dostępu do współdzielonych zasobów przy użyciu różnych protokołów. Po utworzeniu udziału plików na komputerze z systemem Windows zazwyczaj stosowany jest protokół SMB. Jednak pliki można udostępniać na komputerach z innymi systemami operacyjnymi, korzystając z protokołów NFS, FTP, SFTP, FTPS, SCP i innych. Jeśli na przykład korzystasz wyłącznie z programu PowerShell na serwerze z systemem Windows Server bez interfejsu graficznego, pierwsze połączenie z udziałem SFTP może wydawać się trudne. W tym wpisie na blogu wyjaśniono, jak korzystać z protokołu SFTP w systemie Windows za pomocą programu PowerShell.

NAKIVO – wykonanie kopii zapasowej w systemie Windows

NAKIVO – wykonanie kopii zapasowej w systemie Windows

Szybkie wykonanie kopii zapasowej serwerów i stacji roboczych z systemem Windows na miejscu, poza siedzibą firmy oraz w chmurze. Odzyskiwanie całych maszyn i obiektów w ciągu kilku minut, co zapewnia krótki czas przywrócenia (RTO) i maksymalny czas sprawności.

Co to jest SFTP?

SFTP to skrót od SSH File Transfer Protocol lub Secure File Transfer Protocol. SFTP jest bezpieczną alternatywą dla tradycyjnego protokołu przesyłania plików (FTP) z podobną funkcją. SFTP działa na warstwie aplikacji modelu OSI (warstwa 7), wykorzystuje połączenie SSH i jest szczególnie popularny na maszynach Linux, które zazwyczaj mają wbudowanego klienta SFTP z wiersza poleceń. Jeśli używasz Windows, zainstaluj bezpłatny klient SSH, taki jak WinSCP, który ma GUI i obsługuje więcej niż tylko SFTP, lub skonfiguruj narzędzia PowerShell, jeśli potrzebujesz używać wiersza poleceń. Windows i PowerShell nie obsługują natywnie SFTP, więc konieczne będzie zainstalowanie dodatkowych komponentów.

Podczas korzystania z połączenia SSH, transfery danych przez sieć są szyfrowane, a połączenie jest bezpieczne, w przeciwieństwie do tradycyjnego nieszyfrowanego protokołu FTP, w którym dane mogą zostać przechwycone przez atakujących. SSH służy do uwierzytelniania, a jeśli masz poświadczenia użytkownika Linux, możesz uzyskać dostęp do plików na docelowej maszynie Linux po uwierzytelnieniu z klienta SFTP wiersza poleceń lub klienta GUI. Pozwala to również na kopiowanie plików z/do zdalnej maszyny Linux na lokalną maszynę Linux lub Windows. Konfiguracja serwera SFTP na Linux nie jest trudna – instalujesz serwer SSH, tworzysz użytkowników i nadajesz im potrzebne uprawnienia do plików i katalogów.

Nie myl SFTP i FTPS. Te dwa protokoły są używane do podobnych celów. Jednak SFTP używa jednego numeru portu dla połączenia, a FTPS używa kilku numerów portów dla kanałów kontrolnych i danych (co może być trudniejsze do skonfigurowania z perspektywy bezpieczeństwa, w tym zapór). FTPS to FTP z SSL (Secure Socket Layer). Nie omawiam tutaj, jak skonfigurować serwer SFTP. Przeczytaj o instalacji i konfiguracji Linux (w tym serwera SSH) na Hyper-V w tutaj.

Instalowanie modułu Posh-SSH

Aby przeprowadzać operacje na plikach (kopiowanie plików, usuwanie plików) na zdalnych maszynach, używając SFTP i SCP w PowerShell, musisz zainstalować moduł Posh-SSH w PowerShell. Instalacja tego modułu pozwala również uruchamiać zdalnie komendy na zdalnym komputerze za pomocą sesji SSH. PowerShell 3.0 i .NET Framework 4.0 są wymagane do zainstalowania i używania Posh-SSH. Dlatego można zainstalować ten moduł w systemie Windows 8 lub nowszym. Możesz także ręcznie zaktualizować PowerShell i .NET Framework w Windows 7 SP1. Uruchom tę komendę, aby zainstalować moduł PowerShell SFTP (Posh-SSH): install-module posh-ssh

Posh PowerShell – installing the PowerShell SFTP module

Alternatywnie możesz użyć poniższego polecenia, aby zainstalować moduł Posh-SSH dla PowerShell:

iex (New-Object Net.WebClient).DownloadString("https://gist.github.com/darkoperator/6152630/raw/c67de4f7cd780ba367cccbc2593f38d18ce6df89/instposhsshdev")

Do zainstalowania modułu Posh-SSH za pomocą powyższych poleceń wymagane jest połączenie z Internetem. W moim przypadku użyłem modułu Posh-SSH w PowerShellu i mogę przejść do kolejnych kroków konfiguracji.

Łączenie się ze zdalnym hostem w PowerShellu

W tym wpisie na blogu korzystam ze środowiska składającego się z lokalnego komputera z systemem Windows oraz zdalnego komputera z systemem Linux, które są podłączone do tej samej sieci:

  • 192.168.101.210 to lokalny komputer z systemem Windows 10 w wersji 20H2
  • 192.168.101.209 to zdalny komputer z systemem Linux, na którym działa serwer SSH (SFTP)
  • user1 to nazwa użytkownika systemu Linux

Te adresy IP są używane w moich przykładach. Wprowadź swoje adresy IP i dane uwierzytelniające w odpowiednich poleceniach i plikach konfiguracyjnych.

Sprawdźmy nasz udział SFTP, łącząc się z serwerem z systemem Linux za pośrednictwem protokołu SFTP przy użyciu WinSCP, darmowego klienta SFTP dla systemu Windows. Łączenie się z serwerem SFTP jest proste. Wprowadź adres IP hosta docelowego, numer portu (domyślnym numerem portu jest TCP 22, ale serwer SSH można skonfigurować tak, aby korzystał z niestandardowego numeru portu), nazwę użytkownika i hasło, aby nawiązać połączenie. Nie zapomnij wybrać protokołu SFTP.

How to use SFTP – connecting to a remote machine in WinSCP

W moim przypadku połączenie SFTP działa. Skopiowaliśmy dwa pliki do folderu współdzielonego (lokalizacja plików to /home/user1/shared/ na zdalnej maszynie z systemem Linux). Przyjrzyjmy się, jak połączyć się z folderem współdzielonym z systemu Windows oraz jak korzystać z SFTP za pomocą Posh-SSH w PowerShellu.

How to use SFTP in Windows

Aby pracować z plikami za pośrednictwem SFTP, należy najpierw nawiązać sesję. W tym celu uruchom w PowerShellu następujące polecenie:

New-SFTPSession -Computername 192.168.101.209

Po uruchomieniu polecenia wyświetli się okno uwierzytelniania. Wprowadź nazwę użytkownika i hasło, aby uzyskać dostęp do zdalnej maszyny z systemem Linux, na której znajdują się pliki, do których chcesz uzyskać dostęp za pośrednictwem SFTP. Jeśli wprowadziłeś prawidłowe dane uwierzytelniające, w PowerShellu powinny pojawić się informacje o numerze sesji SFTP, adresie IP zdalnego hosta oraz stanie połączenia. Po utworzeniu sesji przypisywany jest jej numer indeksowy.

How to use SFTP in PowerShell – connecting to a server and creating a new session

Zawsze możesz wpisać polecenie pomocy z odpowiednimi argumentami, aby wyświetlić skróconą informację o składni poleceń PowerShell:

help New-SFTPSession

Wyświetl listę wszystkich dostępnych poleceń PowerShell: Get-Command -Module Posh-SSH

lub

Get-command -Name * -module *posh-ssh

Oto metoda tworzenia sesji SSH, która umożliwia uruchomienie polecenia na zdalnym hostcie, na przykład, aby wymienić pliki w katalogu:

Import-Module Posh-SSH

$SSHSession = New-SSHSession -ComputerName 192.168.101.209 -Credential $(Get-Credential) -Verbose

$SSH = $SSHSession | New-SSHShellStream

Invoke-SSHCommand -Index 0 -Command "ls -l /home/user1/shared"

PowerShell SFTP – listing files in a directory of an SFTP server

Tworzenie skryptu PowerShell

Utwórzmy skrypt testowy, aby zbadać podstawowe operacje, które można wykonywać w PowerShell podczas pracy z zasobami SFTP. To nie jest skrypt SFTP, to jest skrypt PowerShell do pracy z SFTP. Ten skrypt testowy powinien skopiować plik instalatora .NET Framework z zdalnej maszyny Linux na lokalną maszynę z Windows.

Utwórz plik skryptu test-PS.ps1 zawierający poniżej:

#Creating a folder to store files downloaded from the SFTP share

New-item -itemtype directory -force -path c:tempps

#Setting credentials for the user account

$password = ConvertTo-SecureString "My_Password000" -AsPlainText -Force

$creds = New-Object System.Management.Automation.PSCredential ("user1", $password)

#Establishing an SFTP session

$Session = New-SFTPSession -Computername 192.168.101.209 -credential $creds

#Downloading the .NET installer file by using the established SFTP session

Get-SFTPFile -SessionId $session.SessionID -RemoteFile /home/user1/shared/NetFrameworkNDP462.exe -LocalPath c:tempps

Otwórz PowerShell na maszynie z Windows, przejdź do folderu, w którym przechowywany jest ten skrypt testowy, i uruchom skrypt

.test-PS.ps1

Plik NetFrameworkNDP462.exe powinien zostać skopiowany z /home/user1/shared/ (na zdalnej maszynie Linux) do C:tempps (na lokalnej maszynie z Windows). Jak widać na zrzucie ekranu poniżej, plik został pomyślnie skopiowany w moim przypadku.

PowerShell SFTP – copying a file from an SFTP server in PowerShell

Aby wymienić pliki w katalogu w zasobie SFTP, można utworzyć skrypt PowerShell z następującą zawartością:

$passwordTest = "Your_Password000"

$securePasswordTest = ConvertTo-SecureString $passwordTest -AsPlainText -Force

$credentialsTest = New-Object System.Management.Automation.PSCredential ("user1", $securePasswordTest)

$sessionTest = New-SFTPSession -ComputerName 192.168.101.209 -Credential $credentialsTest -AcceptKey

$sourceTest = "/home/user1/shared/"

$destinationTest= "c:tempps"

Get-SFTPChildItem -Recursive $sessionTest -Path $sourceTest | ForEach-Object{

   if ($_.Fullname -like '*.csv')

   {

      Get-SFTPFile $sessionTest -RemoteFile $_.FullName -LocalPath $destinationTest -Overwrite

   }

   write-output $_.FullName

}

Remove-SFTPSession $sessionTest -Verbose

Gdzie:

Your_Password000 jest hasłem dla konta użytkownika używanym do połączenia przez SSH z udostępnianiem SFTP;

user1 jest nazwą użytkownika;

192.168.101.209 jest adresem IP zdalnego hosta, do którego podłączamy się, aby uzyskać dostęp do plików przez SFTP.

Zapisz skrypt jako list-files.ps1 i uruchom ten skrypt w PowerShell na lokalnej maszynie z folderu, w którym przechowywany jest ten plik skryptu.

.list-files.ps1

Zwróć uwagę na -Recursive parametr zdefiniowany w skrypcie testowym. Na zrzucie ekranu poniżej można zobaczyć wyniki stosowania parametru -Recursive oraz bez tego parametru.

How to use SFTP in PowerShell – checking contents of a directory on a remote server

Jedną z wad uruchamiania skryptów takich jak te pokazane w powyższych przykładach jest to, że poświadczenia są przechowywane w czystym tekście skryptu, co nie jest bezpieczne. Użytkownik, który może otworzyć skrypt (nawet z uprawnieniami tylko do odczytu), może zobaczyć hasło i użyć tego hasła do nieautoryzowanego dostępu.

Istnieje metoda zwiększenia poziomu bezpieczeństwa i przechowywania hasła w zaszyfrowanym widoku w pliku. Windows Data Protection API służy do zaszyfrowania hasła, które można uzyskać tylko z konta użytkownika i komputera używanego do utworzenia tego pliku hasła. (get-credential).password | ConvertFrom-SecureString | set-content "C:temppassword.txt"

How to use SFTP in PowerShell – saving an encrypted password to a file

Hasło zostaje zapisane w zaszyfrowanej formie w pliku tekstowym. Jeśli ktoś zobaczy zawartość tego pliku, hasło nie jest wyświetlane jako tekst jawny.

A password for an SFTP user account is encrypted and saved in the text file

Kiedy potrzebujesz wprowadzić hasło, zdefiniuj plik z zapisanym zaszyfrowanym hasłem (w naszym przypadku C:temppassword.txt ).

$password = Get-Content "C:temppassword.txt" | ConvertTo-SecureString

$credential = New-Object System.Management.Automation.PsCredential("user1",$password)

Ta metoda definicji hasła jest bardziej bezpieczna. Możesz zmodyfikować swój skrypt, w którym zdefiniowałeś hasło. Zamiast otwierania skryptu w edytorze tekstu, możesz kliknąć prawym przyciskiem myszy na plik ps1 i w menu kontekstowym wybrać Edit.

PowerShell SFTP automation – editing a script file

Otwiera się Windows PowerShell ISE. To natywne narzędzie systemu Windows, które koloruje składnię dla większej wygody i wyświetla dostępne komendy PowerShell w prawym panelu.

SFTP script editing for running in PowerShell

Komendy w teście skryptu są teraz następujące:

New-item -itemtype directory -force -path c:tempps

$password = Get-Content "C:temppassword.txt" | ConvertTo-SecureString

$creds = $credential = New-Object System.Management.Automation.PsCredential("user1",$password)

$Session = New-SFTPSession -Computername 192.168.101.209 -credential $creds

Get-SFTPFile -SessionId $session.SessionID -RemoteFile /home/user1/shared/NetFrameworkNDP462.exe -LocalPath c:tempps

Możesz ponownie zmodyfikować swój skrypt i ustawić go do wykonania pliku instalatora pobranego na komputerze z systemem Windows. Komenda do instalacji .NET Framework w trybie cichym (z katalogu, w którym znajduje się plik instalatora) to:

.NetFrameworkNDP462.exe /q /norestart

Wpisz nazwę swojego pliku instalacyjnego, jeśli nazwa jest inna.

Dodaj linię na końcu skryptu:

Start-process "C:temppsNetFrameworkNDP462.exe" -argumentlist /q /norestart

Jeśli chcesz usunąć plik instalacyjny po zakończeniu instalacji, rozważ dodanie tej linii na końcu skryptu:

remove-item -path "C:temppsNetFrameworkNDP462.exe" -recurse -force

Użycie PowerShell i Posh-SSH pozwala na automatyzację operacji w PowerShell z wykorzystaniem protokołu SFTP do kopiowania plików pomiędzy hostami w sieci. Możesz stworzyć skrypt do pobierania plików i ich wykonywania, aby zaoszczędzić czas, gdy musisz przeprowadzić masową instalację oprogramowania na dużej liczbie komputerów.

Podsumowanie

Teraz możesz kopiować pliki do/ze maszyn Linux przez SFTP, jeśli serwer SSH jest skonfigurowany na maszynach Linux. Posh-SSH to moduł PowerShell, który jest wymagany do korzystania z SFTP na komputerach z Windows, z których chcesz uzyskać dostęp do zdalnych serwerów SFTP i wykonywać zadania automatyzacji SFTP. PowerShell i SFTP mogą być używane przez dostawców usług zarządzanych oraz administratorów systemów w organizacjach.

PowerShell jest często używany do zarządzania maszynami wirtualnymi Hyper-V oraz maszynami wirtualnymi VMware (w PowerCLI). Pamiętaj, aby wykonać kopię zapasową maszyn wirtualnych Hyper-V. Tak samo jak PowerShell jest używany do automatyzacji uruchamiania komend, NAKIVO Backup & Replication automatyzuje wykonywanie kopii zapasowych maszyn wirtualnych i zapewnia wiele dodatkowych funkcji ochrony danych. Co więcej, produkt wspiera instalację w Trybie Multi-Tenant, co jest szczególnie przydatne dla dostawców usług zarządzanych. Pobierz bezpłatną edycję programu NAKIVO Backup & Replication i już dziś zacznij chronić swoje maszyny wirtualne i fizyczne.

Wypróbuj NAKIVO Backup & Replication

Wypróbuj NAKIVO Backup & Replication

Skorzystaj z bezpłatnej wersji próbnej, aby zapoznać się ze wszystkimi funkcjami rozwiązania w zakresie ochrony danych. 15 dni za darmo. Bez żadnych ograniczeń dotyczących funkcji ani pojemności. Nie jest wymagana karta kredytowa.

People also read