There are a number of ways to leverage the FRP connection for pushing files to remote QWS clients. Below are a few options that have been tested for functionality, but any tool that can leverage the IP and port information provided by the FRP web tool can be used for this purpose.
Linux Management Host
Multiple Option - PSSH and PSCP
- The source can be found here - https://github.com/ParallelSSH/parallel-ssh. Depending on your host OS, there are also pre-built RPM and DEB files available from repositories
- Create a file (ie. QWS_CLIENTS) with each remote IP and port of the QWS clients, each on their own line as: admin_user@FRP_IP:PORT
- Alternatively, this file can also be directly downloaded from the portal, but that will only be populated with currently connected clients. Ports are configured dynamically, so this will change over time as client disconnect / reconnect.
- To push files in parallel to all QWS clients, the syntax is as follows:
- pscp.pssh -h QWS_CLIENTS filename /remotedir
- Success / failure status will be presented back in the CLI for each line in the QWS_CLIENTS file
- This method would allow for the same file to be transferred to multiple targets at once
- To execute the same command on multiple QWS clients in parallel:
- pssh -i -h QWS_CLIENTS "command to be executed"
- Success / failure status will be presented back in the CLI for each line in the QWS_CLIENTS file
- This method would allow for the silent installation on multiple targets at once
- Note that the file will either have to be an MSI, or and EXE that supports silent command line switching (ie - WinSCP-install.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART)
- Create a file (ie. QWS_CLIENTS) with each remote IP and port of the QWS clients, each on their own line as: admin_user@FRP_IP:PORT
Individual Option - SSH and SCP
- From the FRP website, find the entry for the client, and note the port number. The syntax to connect is as follows:
Windows Management Host
Multiple Option - WSUS
- For this option, you will need to have a Windows server available in your infrastructure, and have WSUS installed. Configuring each QWS client to connect to this machine for Windows updates will give you a variety of ways to push file and configuration updates. This required advanced knowledge of WSUS, and will not be covered in the scope of this document
- Alternatively, if there is an Active Directory server available, files can also be pushed to domain joined QWS clients with group policy
Individual Option - Chocolatey
Chocolatey is an open source repository for Windows, that acts much the same way that yum or apt-get do for Linux distributions. There is a list of community maintained packages here: https://chocolatey.org/packages.
There is also documentation on creating custom packages here: https://chocolatey.org/docs/create-packages
In order to install Chocolatey on your local admin machine, open PowerShell and enter the folllowing:
- Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
Installing Chocolatey on the remote client will require that PowerShell be opened in elevated mode. Then enter the following commands:
- netsh winhttp reset proxy
- Enable-PSRemoting -Force -SkipNetworkProfileCheck
- Set-Item wsman:\localhost\client\trustedhosts *
- Restart-Service WinRM
- Test-WsMan QWS_VM_NAME
Once connectivity has been validated with the final command in the list above, packages can be installed as follows:
- Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
- Invoke-Command -ComputerName QWS_VM_NAME -ScriptBlock { choco install PACKAGE_NAME -y } -credential Administrator
It's possible to also use Chocolately to install on multiple machines at once, by adding this script block to the command above:
$ComputerList = "QWS_CLIENT1","QWS_CLIENT_2"
foreach ($Computer in $ComputerList)
{
Invoke-Command -ComputerName $Computer
{
iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
choco install PACKAGE_NAME -y
}
}