diff --git a/docs/docs/design/images/2022-05-15-12-57-36.png b/docs/docs/design/images/2022-05-15-12-57-36.png new file mode 100644 index 00000000..2bb83c01 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-12-57-36.png differ diff --git a/docs/docs/design/images/2022-05-15-13-01-56.png b/docs/docs/design/images/2022-05-15-13-01-56.png new file mode 100644 index 00000000..381e54b8 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-01-56.png differ diff --git a/docs/docs/design/images/2022-05-15-13-03-25.png b/docs/docs/design/images/2022-05-15-13-03-25.png new file mode 100644 index 00000000..6236bdbf Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-03-25.png differ diff --git a/docs/docs/design/images/2022-05-15-13-36-01.png b/docs/docs/design/images/2022-05-15-13-36-01.png new file mode 100644 index 00000000..5cb7ac5e Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-36-01.png differ diff --git a/docs/docs/design/images/2022-05-15-13-41-26.png b/docs/docs/design/images/2022-05-15-13-41-26.png new file mode 100644 index 00000000..43cb3a22 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-41-26.png differ diff --git a/docs/docs/design/images/2022-05-15-13-44-41.png b/docs/docs/design/images/2022-05-15-13-44-41.png new file mode 100644 index 00000000..a6cc15cc Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-44-41.png differ diff --git a/docs/docs/design/images/2022-05-15-13-47-26.png b/docs/docs/design/images/2022-05-15-13-47-26.png new file mode 100644 index 00000000..9fefd71a Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-47-26.png differ diff --git a/docs/docs/design/images/2022-05-15-13-54-44.png b/docs/docs/design/images/2022-05-15-13-54-44.png new file mode 100644 index 00000000..53a337aa Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-54-44.png differ diff --git a/docs/docs/design/images/2022-05-15-13-55-28.png b/docs/docs/design/images/2022-05-15-13-55-28.png new file mode 100644 index 00000000..c67e3756 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-55-28.png differ diff --git a/docs/docs/design/images/2022-05-15-13-56-09.png b/docs/docs/design/images/2022-05-15-13-56-09.png new file mode 100644 index 00000000..48aea2d3 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-56-09.png differ diff --git a/docs/docs/design/images/2022-05-15-13-56-46.png b/docs/docs/design/images/2022-05-15-13-56-46.png new file mode 100644 index 00000000..7e984676 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-56-46.png differ diff --git a/docs/docs/design/images/2022-05-15-13-58-06.png b/docs/docs/design/images/2022-05-15-13-58-06.png new file mode 100644 index 00000000..1c1c8de6 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-58-06.png differ diff --git a/docs/docs/design/images/2022-05-15-13-58-29.png b/docs/docs/design/images/2022-05-15-13-58-29.png new file mode 100644 index 00000000..49b9444f Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-58-29.png differ diff --git a/docs/docs/design/images/2022-05-15-13-58-56.png b/docs/docs/design/images/2022-05-15-13-58-56.png new file mode 100644 index 00000000..e3df1f03 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-58-56.png differ diff --git a/docs/docs/design/images/2022-05-15-13-59-54.png b/docs/docs/design/images/2022-05-15-13-59-54.png new file mode 100644 index 00000000..2cce5c27 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-13-59-54.png differ diff --git a/docs/docs/design/images/2022-05-15-14-00-21.png b/docs/docs/design/images/2022-05-15-14-00-21.png new file mode 100644 index 00000000..a850d0a8 Binary files /dev/null and b/docs/docs/design/images/2022-05-15-14-00-21.png differ diff --git a/docs/docs/design/images/Aspose.Words.61f7827a-f327-4beb-a49f-32222e664dff.002.png b/docs/docs/design/images/Aspose.Words.61f7827a-f327-4beb-a49f-32222e664dff.002.png new file mode 100644 index 00000000..3f524564 Binary files /dev/null and b/docs/docs/design/images/Aspose.Words.61f7827a-f327-4beb-a49f-32222e664dff.002.png differ diff --git a/docs/docs/design/images/Aspose.Words.61f7827a-f327-4beb-a49f-32222e664dff.011.png b/docs/docs/design/images/Aspose.Words.61f7827a-f327-4beb-a49f-32222e664dff.011.png new file mode 100644 index 00000000..399b7d36 Binary files /dev/null and b/docs/docs/design/images/Aspose.Words.61f7827a-f327-4beb-a49f-32222e664dff.011.png differ diff --git a/docs/docs/design/index.md b/docs/docs/design/index.md index e8a2817b..ae6f3630 100644 --- a/docs/docs/design/index.md +++ b/docs/docs/design/index.md @@ -1,9 +1,350 @@ # Design and Architecture -[Design and Architecture Guide](https://meshcentral.com/info/docs/MeshCentral2DesignArchitecture.pdf) +![](images/2022-05-15-12-57-36.png) +Design and Architecture Guide [as .pdf](https://meshcentral.com/info/docs/MeshCentral2DesignArchitecture.pdf) [as .odt](https://github.com/Ylianst/MeshCentral/blob/master/docs/MeshCentral Design & Architecture v0.0.4.odt?raw=true) ## Video Walkthru
+ +## Abstract + +This document attempts to describe the architecture and design of the second version of MeshCentral on which work started in late 2016. The document covers the overview of the design, goes in details about the protocol and various decisions and trade-offs. This document is intended for anyone that wants to understand the inner workings of MeshCentral or someone that wants to make a security review of the software. The software and added documentation and tutorial videos are available at:[ https://www.meshcommander.com/meshcentral2 ](https://www.meshcommander.com/meshcentral2) + +## Introduction + +MeshCentral is a free open source web-based remote computer management software. After over 8 years of working on the first version of MeshCentral, work as moved to version 2 which this document described. In 2010, when MeshCentral v1 was first designed, the Internet was very different. HTML5 and WebSocket did not exists, no such thing as a software container, etc. With MeshCentral version 2, a complete redesign was made to make the software much more in line with modern Internet deployment models. + +The advent of NodeJS, WebSocket, WebRTC and other web technologies coming out in the last 10 years has really made the design of MeshCentral v2 not only possible, but quite amazing. Being able to use a single programming language across platforms to JavaScript. Being able to easily exchange objects using web socket and JSON, being able to scale with WebRTC, deploy quickly with containers, etc. Looking back at the incredible advances in web technologies lead to an almost mandatory MeshCentral redesign. + +## Goals & Requirements + +The goal of MeshCentral is to be the best open source remote management software in the world. Remote computer management is a big area with many different usages and requirements. To best suite this, it’s important to have software that is as flexible as possible. Additionally, there are many other goals: + +- Must be quick and easy to install. +- Must install on all major operating systems and platforms. +- Can be deployed on small computers and the cloud. +- Can be deployed within containers. +- Can be deployed in many network environments. +- Must support both software agent and Intel® AMT hardware agent. +- Must only use open source dependencies. +- Must provide all basic remote management features (desktop, terminal, files…) +- Must use the network efficiently. +- Must have a real time user interface. +- Must be easy to use. +- Must be fast. +- Etc. + +Basically, all the requirements you would expect from open source software that can go viral. Since this software is sponsored by Intel, it’s going to support Intel® AMT really well, making it possible to manage a remote computer regardless of its OS or power state. Intel® AMT is not required to use this software, however it’s a great fit. + +## Design Overview + +In this section, we do a very high level overview of MeshCentral’s design. MeshCentral has 3 big components: the server, the agent and the web application. + +![](images/2022-05-15-13-01-56.png) + +There is of course more software that support these 3 components like the Windows Server Installer, ClickOnce application, MeshCentral Discovery Tool and more. These will be covered later. Most of the document will focus on these 3 main components. Another component that is significant but not part of the software itself is Intel® AMT (Intel® Active Management Technology). MeshCentral supports Intel AMT that acts like an optional hardware based agent for MeshCentral. + +When it comes to programming languages used, MeshCentral is mostly built with JavaScript with the agent having significant portable C code. This makes things pretty simple since the browser, server and agents can share some of the code. More importantly, JavaScript is great at parsing JSON and so, the main protocol used between the components is JSON over Web Socket. + +![](images/2022-05-15-13-03-25.png) + +It’s important to note that while JavaScript is used in all 3 components, the JavaScript runtime is very different. The JavaScript written to run within a browser sandbox uses different calls than the one running in NodeJS on the server or on the agent with DukTape. + +This is probably a good time to introduce DukTape [(https://www.duktape.org/)](https://www.duktape.org/). Unlike the browser and NodeJS JavaScript engines, DukTape is a less known JavaScript runtime written in C. The agent is built in C code with little smarts other than being able to securely connect back to the server. The server then pushes to the agent a JavaScript file that the agent runs. This makes the agent very flexible since a developers can quickly change the JavaScript that is pushed to the agent and change the agent’s behavior instantly. + +Another interesting design decision is that MeshCentral makes almost no use of RESTful API’s. Instead, almost everything is done using WebSocket. This allows JSON objects to be exchanged fully asynchronously. There is no pushing the refresh button or polling as events are sent by all actors in real time. + +## MeshCentral server + +The MeshCentral server is a NodeJS application that is published on NPM at: [https://www.npmjs.com/package/meshcentral](https://www.npmjs.com/package/meshcentral) Many administrators can get started quickly using “npm install meshcentral” once NodeJS is installed. MeshCentral will work on Node 6.x and higher. + +## Dependencies + +The server makes use of the following dependencies on NPM. These are all automatically installed by NPM when installing MeshCentral. + +Can be found in the file: `MeshCentralServer.njsproj` + +The main takeaway is that MeshCentral is mostly an ExpressJS application. This is not a complete list of dependencies as many of these packages have their own dependencies creating a large tree. The security of these packages is a concern and all of the dependency tree is a concern. In addition to the dependencies that are “hard coded”, there are a few more that are installed only when needed. These are: + +### node-windows + +**greenlock, le-store-certbot, le-challenge-fs**: Installed on all Windows install. Allows background service install: + +**le-acme-core**: Installed only when Let’s Encrypt must be used: + +**mongojs**: Installed when MongoDB is in used. + +**nodemailer**: Installed when SMTP server support is in used. + +MeshCentral will run `npm install` automatically when any of these optional modules are needed but not currently available. + +## Code files and folders + +Someone would think the server is rather simple when taking a look at the MeshCentral server code files. At a high level, the entire server has 3 folders, 3 text files and a manageable number of .js files that are fairly self-descriptive. Here is a list of the source files and folders. + +### Folders + +`agents`: Compiled agents, install scripts, tools and agent JavaScript. + +`public`: Static web elements such as images, CSS, HTML and more. + +`views`: Main web application, login screen and messenger app. + +### Configuration & text files + +`package.json`: Description of the MeshCentral package on NPM. +`sample-config.json`: A sample “config.json” file to get started. +`readme.txt`: Readme file published with the MeshCentral package. + +### Code files + +``` + amtevents.js | Used to scan a local network for Intel AMT machines. + amtscanner.js | Used to run Intel AMT scripts from MeshCommander. + amtscript.js | Used to generate and perform certificate operations. + certoperations.js | Various commonly used methods. + common.js | Used to access the MongoDB or NeDB database. + db.js | Used to modify windows executables. + exeHandler.js | Used to insert credentials in an HTTP stream. + interceptor.js | Used to obtain and use a Let’s Encrypt certificate. + letsencrypt.js | Used to offload RSA sign to other CPU cores. + meshaccelerator.js | Used to communicate to agents. + meshagent.js | The is the main module, gets the server started. + meshcentral.js | Used to send SMTP mails. + meshmail.js | Used to relay agent and browser web socket connections. + meshrelay.js | MeshCentral server discovery when in LAN mode. + meshscanner.js | Used to communicate with browsers. + meshuser.js | Used to communicate to Intel® AMT CIRA. + mpsserver.js | Used for server-to-server communication. + multiserver.js | Performs password hash + salt. + pass.js | Used to handle HTTP traffic. + redirserver.js | Used to upgrade legacy MeshCentralv1 agents. + swarmserver.js | Handles HTTPS traffic. + webserver.js | Server background install on Windows. + winservice.js | Server background install on Windows. +``` + +At a high level, the MeshCentral.js file will get the server started. By default, it will start the webserver.js on port 443, redirectserver.js on port 80 and mpssrver.js on port 4433. The webserver.js file will create a meshuser.js or meshagent.js instance each time a user or agent connects. The other files support various usages, but this is the basic working on the server. + +### Server database + +One of the big design decision on the server is its database. We want something that scales and so, opted to deal with the good and the bad of a NoSQL database, MongoDB. On the other hand, we want the server to be really simple to install for people who want to try it out or want to manage 100 computers or less. We don’t want the added learning curve of MongoDB for people that don’t really need it. It turned out, we can have both. NeDB is a NPM package that provides a simple MongoDB-like API while being completely implemented in NodeJS. For most people, this is plenty good to get started. + +By default, MeshCentral will just create and use a NeDB database, but can be configured to use MongoDB. The internal code path for both databases are almost exactly identical so the “db.js” file handles both, almost the same way and the exact database in use is completely abstracted from the rest of the server code. + +## Certificates + +MeshCentral makes use of many certificates to accomplish many security tasks. When first running the server or an agent, both of these actors will generate certificates. The agent will generate one or two certificates on the first run and the server will generate four certificates. + +![](images/2022-05-15-13-36-01.png) + +In this section we review what certificates are created, what are their uses and how they are stored. Most administrators using MeshCentral will not need a deep understanding of this section to run the server, however, a basic understanding of this section can help understand how to best protect the server’s critical security assets. + +### Server Certificates + +As indicated above, the MeshCentral server creates four certificates when it first runs. It uses ForgeJS to perform certificate creation and all four certificates below are saved in the “meshcentral-data” folder. The four certificates are: + +#### Server root + +`root-cert-public.crt` + +This is a self-signed root certificate that is used only to issue the 3 next certificates. This certificate can be useful when it’s installed as a root of trust in some situations. For example, when Intel AMT connects to the MPS server on port 4433, it will correctly connect only if this root certificate is loaded into Intel AMT as a trusted certificate. Browser can also be setup to trust this root certificate in order to create a trusted connection between a browser and the servers HTTPS port. This certificate is RSA3072 unless the option “--fastcert" is used, in that case a RSA2048 certificate is generated. + +#### MPS certificate + +`mpsserver-cert-public.crt` + +This is a TLS certificate signed by the root above used as a TLS server certificate on the MPS port 4433. Intel AMT computers will connect to this port and verify the certificate time, common name and that it’s signed by the root above. This certificate is not typically changed, even when the server is running in production. This certificate is always generated as RSA2048 because older Intel AMT firmware will not accept certificates with larger keys. + +#### Web certificate + +`webserver-cert-public.crt` + +This is the default certificate used to secure the HTTPS port 443. It is signed by the root above and is the certificate users will first see then connecting the browser to the server. Often, users will need to ignore the browser security warning. This certificate is RSA3072 unless the option “--fastcert" is used, in that case a RSA2048 certificate is generated. In production environments, this certificate is replaced with a real certificate. There are many ways to change this certificate for a more appropriate certificate in production environments: + +- You can replace the “webserver-cert-\*” files in the “meshcentral-data” folder. +- You can use Let’s Encrypt which will override this certificate automatically. +- You can use a reverse-proxy in front of the server with “--tlsoffload". + +#### Agent certificate + +`agentserver-cert-public.crt` + +This certificate is used to authenticate the server to agents. It’s signed by the root above and when installing an agent, the hash of this certificate is given to the agent so that it can connect back to the server securely. This certificate is RSA3072 unless the option “--fastcert" is used, in that case a RSA2048 certificate is generated. + +The “meshcentral-data” folder contains critical server information including private keys therefore, it’s important that it be well protected. It’s important to backup the “meshcentral-data” folder and keep the backup in a secure place. If, for example the “agent certificate” on the server is lost, there is no hope for agents ever be able to connect back to this server. All agents will need to be re-installed with a new trusted certificate. + +If someone re-installs a server, placing the “meshcentral-data” folder back with these certificates should allow the server to resume normal operations and accept connections for Intel AMT and agents as before. + +### Agent Certificates + +The mesh agent generates one or two RSA certificates when it first starts. On smaller IoT devices such as a Raspberry Pi, this can take a little while to do and the CPU will spike to 100% during this time. This is normal and only occurs the first time the agent runs. + +![](images/2022-05-15-13-41-26.png) + +The certificates are generated a little differently depending on the platform. On Windows, the Mesh Agent will use Microsoft cryptographic providers to harder the agent root cert. If available, the agent will use the platform TPM to harden the certificate. On other platforms, only one certificate is generated and used for both agent authentication to the server and WebRTC session authentication. + +#### Agent root certificate + +This certificate is the root trust of the agent. The SHA384 hash of this certificates public key is the agent’s identifier on the server. When a agent connects to the server using web socket, it performs a secondary authentication check using this certificate. The server will compute the agent’s identifier after the agent sent a signed proof to the server. This certificate is also used to sign the secondary certificate below when it’s needed. + +#### Secondary certificate + +This is a certificate signed by the agent root above. It’s currently only used by WebRTC to perform dTLS authentication to a remote browser. This certificate does not need to be signed by a trusted CA for WebRTC purposes since the hash of the certificate will be sent to the browser using a trusted path. If the agent root certificate is not hardened using platform cryptography, the secondary certificate is not created and the agent root cert is used for all purposes. + +A possible attack would occur if someone were to be able to access the agent root certificate. They could impersonate the agent to the server. Agents don’t have any rights to perform management operations on the server or other agents, but by impersonating a agent, a rogue agent would pretend to be an office computer to which administrator would login with their username & password, especially when the root is not hardened. Some care should be taken to protect the “meshagent.db” file and to not give important information to untrusted agents. + +## TLS Security + +MeshCentral makes heavy use of Transport Layer Security (TLS) and datagram-TLS (dTLS) to authenticate and encrypt network traffic between the browser, server and agent. Configuring TLS settings correctly is essential to making sure communications are secure and to minimize attacks on open ports. + +Probably the most important TLS configuration is for the MeshCentral server ports 443 and 4433. These two ports are exposed to the Internet and so, should be setup as securely as possible. + +### MeshCentral HTTPS port 443** + +The HTTPS port on the MeshCentral server will only support TLS 1.2 and above, and makes use of only 6 cypher suites: + +``` +TLS\_ECDHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384 (0xc030) +TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384 (0xc028) +TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA (0xc014) +TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256 (0xc02f) +TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA256 (0xc027) +TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA (0xc013) +``` + +Note that these cipher suites are all perfect forward secrecy (PFS) suites and are considered cryptographically secure as of the writing of this document. When the server is deployed on the Internet,[ https://ssllabs.com ](https://ssllabs.com/)gives the server an A rating with no known vulnerabilities and no weak ciphers detected. + +![](images/2022-05-15-13-44-41.png) + +SSL Labs confirms that all major browsers should be able to connect correctly to this server. + +### MeshCentral MPS port 4433 + +The Manageability Presence Server (MPS) port 4433 is used for incoming Intel AMT CIRA connections. By default it uses a TLS certificate that is signed by a self-signed root certificates. This port is not intended to be connected to by typical browsers, only Intel AMT should connect to this port. Note that the TLS certificate generated by MeshCentral for port 4433 is RSA 2048bits, this is because older Intel AMT firmware don’t support RSA 3072. Because the port is not secured using a trusted certificate, SSL Labs will not rate the security of this server. + +![](images/2022-05-15-13-47-26.png) + +This is fully expected. Note that SSL Labs will not test servers that are not on port 443. To perform a test like this MeshCentral must be set temporarily with the MPS port set to 443 and the normal HTTPS port set to a different value. + +Because older Intel AMT computers that only support TLS 1.0 are common, the server supports TLS v1.0, v1.1 and v1.2 with the following 12 cipher suites: + +``` +TLS\_ECDHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384 (0xc030) +TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384 (0xc028) +TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA (0xc014) +TLS\_RSA\_WITH\_AES\_256\_GCM\_SHA384 (0x9d) +TLS\_RSA\_WITH\_AES\_256\_CBC\_SHA256 (0x3d) +TLS\_RSA\_WITH\_AES\_256\_CBC\_SHA (0x35) +TLS\_ECDHE\_RSA\_WITH\_AES\_128\_GCM\_SHA256 (0xc02f) +TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA256 (0xc027) +TLS\_ECDHE\_RSA\_WITH\_AES\_128\_CBC\_SHA (0xc013) +TLS\_RSA\_WITH\_AES\_128\_GCM\_SHA256 (0x9c) +TLS\_RSA\_WITH\_AES\_128\_CBC\_SHA256 (0x3c) +TLS\_RSA\_WITH\_AES\_128\_CBC\_SHA (0x2f) + +``` + +The suites starting with “TLS\_RSA\_” don’t have perfect forward secrecy (PFS) and so, are considered weak by SSL Labs. However, these are generally the suites that are supported by Intel AMT. + +## Agent to server handshake + +One interesting aspect of MeshCentral’s design is how the agent connects to the server. We wanted a way for the agent to connect to the server that would be similar to how browsers connect to web servers. This allows for a large number of agents to connect just like if a large number of browsers where connecting. All of the infrastructure that helps web server’s scale would be put to use in the same way for agent connections. For example: TLS offload hardware, load balancers, reverse-proxies, web server scaling, etc. could all be put to use. It also makes the server easier to setup because only one port (HTTPS 443) is needed for both users and agents. + +One big difference between the agent connecting and a typical browser is how the server is authenticated. Browsers have a set of known trusted root certificates. The server’s web certificate is checked for validity including the name, time trusted CA and more. The agent does not have this. Instead, it just has a hash to a private server certificate. + +The public facing web certificate of the server can change frequently. For example, Let’s Encrypt certificates are valid 90 days. Agents need to be able to validate a specific server for a long time and don’t really need to trust anything else except one specific server. We also don’t want to tie the agents to a specific domain name as we could change that in the future or want to support servers with dynamic IP addresses and no fixed DNS names. + +To handle all this, the agent performs a TLS connection to the server and will first see the web certificate of the server. It will then exchange a set of web socket binary messages to the server to perform a secondary authentication with the server. + +![](images/2022-05-15-13-54-44.png) + +The secondary check allows the agent to confirm that this server does own the private key of the private certificate expected by the agent. The agent caches the hash of the “outer” web certificate. When re-connecting, if the agent sees the same outer web certificate, it will skip the secondary check. For obvious security raisons, it’s important that the agent not accept any management messages until the secondary check is completed or skipped. + +To prevent man-in-the-middle attacks, the secondary check also “pins” the outer web certificate. That is, the server both confirms it’s the right server and indicates to the agent the hash of the outer certificate that it must have seen during the TLS connection. The agent must check this hash to make sure there is no attacker in the middle. + +The agent connection design allows for reverse-proxies and TLS offload hardware. The agent will first connect a TLS session to the offload hardware. Clear traffic flows between the offload hardware and the server which will perform the secondary check if needed. + +![](images/2022-05-15-13-55-28.png) + +To makes all this work, the MeshCentral server must be able to fetch the hash of the outer web certificate from the reverse proxy. In this case, the server does not need the private key to the web certificate. Note that when the outer web certificate is updated, the server may have to perform many secondary checks at the same time causing a server slowdown during this time. To help with this, MeshCentral will offload the RSA signing operation to many slave processes (as many as the CPU core count on the server) to speed this up. In addition, native NodeJS RSA signing is used (not ForgeJS). + +The details of the secondary certificate check look like the diagram below. To boost speed, the exchange is fully asynchronous and both sides send the first message as soon as the TLS connection completes. + +![](images/2022-05-15-13-56-09.png) + +Note that these messages are binary (not JSON). The agent must be able to connect to the server independently of the JavaScript that is running in DukTape. So this exchange is handled by native C code in the agent. Binary message 1 is sent immediately after the TLS connection is setup. Both sides will send binary message 2 when message 1 is received and message 3 when message 2 is received. + +In addition, there are two extra messages of interest that can be sent by the agent right at the start. The agent may send the server message number 4 if the secondary check can be skipped and may send binary message number 5 indicating what server hash it expects to verify. Message number 5 is interesting because a server may have many “identities” at the same time, and so, the server will use message number 5 in order to use the right Agent Server certificate. + +In order to be as secure as possible, all hashes use SHA384 and certificates are RSA3072 and nonces are generated on both sides using a cryptographic random source. The server and agent signatures are computed like this: + +![](images/2022-05-15-13-56-46.png) + +While the server will often skip its RSA signature operation due to the agents caching the outer web certificate, the server must perform an RSA verify to each agent connection. This can’t be skipped but is needed to authenticate the agent. + +Once connected, the trust relationship between the server and the agent is one-way. That is, the server has management rights on the agent, but the agent does not have any right on the server. This is important since the agent does not, by default, have any credentials to the server. Any agent can connect to the server and claim to be part of a device group. + +## Browser to agent relay and WebRTC + +Browsers and agents often need to communicate to each other. Data sessions are used for desktop, terminal, file transfers, etc. and must be setup securely. + +To setup a session between a browser and the agent, the server will send a URL to both sides to connect to. The URL is generated by the server and includes a unique connection token. It is sent to both the browser and agent using the web socket control channel and a JSON message. Both sides perform a websocket connection to the target URL and the server will “pipe” both sessions together to act as a passive relay. For security, the agent will only accept connections to the URL given by the server if the server has the same outer web certificate as its control connection. Also note that in this mode, the session is not end-to-end encrypted. The server is performing a TLS decrypt and re-encrypt and the traffic cost is high as each byte of data has to be received and sent again. + + +![](images/2022-05-15-13-58-06.png) + +The relay server is just websocket server that will wait for connections with session tokens. When two connection with the same connection token arrive, the server makes sure that at least one of the two connections is an authenticated user, it then sends the character “c” on both sides to inform both parties that the relay is starting and then pipes both sessions together. Once the session is started, the browser and agent are free to send messages to each other. Note that when the server sends the relay URL to the agent, it also sends to the agent the user’s permissions flags. This may be used by the agent to limit what the user can do on this session. + +With this design, the flow control between the browser and agent is simple, each session gets its own end-to-end connection and the server will apply appropriate TCP back pressure on both sides as needed. + +A unique feature of MeshCentral is its use of WebRTC. WebRTC was introduced in major browsers as a way to allow browsers to directly communicate to each other and perform audio/video streaming. The mesh agent has a WebRTC data-only stack that is custom built for this project in C code. It’s compatible with Chrome and Firefox implementations and once a session is set up, allows data to flow directly from the browser to the agent, bypassing the server. + +![](images/2022-05-15-13-58-29.png) + +The use of WebRTC allows MeshCentral to scale better, to offer a faster user experience and lower hosting costs all at the same time. However, WebRTC is not easy, especially when you must maintain the C code for it and have to keep up with browser implementations, but the benefits are clear. + +To setup WebRTC, browsers typically use STUN and TURN servers to get traffic thru any network obstacles (routers, proxies, firewalls). This infrastructure can be complex to setup especially if an administrator is not familiar with WebRTC concepts. To make things easy, MeshCentral opted to always start by using a websocket relay thru the server to get things started. While a session is active, the browser and agent will attempt to automatically switch the session traffic to WebRTC when possible. This way, the session always works and gets more efficient when network conditions allow. + +To perform the switch-over, both browser and agent will exchange WebRTC control messages over the newly established web socket relay session. + +![](images/2022-05-15-13-58-56.png) + +In order to differentiate session traffic from WebRTC control traffic, the browser and agent agree to send WebRTC setup traffic using web socket text fragments. All other session traffic is sent using binary fragments. The agent has a special API allowing a session to be piped for a single fragment type. So we can perform a remote desktop session to the agent while trying to setup WebRTC at the same time. + +The browser will kick off the WebRTC setup sending the initial WebRTC offer with the agent responding with a WebRTC answer. If the WebRTC session gets setup, both sides need to negotiate a clear transition from the web socket session to the WebRTC session. To do this, both sides send a start switch control fragment (this is a text fragment), the other side will respond with an ACK when the web socket session is flushed out and it’s safe to switch. + +On the agent side, the new WebRTC session inherits the user access rights of the web socket. Currently, the web socket channel is still maintained open. While it’s not strickly needed, the web socket session terminates more cleanly than WebRTC and so, oddly its closure is used to signal the end of the WebRTC session. + +## Messenger + +MeshCentral includes its own messaging web application it can be used to chat, transfer files and optionally used for audio and video chat. It’s used to support two different usages: User-to-user and user-to-computer communication. In the first usage, two users that are connected to the same MeshCentral server at the same time can chat. If you are a MeshCentral administrator, you can see the list of currently logged in users and hit the chat button to launch a chat invitation. If accepted, the Messenger is open on both sides and the session starts. Alternatively, while managing a remote computer, an administrator can hit the chat button to cause the remote computer to open a web browser to the chat application. + + +![](images/2022-05-15-13-59-54.png) + +The chat app is standalone web application that is served by the MeshCentral server using a connection token and title in the URL. Once loaded in its own web frame, the messenger web application will get the connection token and title from the URL and proceed to connect to the URL using web socket. The same web socket relay that is used for browser-to-agent connections is also used in this case for browser-to-browser connections. The server relay acts the same and pipes both sessions together after sending the character “c” to both sides. At this point, the messenger application will show the remote user as connected and chat and file transfers can start. File transfers are just a set of binary messages sent over the web socket session with lots of JSON control messages. + +Once the web socket session is setup, the messenger application will then attempt to perform a switch over to WebRTC. Both web application start by selecting a random number (not cryptographic) and the highest number will initiate the WebRTC offer. The other party will answer and both sides will trade interface candidates as they are discovered. If successful, the web socket session are flushed and the traffic is switched over to WebRTC. Because the switchover is done cleanly, it can occur while in the middle of a file transfer without the file being corrupted. + + +![](images/2022-05-15-14-00-21.png) + +Finally, the web application will determine if the local computer is attached to a microphone and if it has a camera. If so, these options are offered in the chat window and audio/video chat is available for use. The chat app allows for one way setup of audio & video sessions. This is typically what is needed in support scenarios where the audio/video session is one-way. + +The messenger web application will setup a separate WebRTC connection for audio/video in each direction but the code is present to augment the WebRTC control channel with audio/video which is a bit more efficient but more testing is needed before defaulting to this mode. + +## Additional Resources + +In addition to this document, there are a growing set of MeshCentral resources at: [https://www.meshcommander.com/meshcentral2.](https://www.meshcommander.com/meshcentral2) This includes an Installer’s documents, a User’s Guide and plenty of YouTube tutorial videos. For developers, it’s best to start on the MeshCentral GitHub repository at:[ https://github.com/Ylianst/MeshCentral.](https://github.com/Ylianst/MeshCentral) If any issues are found, it’s best to create a new issue in GitHub or mail[ ylian.saint-hilaire@intel.com.](mailto:ylian.saint-hilaire@intel.com) + +## Conclusion + +MeshCentral is a free, open source and powerful remote management solution that is cross- platform. In this document, we have covered the goals, overview, design and some details of the software. It’s hoped that this document will encourage developers to take a look at MeshCentral for more usages and review its security in detail. MeshCentral’s use of modern web technologies make it a unique and amazing solution for remote management of computers. As with any good software, MeshCentral will continue to be updated and evolve. + +## License + +MeshCentral and this document are both opens source and licensed using Apache 2.0, the full license can be found at [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/docs/docs/meshcmd/images/2022-05-15-15-11-39.png b/docs/docs/meshcmd/images/2022-05-15-15-11-39.png new file mode 100644 index 00000000..c04e32f3 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-11-39.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-21-12.png b/docs/docs/meshcmd/images/2022-05-15-15-21-12.png new file mode 100644 index 00000000..3d1224de Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-21-12.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-22-07.png b/docs/docs/meshcmd/images/2022-05-15-15-22-07.png new file mode 100644 index 00000000..346689db Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-22-07.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-23-45.png b/docs/docs/meshcmd/images/2022-05-15-15-23-45.png new file mode 100644 index 00000000..cc833b92 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-23-45.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-24-12.png b/docs/docs/meshcmd/images/2022-05-15-15-24-12.png new file mode 100644 index 00000000..a2c22954 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-24-12.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-27-41.png b/docs/docs/meshcmd/images/2022-05-15-15-27-41.png new file mode 100644 index 00000000..93d81ab9 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-27-41.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-30-02.png b/docs/docs/meshcmd/images/2022-05-15-15-30-02.png new file mode 100644 index 00000000..5af14c19 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-30-02.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-30-41.png b/docs/docs/meshcmd/images/2022-05-15-15-30-41.png new file mode 100644 index 00000000..f1ae36d2 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-30-41.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-32-15.png b/docs/docs/meshcmd/images/2022-05-15-15-32-15.png new file mode 100644 index 00000000..38e712aa Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-32-15.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-37-16.png b/docs/docs/meshcmd/images/2022-05-15-15-37-16.png new file mode 100644 index 00000000..5e0847bf Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-37-16.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-39-40.png b/docs/docs/meshcmd/images/2022-05-15-15-39-40.png new file mode 100644 index 00000000..465fff15 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-39-40.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-40-05.png b/docs/docs/meshcmd/images/2022-05-15-15-40-05.png new file mode 100644 index 00000000..fe8b4ca8 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-40-05.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-41-20.png b/docs/docs/meshcmd/images/2022-05-15-15-41-20.png new file mode 100644 index 00000000..21e428c9 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-41-20.png differ diff --git a/docs/docs/meshcmd/images/2022-05-15-15-42-01.png b/docs/docs/meshcmd/images/2022-05-15-15-42-01.png new file mode 100644 index 00000000..02244403 Binary files /dev/null and b/docs/docs/meshcmd/images/2022-05-15-15-42-01.png differ diff --git a/docs/docs/meshcmd/index.md b/docs/docs/meshcmd/index.md index 8eb362cc..350ce23a 100644 --- a/docs/docs/meshcmd/index.md +++ b/docs/docs/meshcmd/index.md @@ -1,9 +1,450 @@ # MeshCmd -[MeshCmd Command Line Tool](https://meshcentral.com/info/docs/MeshCmdUserGuide.pdf) +MeshCmd Guide [as .pdf](https://meshcentral.com/info/docs/MeshCmdUserGuide.pdf) [as .odt](https://github.com/Ylianst/MeshCentral/blob/master/docs/MeshCmd User's Guide v0.0.3.odt?raw=true) ## Video Walkthru
+ +![](images/2022-05-15-15-11-39.png) + +## Abstract + +This user guide contains all essential information for the user to make full use of MeshCmd, a command line tool used to perform tasks on MeshCentral and for Intel® AMT. This tool run on Windows and Linux and perform a wide array of different tasks. From routing traffic over the Internet to activating Intel AMT, MeshCmd is a great do it all tool for computer management. + +## Introduction + +MeshCmd, called “Mesh Command”, is a command line tool that runs on both Windows and Linux and used to perform many tasks related to computer management. As the tool continues to evolve, it will continue to be improved and acquire more features. Broadly, the tool is intended to perform three sets of tasks. + +`MeshCentral2 command line operations` +- There are command line operations that relate to interacting with the MeshCentral2 server. A good example of this is to route traffic from your computer to a remote computer on the internet thru a MeshCentral2 server. + +`Intel AMT local actions` +- If you happen to have Intel AMT on your computer, MeshCmd can take a look at the version and activation status, activate and de-activate Intel AMT and help with getting access to Intel AMT and more. + +`Intel AMT remote actions` +- Whether you have Intel AMT on your local computer or a remote computer on your network, MeshCmd can help unlock the features Intel AMT provides. From getting the state of Intel AMT remotely to running configuration scripts and loading MeshCommander into Intel AMT web storage. + +To get started, you need to download MeshCmd for your computer. MeshCmd is a single file executable that you can get on MeshCommander.com at: [http://www.meshcommander.com/meshcommander/meshcmd](http://www.meshcommander.com/meshcommander/meshcmd) + + +![](images/2022-05-15-15-21-12.png) +If you have access to a MeshCentral2 server, the download link to MeshCmd is at the bottom left of the main device page. + +![](images/2022-05-15-15-22-07.png) + +Once you click on the “MeshCmd” link, a dialog box will allow you to select the operating system you want to get a link to MeshCmd. MeshCentral will also provide an action file called meshaction.txt that contains information on how MeshCmd can connect back to that MeshCentral server. This is optional, and only used for some operations. + +Once downloaded, just run it from the command prompt or terminal window. + +``` +C:\Temp>meshcmd +MeshCentral Command (MeshCmd) +No action specified, use MeshCmd like this: + + meshcmd [action] [arguments...] + +Valid MeshCentral actions: + Route - Map a local TCP port to a remote computer. + +Valid local actions: + SMBios - Display System Management BIOS tables for this computer. + RawSMBios - Display RAW System Management BIOS tables for this computer. + MicroLMS - Run MicroLMS, allowing local access to Intel AMT. + AmtInfo - Show Intel AMT version and activation state. + AmtVersions - Show all Intel ME version information. + AmtHashes - Show all Intel AMT trusted activation hashes. + AmtCCM - Activate Intel AMT into Client Control Mode. + AmtACM - Activate Intel AMT into Admin Control Mode. + AmtDeactivate - Deactivate Intel AMT if activated in Client Control mode. + AmtAcmDeactivate - Deactivate Intel AMT if activated in Admin Control mode. + +Valid local or remote actions: + MeshCommander - Launch a local MeshCommander web server. + AmtUUID - Show Intel AMT unique identifier. + AmtAuditLog - Show the Intel AMT audit log. + AmtLoadWebApp - Load MeshCommander in Intel AMT 11.6+ firmware. + AmtClearWebApp - Clear everything from Intel AMT web storage. + AmtStorageState - Show contents of the Intel AMT web storage. + AmtSaveState - Save all Intel AMT WSMAN object to file. + AmtPresence - Heartbeat a local Intel AMT watchdog agent. + AmtScript - Run .mescript on Intel AMT. + AmtIDER - Mount local disk image to remote computer. + +Help on a specific action using: + + meshcmd help [action] +``` + +By default you will get the help screen with all of the different actions you can take with the tool. You can also get help by typing “help” followed by the action name. In this document we will cover the main actions that MeshCmd can perform. If you don’t use Intel AMT at all, then only the MeshCentral actions are interesting for you. If you use Intel AMT, the rest of the actions will be of interest to you. + +## MeshCentral TCP port mapping + +MeshCmd can map a TCP port from your local computer to any remote port on any computer with one of your MeshAgents installed. This port mapping will work over a local network or the Internet and should work even thru proxies and firewalls. + +In order to start using MeshCmd in this way, you first need to have access to a MeshCentral server and at least one computer you already manage. TCP port mapping works by selecting a port on your local computer that will be routed to a remote device and port. Here, local port 123 is routed thru the server to port 123 on a remote device. + +![](images/2022-05-15-15-23-45.png) + +Of course, this picture is a bit simplify. Firewalls, NAT routers and HTTP proxies may be in the way and the MeshAgent on the remote computer will act at the TCP traffic relay in most cases. + +One typical use of this is to route local port 1234 to port Microsoft RDP port 3389 on a remote device. Once routed, you can start a RDP session on “localhost:1234” and get a RDP session to the remote device. The RDP protocol is feature rich and efficient, so you get a great user experience regardless of where in the world the remote computer is at. + +To get started, click on a device in MeshCentral and click on the “Router” link on the bottom left of the device page. + +![](images/2022-05-15-15-24-12.png) + +You can download MeshCmd is you have not done so already, but more importantly, download the action.txt file. The file is in text format and contain something like this: + +``` +{ + "action": "route", + "localPort": 1234,  Change this + "remoteName": "AmtMachine7", + "remoteNodeId": "node//@yw$s5jLUivpzZ49laprt4T0sBaOKImbDAiniothQwccZPukCB696$BvPWAW0Bg2", + "remotePort": 3389,  Change this + "username": "admin", + "password": "",  Note that the password is empty + "serverId": "D99362D5ED8BAEA8BF9E743B34B242256370C460FD66CB62373C6CFCB204D6D70 +7403E396CF0EF6DC2B3A42F735135FD", + "serverHttpsHash": "D9DE9E27A229B5355708A3672FB23237CC994A680B3570D242A91E36B4AE5BC +96539E59746E2B71EEF3DBDABBF2AE138", + "debugLevel": 0, + "serverUrl": "wss://devbox.mesh.meshcentral.com:443/meshrelay.ashx" +} +``` + +The action file contains almost all the parameters needed to perform the route. It indicates the local and remote ports, the remote computer unique identifier, server location and authentication information and more. You can just put the action file in the same folder as MeshCmd and run MeshCmd, it will automatically pick up the arguments from the meshaction.txt file. + +You may want to change the local and remote port in the action file to suite your needs. Be default, the Microsoft RDP port is the target. If the password is not specified in the meshaction.txt file, you can also specify it as a meshcmd argument. + +``` +C:\MeshCmd>meshcmd --pass xxxxxxxx +Redirecting local port 1234 to AmtMachine7:3389. Press ctrl-c to exit. +Now, the traffic router is ready. You can now RDP to localhost:1234 and login to the remote computer. +``` + +## MeshCommander + +MeshCommander is a web based Intel AMT management console. MeshCmd has no less then three different versions of MeshCommander built-in, so if you are using Intel AMT, it’s worth a moment to get some knowledge about MeshCommander which is available as a standalone tool along with a full user’s guide at:[http://www.meshcommander.com/](http://www.meshcommander.com/)and also included as part of MeshCentral. + +The three versions included in MeshCmd are: + +- MeshCommander as a local web server. +- MeshCommander for LMS +- MeshCommander for firmware. + +In this section, we review the three versions, how they are used and what can be done with them. + +### MeshCommander local web server + +You can start MeshCommander on a local web server by typing “meshcmd meshcommander”. By default, local port 3000 is used, but you can optionally specify the port using “--localport [port]”. Running it with look like this: + +``` +C:\MeshCmd>meshcmd meshcommander +MeshCommander running on HTTP port 3000. Ctrl-C to exit. +``` + +Once running, use a web browser and go to “http://localhost:3000” to see the MeshCommander web page. The page will start out without any computers in it and you will have to add some. + +![](images/2022-05-15-15-27-41.png) + +In this mode, the local computers that are added will be stored in the browser’s storage cache. So, clearing the browser’s cache will also clear the list of computers. You can however load and save the list of computers using the “Open…” and “Save…” buttons. This version of MeshCommander will have some limitations when compared to the full version installed using the Windows .MSI installer. Notably: + +- No certificate management or validation. +- Mutual-Authenticated TLS is not supported. +- Kerberos authentication is not supported. +- IDE-R is not supported. + +This said, features like KVM, Terminal and most Intel AMT configuration options are available which makes this a fairly powerful Intel AMT management console. You can run MeshCommander as a background server on both Windows and Linux. To do this, use the install, uninstall, start and stop commands like this: + +``` +C:\MeshCmd>meshcmd meshcommander install +Installing to "C:\Program Files (x86)\Open Source\MeshCmd\MeshCommander.exe" MeshCommander installed. + +C:\MeshCmd>meshcmd meshcommander start +MeshCommander starting. +``` + +On Linux computers, both systemd and initd are supported. When installing, the MeshCmd executable will be copied to a different installation folder. + +### LMS & MeshCommander + +The Layered Management Service (LMS) is a background process that runs in the operating system and provides local OS access to Intel AMT. More specifically, it redirects local TCP ports 16992 and 16993 to Intel AMT thru the MEI driver. One way to check if the LMS service is installed on your computer is to try[http://localhost:16992](http://localhost:16992/) or [https://localhost:16993](https://localhost:16993/)in a browser. A page should generally show up. + +On Windows, LMS is a Windows service that must be downloaded and installed as part of the OEM drivers for a computer. On Linux, it’s generally never installed and users normally have to download the source code and compile it themselves. + +MeshCmd has its own LMS implementation, so is LMS is not installed it will automatically use its own internal one. In addition, you can run MicroLMS alone by typing the following list while running as root or local administrator: + +``` +C:\MeshCmd>meshcmd microlms +MicroLMS started, MeshCommander on HTTP/16994. +``` + +This will start MicroLMS and as indicated, start MeshCommander on local port 16994 at the same time. In total, traffic redirection looks like this: + +![](images/2022-05-15-15-30-02.png) + +In addition to providing normal services, MicroLMS that is part of MeshCmd will also start a web server on port 16994 and allow a browser to access LMS MeshCommander, a special version of MeshCommander specially made to run in this situation. + +MeshCommander for LMS will show up even if the computer has Intel AMT un-configured and offer the user the choice to activate Intel AMT and perform configuration actions. In the following screen, we see a computer activated in Client Control Mode. Because it’s in this mode, you can use the web interface to de-activate Intel AMT or login to perform additional configuration. + +![](images/2022-05-15-15-30-41.png) + +MicroLMS along with MeshCommander for LMS is very useful, especially on Linux as it offers a single tool to setup and configuration Intel AMT. If you wish you run MicroLMS without MeshCommander being available on port 16994, run MeshCmd with “--noconsole": + +``` +C:\MeshCmd>meshcmd microlms --noconsole +MicroLMS started. +``` + +You can run MicroLMS as a background server on both Windows and Linux. To do this, use the MicroLMS install, uninstall, start and stop commands like this: + +``` +C:\MeshCmd>meshcmd microlms install +Installing to "C:\Program Files (x86)\Open Source\MeshCmd\MicroLMS.exe" +MicroLMS installed. + +C:\MeshCmd>meshcmd microlms start +MicroLMS starting. +``` + +On Linux computers, both systemd and initd are supported. When installing, the MeshCmd executable will be copied to a different installation folder. + +### MeshCommander for firmware + +MeshCmd also includes a surprising version of MeshCommander, the one you can load into the firmware of Intel AMT. Starting with Intel AMT 11.6, you can push into the small ~190k storage space of Intel AMT a replacement to the index.htm page served by the firmware on port 16992 & 16993. In the following picture, the left side is the original Intel AMT web page, the right is the replaced MeshCommander built to go in firmware. + +![](images/2022-05-15-15-32-15.png) + +The firmware version of MeshCommander has support for remote desktop, terminal and all sorts of Intel AMT usages and configuration. Probably the most surprising is that this entire page is between 40k and 100k depending on the version you select. It’s notable that with MeshCommander loaded into Intel AMT firmware, one does not need any other tool except for a browser to perform most Intel AMT maintenance operations. + +``` +C:\MeshCmd>meshcmd amtloadwebapp --host 192.168.2.144 --pass xxxxxxxx +Uploading MeshCommander... +Verifying MeshCommander... +Done. +``` + +To get the current state of Intel AMT web storage, type this: + +``` +C:\MeshCmd>meshcmd amtstoragestate --host 192.168.2.144 --pass xxxxxxxx +Storage State: { + "information": { + "version": 1, + "realms": 7765759, + "user": "admin" + }, + "content": { + "index.htm": { + "size": 57246  Replacement index.htm with size. + } + } +} +``` + +Here, a 57k index.htm replacement is present in the Intel AMT flash. You can clear the web storage, revering the web page back to the original like this: + +``` +C:\MeshCmd>meshcmd amtclearwebapp --host 192.168.2.144 --pass xxxxxxxx +Done. +``` + +When MeshCommander is loaded into Intel AMT, you can access it from a different computer using [http://computername:16992 ](http://computername:16992/)or[https://computername:16993](https://computername:16993/) You will need to authenticate first before getting access to the web page. + +## Intel AMT state & activation + +MeshCmd can easily be used to read the local state of the computer and Intel AMT. There are many commands available to do this. The “SMBios” action works on most computers and is used to get basic information about your current system. The output is JSON format. + +```json +C:\MeshCmd>meshcmd smbios +{ + processorInfo: { + 0: { + Processor: "CPU" + MaxSpeed: "3800 Mhz" + Cores: 4 + Threads: 8 + Populated: 1 + Status: "Enabled" + Socket: "CPU 1" + Manufacturer: "Intel(R) Corporation" + Version: "Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz" + } + } + memoryInfo: { + location: "System Board" + maxCapacityKb: 33554432 + } + systemInfo: { + uuid: "C57B83D9A94E11E18BA1505054503030" + wakeReason: "Power Switch" + } + systemSlots: { + uuid: "C57B83D9A94E11E18BA1505054503030" + wakeReason: "Power Switch" + } + amtInfo: { + AMT: true + enabled: true + storageRedirection: true + serialOverLan: true + kvm: true + TXT: false + VMX: true + MEBX: "66.0.0.8" + ManagementEngine: "8.1.0.57353" + } +} +``` + +If you have Intel AMT on your system, you can use the “amtinfo”, “amtversions” and “amthashes” to get lots of information about Intel AMT current state. These commands use the Intel AMT MEI driver to get this information and require MeshCmd be run as root or administrator: + +``` +C:\MeshCmd>meshcmd amtinfo +Intel AMT v8.1.71, activated in client control mode. +Wired Enabled, DHCP, 00:1E:8C:F5:4F:ED, 192.168.2.10. + +C:\MeshCmd>meshcmd amtversions +MEI Version = MKQ7710H.86A.0072.2017.0519.1347 +Flash = 8.1.71 +Netstack = 8.1.71 +AMTApps = 8.1.71 +AMT = 8.1.71 +Sku = 24584 +VendorID = 8086 +Build Number = 3608 +Recovery Version = 8.1.71 +Recovery Build Num = 3608 +Legacy Mode = False + +C:\MeshCmd>meshcmd amthashes +VeriSign Class 3 Primary CA-G1, (Default, Active) + SHA256: E7685634EFACF69ACE939A6B255B7B4FABEF42935B50A265ACB5CB6027E44E70 +VeriSign Class 3 Primary CA-G3, (Default, Active) + SHA256: EB04CF5EB1F39AFA762F2BB120F296CBA520C1B97DB1589565B81CB9A17B7244 +… +``` + +In addition to getting Intel AMT state, MeshCmd can activate Intel AMT in client control mode (CCM) and de-activate Intel AMT if it’s in this mode. Doing this is very simple, starting with Intel AMT not being activated, you use the “amtccm” and “amtdeactivate” actions. + +```cmd +C:\MeshCmd>meshcmd amtinfo +Intel AMT v8.1.71, pre-provisioning state. + +C:\MeshCmd>meshcmd amtccm --pass xxxxxxxx +Success + +C:\MeshCmd>meshcmd amtinfo +Intel AMT v8.1.71, activated in client control mode. + +C:\MeshCmd>meshcmd amtdeactivate +Success +``` + +Note that when using the “amtccm” action, you need to provide a password that will be used for authentication into Intel AMT. This password must be strong with at least 8 characters including a lower case, an uppercase, a numeric value and a non-alpha-numeric value. + +## Intel AMT Audit Log + +One very useful feature of MeshCmd is its ability to fetch the Intel AMT audit log. This can be valuable when doing forensics on a computer or just trying figure out what is being done thru Intel AMT. MeshCmd can pull the audit log on a local computer without any credentials, as long as it’s running as root or administrator, or pull the audit log remotely if usual credentials are provided. + +![](images/2022-05-15-15-37-16.png) + +The Intel AMT audit log will show when a computer’s Intel AMT was activated, when remote desktop sessions where initiated and more. To get the local audit log, just use the “AmtAuditLog” action. + +```cmd +C:\MeshCmd>meshcmd amtauditlog +2004-01-01 19:17:58.000-08:00 - Local: Provisioning Started +2018-01-26 14:03:16.000-08:00 - Local: Unprovisioning Started +2018-01-26 14:03:31.000-08:00 - Local: Provisioning Started +2018-02-01 12:13:14.000-08:00 - admin: KVM Enabled +2018-02-01 12:16:01.000-08:00 - admin: KVM Session Started +2018-02-01 12:16:07.000-08:00 - admin: KVM Session Ended +2018-02-02 10:56:06.000-08:00 - admin: KVM Session Started +2018-02-02 10:56:08.000-08:00 - admin: KVM Session Ended +``` + +To get a remote audit log: + +```cmd +C:\MeshCmd>meshcmd amtauditlog --host 192.168.2.144 --user admin --pass xxxxxxxx +2003-12-31 23:06:58.000-08:00 - $$OsAdmin: Intel(r) ME Time Set +2017-08-15 06:53:31.000-07:00 - $$OsAdmin: Intel(r) ME Time Set +2017-10-13 17:55:11.000-07:00 - Local: Provisioning Started +2017-10-13 17:55:54.000-07:00 - Local: Opt-In Policy Change +2017-10-15 06:44:38.000-07:00 - admin: KVM Enabled +``` + +You can also save the audit log to file using the “--output" option. + +## Running Intel AMT script + +MeshCmd has a full WSMAN stack built-in and can be used to run “.mescript” file on a target Intel AMT computer. Script file are useful when you want to run a set of actions on one or more Intel AMT computers at once. You can build a .mescript file using the script editor within MeshCommander. + +This script editor allows the user to drag & drop script blocks, set parameters on each block and test the script against a connected Intel AMT computer. + +![](images/2022-05-15-15-39-40.png) + +In addition to building your own scripts, you can download a CIRA setup script from a MeshCentral server. When running this script, Intel AMT will be setup to call back to the server using an encrypted connection. This enables remote management of Intel AMT over the Internet. The CIRA setup script is available in the “Add CIRA” link for meshes that are Intel AMT only (no agent). + +![](images/2022-05-15-15-40-05.png) + +Once you got the script, run it with MeshCmd like this. You specify the host if it’s not localhost, the password and the script file. + +```cmd +C:\MeshCmd>meshcmd amtscript --host 192.168.2.106 --pass xxxxxxxx --script cira_setup.mescript +Script Started +Policies removed successfully +Adding root certificate... +Management Presence Server (MPS) successfully added +Found matching (primary) mps: Intel(r) AMT:Management Presence Server 0 +Setting policy... +Policy added successfully +Remote Access user interfaces set to: BIOS & OS Enabed +Parsing block parameters +Setting Environment Detection +Environment Detection set successfully +Script Completed +``` + +In this example, the CIRA setup script was run on a remote computer. After the script is run, the computer got configured and connected back to the server. MeshCentral show the new connection state for this computer. + +![](images/2022-05-15-15-41-20.png) + +## IDE Redirection + +MeshCmd has all the code needed to perform Intel AMT IDE Redirection from the command line. This allows disk images on the administrator’s computer to be remotely mounted to an Intel AMT computer. You need to start with a floppy disk .img file and/or an .iso CDROM file. + +![](images/2022-05-15-15-42-01.png) + +Then use the “AmtIDER” command of MeshCMD to start an IDER session. The help command for AmtIDER looks like this: + +```cmd +C:\Temp>meshcmd help amtider +AmtIDER will mount a local disk images to a remote Intel AMT computer. Example usage: + + meshcmd amtider --host 1.2.3.4 --user admin --pass mypassword --tls --floppy disk.img --cdrom disk.iso + +Possible arguments: + + --host [hostname] The IP address or DNS name of Intel AMT. + --user [username] The Intel AMT login username, admin is default. + --pass [password] The Intel AMT login password. + --tls Specifies that TLS must be used. + --floppy [file] Specifies .img file to be mounted as a flppy disk. + --cdrom [file] Specifies .img file to be mounted as a CDROM disk. + --timeout [seconds] Optional, disconnect after number of seconds without disk read. +``` + + The command is fairly simple. It takes as input a remote host, username/password for Intel AMT login, the disk images and TLS option. One can also specify the timeout option so that MeshCMD will automatically disconnect when no disk read operations are performed for a set number of seconds. + +## Conclusion + +MeshCmd is a cross-platform command line tools that perform an ever-growing list of actions that are important for remote computer management. MeshCmd works alone or with MeshCentral and MeshCommander to offer a suite of free, opens source and powerful tools that work well together. + +## License + +MeshCmd and this document are both opens source and licensed using Apache 2.0, the full license can be found at [https://www.apache.org/licenses/LICENSE-2.0](https://www.apache.org/licenses/LICENSE-2.0) diff --git a/docs/docs/meshrouter/images/Aspose.Words.954ea56c-626b-416a-8b2a-efde10ebd3a9.002.png b/docs/docs/meshrouter/images/Aspose.Words.954ea56c-626b-416a-8b2a-efde10ebd3a9.002.png new file mode 100644 index 00000000..082d815a Binary files /dev/null and b/docs/docs/meshrouter/images/Aspose.Words.954ea56c-626b-416a-8b2a-efde10ebd3a9.002.png differ diff --git a/docs/docs/meshrouter/index.md b/docs/docs/meshrouter/index.md index 0182d4ad..057b0515 100644 --- a/docs/docs/meshrouter/index.md +++ b/docs/docs/meshrouter/index.md @@ -1,6 +1,8 @@ # MeshCentral Router -[MeshCentral Router Guide](https://meshcentral.com/info/docs/MeshCentral2RouterUserGuide.pdf) +![](images/Aspose.Words.954ea56c-626b-416a-8b2a-efde10ebd3a9.002.png) + +MeshCentral Router Guide [as .pdf](https://meshcentral.com/info/docs/MeshCentral2RouterUserGuide.pdf) [as .odt](https://github.com/Ylianst/MeshCentral/blob/master/docs/MeshCentral%20Router%20User%20Guide%20v0.0.2.odt?raw=true) ## Video Walkthru @@ -8,6 +10,14 @@ +## Abstract + +This document takes a look at MeshCentral Router, a Windows application that performs TCP and UDP port mapping from a local machine to any remote computer thru a MeshCentral servers. This document should allow the user to Internet relay traffic thru NAT routers and firewalls. + +## Introduction + +MeshCentral is a remote management web site that connects users to remote computers over a local network or the internet. In addition to remote management features, MeshCentral is capable of relaying TCP and UDP traffic thru the server and thru mesh agents installed on remote computers. This feature can be useful to, for example, perform a remote desktop session using RDP or route custom traffic that would otherwise be difficult to route. + ## Downloading MeshCentral router is a Windows application that comes built-into the MeshCentral server or can @@ -146,7 +156,24 @@ bound to the loopback interface so that only local application can use the port The “tray” switch will place MeshCentral Router on the Windows system tray instead of the normal application bar. +## MeshCentral Router with SAML or OAuth + +You can't use the MeshCentral Router (MCR) login dialog box to login to a server that uses SAML or OAuth. However, you can still use MCR + +1. Download MCR and run it. +2. In the first dialog box, there will be an "Install..." button to setup MeshCentral router with the "mcrouter://" protocol in your system registry. +3. Once done, close MCR. +4. Now log into the web UI of your MeshCentral server. Go in the bottom of the "My Devices" tab, hit the "Router" link and hit "Launch MeshCentral Router". +5. This will launch the router and connect directly to your server using a login cookie. + +!!!note + The only drawback is you will have to manually load mappings saved in an .mcrouter file. When not using SAML, you can click on the .mcrouter file to load the mappings and MCR at the same time. + ## Conclusion +MeshCentral Router is a free, open source tool for routing TCP and UDP traffic over the internet. It’s a powerful as it allows for any traffic to go thru NAT routers and firewalls while being encrypted using TLS. + +## License + MeshCentral, MeshCentral Router and this document are all opens source and licensed using Apache 2.0, the full license can be found at . diff --git a/docs/docs/meshrouter/using_meshrouter_with_cookies.md b/docs/docs/meshrouter/using_meshrouter_with_cookies.md deleted file mode 100644 index bf92c79c..00000000 --- a/docs/docs/meshrouter/using_meshrouter_with_cookies.md +++ /dev/null @@ -1,10 +0,0 @@ - -You can't use the MeshCentral Router (MCR) login dialog box to login to a server that uses SAML or OAuth. However, you can still use MCR - -Download MCR and run it. In the first dialog box, there will be an "Install..." button to setup MeshCentral router with the "mcrouter://" protocol in your system registry. Once done, close MCR. - -Now log into the web UI of your MeshCentral server. Go in the bottom of the "My Devices" tab, hit the "Router" link and hit "Launch MeshCentral Router". - -This will launch the router and connect directly to your server using a login cookie. - -The only drawback is you will have to manually load mappings saved in an .mcrouter file. When not using SAML, you can click on the .mcrouter file to load the mappings and MCR at the same time. diff --git a/readme.md b/readme.md index d8bec1d3..2b38c288 100644 --- a/readme.md +++ b/readme.md @@ -29,6 +29,8 @@ The [Installation Guide](https://info.meshcentral.com/downloads/MeshCentral2/Mes The [Design and Architecture Guide](https://info.meshcentral.com/downloads/MeshCentral2/MeshCentral2DesignArchitecture.pdf) is a short document that includes information on the design overview, dependencies, source code descriptions of each file, certificates, TLS security, the agent to server handshake, browser to agent relay and WebRTC and the messenger service. +[New Searchable Documentation](https://ylianst.github.io/MeshCentral/) (incomplete - still integrating pdfs) + ## Video Tutorials You can watch many tutorial videos on the [MeshCentral YouTube Channel](https://www.youtube.com/channel/UCJWz607A8EVlkilzcrb-GKg/videos). Two videos to get started involve installation and basic usages. diff --git a/translate/translate.json b/translate/translate.json index 03714f2a..29022d86 100644 --- a/translate/translate.json +++ b/translate/translate.json @@ -957,20 +957,20 @@ }, { "en": ", 16 grays", + "fr": ", 16 gris", "nl": ", 16 grijstinten", "pl": ", 16 odcieni szarości", "ru": ", 16 оттенков серого", - "fr": ", 16 gris", "xloc": [ "player.handlebars->3->35" ] }, { "en": ", 256 grays", + "fr": ", 256 gris", "nl": ", 256 grijstinten", "pl": ", 256 odcieni szarości", "ru": ", 256 оттенков серого", - "fr": ", 256 gris", "xloc": [ "player.handlebars->3->36" ] @@ -1123,9 +1123,9 @@ "ja": "、毎日のリキュレーション", "nl": ", Dagelijks terugkerend", "pl": ", Powtarzaj codziennie", + "pt-br": ", Recorrente diariamente", "ru": ", Ежедневно", "tr": ", Günlük yinelenen", - "pt-br": ", Recorrente diariamente", "xloc": [ "default.handlebars->39->1919", "default.handlebars->39->969" @@ -1144,9 +1144,9 @@ "ja": "、毎週のリキュレーション", "nl": ", Wekelijks terugkerend", "pl": ", Powtarzaj co tydzień", + "pt-br": ", Recorrente semanalmente", "ru": ", Еженедельно", "tr": ", Haftalık yinelenen", - "pt-br": ", Recorrente semanalmente", "xloc": [ "default.handlebars->39->1920", "default.handlebars->39->970" @@ -1279,9 +1279,9 @@ "ja": "、デスクトップのみを表示", "nl": ", Desktop alleen bekijken", "pl": ", Tylko podgląd pulpitu", + "pt-br": ", Ver apenas área de trabalho", "ru": ", Только просмотр рабочего стола", "tr": ", Yalnızca masaüstünü görüntüle", - "pt-br": ", Ver apenas área de trabalho", "xloc": [ "default.handlebars->39->1921", "default.handlebars->39->971" @@ -1815,11 +1815,11 @@ }, { "en": "1 byte-per-pixel", + "fr": "1 octect par pixel", "nl": "1 byte per pixel", "pl": "1 bajt na piksel", - "ru": "1 байт на пиксель", - "fr": "1 octect par pixel", "pt-br": "1 byte-por-pixel", + "ru": "1 байт на пиксель", "xloc": [ "player.handlebars->3->34" ] @@ -2521,15 +2521,15 @@ ] }, { - "en": "1024x768", - "nl": "1024×768", "cs": "1024×768", "da": "1024×768", + "en": "1024x768", "es": "1024×768", "fi": "1024×768", "fr": "1024×768", "hi": "1024×768", "it": "1024×768", + "nl": "1024×768", "pl": "1024×768", "pt": "1024×768", "pt-br": "1024×768", @@ -2541,15 +2541,15 @@ ] }, { - "en": "1024×768", - "nl": "1024×768", "cs": "1024×768", "da": "1024×768", + "en": "1024×768", "es": "1024×768", "fi": "1024×768", "fr": "1024×768", "hi": "1024×768", "it": "1024×768", + "nl": "1024×768", "pl": "1024×768", "pt": "1024×768", "pt-br": "1024×768", @@ -2660,15 +2660,15 @@ "zh-chs": "127.0.0.1" }, { - "en": "1280x800", - "nl": "1280x800", "cs": "1280x800", "da": "1280x800", + "en": "1280x800", "es": "1280x800", "fi": "1280x800", "fr": "1280x800", "hi": "1280x800", "it": "1280x800", + "nl": "1280x800", "pl": "1280x800", "pt": "1280x800", "pt-br": "1280x800", @@ -2680,15 +2680,15 @@ ] }, { - "en": "1280×800", - "nl": "1280x800", "cs": "1280x800", "da": "1280x800", + "en": "1280×800", "es": "1280x800", "fi": "1280x800", "fr": "1280x800", "hi": "1280x800", "it": "1280x800", + "nl": "1280x800", "pl": "1280x800", "pt": "1280x800", "pt-br": "1280x800", @@ -2700,15 +2700,15 @@ ] }, { - "en": "1440x900", - "nl": "1440x900", "cs": "1440x900", "da": "1440x900", + "en": "1440x900", "es": "1440x900", "fi": "1440x900", "fr": "1440x900", "hi": "1440x900", "it": "1440x900", + "nl": "1440x900", "pl": "1440x900", "pt": "1440x900", "pt-br": "1440x900", @@ -2720,15 +2720,15 @@ ] }, { - "en": "1440×900", - "nl": "1440x900", "cs": "1440x900", "da": "1440x900", + "en": "1440×900", "es": "1440x900", "fi": "1440x900", "fr": "1440x900", "hi": "1440x900", "it": "1440x900", + "nl": "1440x900", "pl": "1440x900", "pt": "1440x900", "pt-br": "1440x900", @@ -2792,15 +2792,15 @@ ] }, { - "en": "1600x900", - "nl": "1600x900", "cs": "1600x900", "da": "1600x900", + "en": "1600x900", "es": "1600x900", "fi": "1600x900", "fr": "1600x900", "hi": "1600x900", "it": "1600x900", + "nl": "1600x900", "pl": "1600x900", "pt": "1600x900", "pt-br": "1600x900", @@ -2812,15 +2812,15 @@ ] }, { - "en": "1600×900", - "nl": "1600x900", "cs": "1600x900", "da": "1600x900", + "en": "1600×900", "es": "1600x900", "fi": "1600x900", "fr": "1600x900", "hi": "1600x900", "it": "1600x900", + "nl": "1600x900", "pl": "1600x900", "pt": "1600x900", "pt-br": "1600x900", @@ -2832,15 +2832,15 @@ ] }, { - "en": "1680x1050", - "nl": "1680x1050", "cs": "1680x1050", "da": "1680x1050", + "en": "1680x1050", "es": "1680x1050", "fi": "1680x1050", "fr": "1680x1050", "hi": "1680x1050", "it": "1680x1050", + "nl": "1680x1050", "pl": "1680x1050", "pt": "1680x1050", "pt-br": "1680x1050", @@ -2852,15 +2852,15 @@ ] }, { - "en": "1680×1050", - "nl": "1680x1050", "cs": "1680x1050", "da": "1680x1050", + "en": "1680×1050", "es": "1680x1050", "fi": "1680x1050", "fr": "1680x1050", "hi": "1680x1050", "it": "1680x1050", + "nl": "1680x1050", "pl": "1680x1050", "pt": "1680x1050", "pt-br": "1680x1050", @@ -2872,15 +2872,15 @@ ] }, { - "en": "1920x1080", - "nl": "1920x1080", "cs": "1920x1080", "da": "1920x1080", + "en": "1920x1080", "es": "1920x1080", "fi": "1920x1080", "fr": "1920x1080", "hi": "1920x1080", "it": "1920x1080", + "nl": "1920x1080", "pl": "1920x1080", "pt": "1920x1080", "pt-br": "1920x1080", @@ -2892,15 +2892,15 @@ ] }, { - "en": "1920×1080", - "nl": "1920x1080", "cs": "1920x1080", "da": "1920x1080", + "en": "1920×1080", "es": "1920x1080", "fi": "1920x1080", "fr": "1920x1080", "hi": "1920x1080", "it": "1920x1080", + "nl": "1920x1080", "pl": "1920x1080", "pt": "1920x1080", "pt-br": "1920x1080", @@ -2913,11 +2913,11 @@ }, { "en": "2 byte-per-pixel", + "fr": "2 octects par pixel", "nl": "2 byte per pixel", "pl": "2 bajty na piksel", - "ru": "2 байта на пиксель", - "fr": "2 octects par pixel", "pt-br": "2 bytes-por-pixel", + "ru": "2 байта на пиксель", "xloc": [ "player.handlebars->3->33" ] @@ -3239,8 +3239,8 @@ { "en": "2nd Factor", "nl": "2e factor", - "pt-br": "2ª Etapa", "pl": "dwuetapowe", + "pt-br": "2ª Etapa", "xloc": [ "default.handlebars->39->2793" ] @@ -3991,15 +3991,15 @@ ] }, { - "en": "640x480", - "nl": "640x480", "cs": "640x480", "da": "640x480", + "en": "640x480", "es": "640x480", "fi": "640x480", "fr": "640x480", "hi": "640x480", "it": "640x480", + "nl": "640x480", "pl": "640x480", "pt": "640x480", "pt-br": "640x480", @@ -4011,15 +4011,15 @@ ] }, { - "en": "640×480", - "nl": "640x480", "cs": "640x480", "da": "640x480", + "en": "640×480", "es": "640x480", "fi": "640x480", "fr": "640x480", "hi": "640x480", "it": "640x480", + "nl": "640x480", "pl": "640x480", "pt": "640x480", "pt-br": "640x480", @@ -4153,8 +4153,8 @@ { "en": "7 days", "nl": "7 dagen", - "pt-br": "7 dias", "pl": "7 dni", + "pt-br": "7 dias", "xloc": [ "default.handlebars->39->1745" ] @@ -5209,9 +5209,9 @@ "ja": "アカウントが作成されました。名前は{0}です。", "nl": "Account aangemaakt, naam is {0}.", "pl": "Konto utworzono, jego nazwa to {0}.", + "pt-br": "Conta criada, o nome é {0}", "ru": "Аккаунт создан, имя {0}.", "tr": "Hesap oluşturuldu, ad {0}.", - "pt-br": "Conta criada, o nome é {0}", "xloc": [ "default.handlebars->39->2309" ] @@ -5508,7 +5508,7 @@ "en": "Action", "es": "Acción", "fi": "Toiminta", - "fr": "action", + "fr": "Action", "hi": "कार्य", "it": "Azione", "ja": "アクション", @@ -6879,9 +6879,9 @@ "ja": "毎日繰り返されるデバイス共有{0}を追加しました。", "nl": "Apparaat delen toegevoegd {0} dagelijks terugkerend.", "pl": "Dodano udostępnienie urządzenia {0} reaktywowane codziennie.", + "pt-br": "Compartilhamento diário do dispositivo {0} adicionado.", "ru": "Добавлен ежедневный общий доступ к устройству {0}.", "tr": "Her gün yinelenen {0} cihaz paylaşımı eklendi.", - "pt-br": "Compartilhamento diário do dispositivo {0} adicionado.", "xloc": [ "default.handlebars->39->2319" ] @@ -6899,9 +6899,9 @@ "ja": "毎週繰り返されるデバイス共有{0}を追加しました。", "nl": "Apparaat delen toegevoegd {0} wekelijks terugkerend.", "pl": "Dodano udostępnienie urządzenia {0} reaktywowane co tydzień.", + "pt-br": "Compartilhamento Semanal do dispositivo {0} adicionado.", "ru": "Добавлен еженедельный общий доступ к устройству {0}.", "tr": "Haftalık olarak yinelenen {0} cihaz paylaşımı eklendi.", - "pt-br": "Compartilhamento Semanal do dispositivo {0} adicionado.", "xloc": [ "default.handlebars->39->2320" ] @@ -6919,9 +6919,9 @@ "ja": "無制限の時間でデバイス共有{0}を追加しました。", "nl": "Apparaat delen {0} toegevoegd met onbeperkte tijd.", "pl": "Dodano udostępnianie urządzenia {0} z nieograniczonym czasem", + "pt-br": "Compartilhamento Ilimitado do dispositivo {0} adicionado.", "ru": "Добавлен общий доступ к устройству {0} с неограниченным временем.", "tr": "Sınırsız süre ile cihaz paylaşımı {0} eklendi.", - "pt-br": "Compartilhamento Ilimitado do dispositivo {0} adicionado.", "xloc": [ "default.handlebars->39->2312" ] @@ -7628,9 +7628,9 @@ "ja": "エージェントの自己共有", "nl": "Agent zelfdelend", "pl": "Samo-Udostępnianie Agenta", + "pt-br": "Auto compartilhamento de Agente", "ru": "Общий доступ из Агента", "tr": "Agent Kendisinin-Paylaşımı", - "pt-br": "Auto compartilhamento de Agente", "xloc": [ "default.handlebars->39->1925", "default.handlebars->39->975" @@ -7849,9 +7849,9 @@ "ja": "限られた特権に接続されたエージェント", "nl": "Agent verbonden met beperkte privileges", "pl": "Agent połączony z ograniczonymi uprawnieniami", + "pt-br": "Agente conectado com privilégios limitados", "ru": "Агент подключен с ограниченными привилегиями", "tr": "Agent kısıtlı yetkiler ile bağlandı", - "pt-br": "Agente conectado com privilégios limitados", "xloc": [ "default.handlebars->39->242" ] @@ -7894,9 +7894,9 @@ "ja": "エージェントのハッシュチェックはスキップされています。これは安全ではありません。", "nl": "Agent has hcontrole wordt overgeslagen, dit is onveilig.", "pl": "Sprawdzanie skrótu agenta jest pomijane, jest to niebezpieczne.", + "pt-br": "O hash do agent foi ignorado, falha de segurança.", "ru": "Проверка хэша агента пропущена, это небезопасно.", "tr": "Agent doğrulaması atlandı, bu güvenli değil.", - "pt-br": "O hash do agent foi ignorado, falha de segurança.", "xloc": [ "default.handlebars->39->91" ] @@ -8222,7 +8222,7 @@ "en": "Albanian", "es": "Albanés", "fi": "Albanialainen", - "fr": "albanais", + "fr": "Albanais", "hi": "अल्बानियन", "it": "albanese", "ja": "アルバニア語", @@ -8296,9 +8296,9 @@ }, { "en": "All Available Agents", + "fr": "Tous les agents disponsibles", "nl": "Alle beschikbare agents", "pl": "Wszyscy Dostępni Agenci", - "fr": "Tous les agents disponsibles", "pt-br": "Todos agentes disponíveis", "xloc": [ "default.handlebars->39->2088", @@ -10461,9 +10461,9 @@ "ja": "次の5分間はすべての接続を自動受け入れます", "nl": "Alle verbindingen automatisch accepteren voor de komende 5 minuten", "pl": "Automatycznie akceptuj wszystkie połączenia przez następne 5 minut", + "pt-br": "Aceitar todas conexões pelos próximos 5 minutos", "ru": "Автоматически принимать все соединения в течение 5 минут", "tr": "Sonraki 5 dakika boyunca tüm bağlantıları otomatik olarak kabul et", - "pt-br": "Aceitar todas conexões pelos próximos 5 minutos", "xloc": [ "coretranslations.json" ] @@ -11014,9 +11014,9 @@ "ja": "meshcentral-dataフォルダー内にバックアップパスを設定することはできません。バックアップ設定は無視されます。", "nl": "Back-uppad kan niet worden ingesteld in de map meshcentral-data, back-upinstellingen genegeerd.", "pl": "Ścieżka kopii zapasowej nie może być ustawiona wewnątrz folderu meshcentral-data, ustawienia kopii zignorowano.", + "pt-br": "O caminho do backup não pode ser definido dentro da pasta meshcentral-data, configuração de Backup ignorada.", "ru": "Путь резервного копирования не может в папке meshcentral-data, параметры резервного копирования игнорируются.", "tr": "Yedekleme yolu meshcentral-data klasörü içinde ayarlanamaz, yedekleme ayarları yok sayılır.", - "pt-br": "O caminho do backup não pode ser definido dentro da pasta meshcentral-data, configuração de Backup ignorada.", "xloc": [ "default.handlebars->39->103" ] @@ -11423,9 +11423,9 @@ }, { "en": "Browser", + "fr": "Navigateur", "nl": "Browser", "pl": "Przeglądarka", - "fr": "Navigateur", "pt-br": "Navegador", "xloc": [ "default.handlebars->39->2791" @@ -11575,9 +11575,9 @@ "ja": "バイトイン", "nl": "Bytes in", "pl": "Bajtów Odebrano", + "pt-br": "Entrada de Bytes", "ru": "Входящих байт", "tr": "Bayt Girişi", - "pt-br": "Entrada de Bytes", "xloc": [ "default.handlebars->39->2787" ] @@ -11595,18 +11595,18 @@ "ja": "バイトアウト", "nl": "Bytes uit", "pl": "Bajtów Wysłano", + "pt-br": "Saída de Bytes", "ru": "Исходящих байт", "tr": "Bayt Bitti", - "pt-br": "Saída de Bytes", "xloc": [ "default.handlebars->39->2788" ] }, { "en": "CAPS", + "fr": "Majuscules", "nl": "CAPS", "pl": "CAPS", - "fr": "Majuscules", "xloc": [ "default.handlebars->container->column_l->p11->7->p11capslock" ] @@ -11753,9 +11753,9 @@ "ja": "サーバーがLANのみまたはWANのみのモードの場合、CIRAローカルFQDNは無視されます。", "nl": "CIRA lokale FQDN's genegeerd wanneer server in LAN-only of WAN-only modus.", "pl": "Lokalna nazwa FQDN CIRA jest ignorowana, gdy serwer działa w trybie tylko LAN lub tylko WAN.", + "pt-br": "FQDN CIRA local ignorado quando o servidor estiver nos modos Lan-only ou Wan-only", "ru": "Локальные полные доменные имена CIRA игнорируются, когда сервер находится в режиме LAN-only или WAN-only.", "tr": "Sunucu yalnızca LAN veya yalnızca WAN modundayken CIRA yerel FQDN'leri yoksayılır.", - "pt-br": "FQDN CIRA local ignorado quando o servidor estiver nos modos Lan-only ou Wan-only", "xloc": [ "default.handlebars->39->89" ] @@ -12055,9 +12055,9 @@ "ja": "4つを超えるCIRAローカルFQDNを持つことはできません。値を無視します。", "nl": "Er mogen niet meer dan 4 CIRA lokale FQDN's zijn. Waarde wordt genegeerd.", "pl": "Nie może mieć więcej niż 4 lokalnych FQDN CIRA. Ignorowanie wartości.", + "pt-br": "Não pode ter mais que 4 FQDN CIRA locais. Ignorando valores.", "ru": "Локальных полных доменных имен CIRA не может быть более 4. Игнорируем значение.", "tr": "4'ten fazla CIRA yerel FQDN'si olamaz. Değeri görmezden gelmek.", - "pt-br": "Não pode ter mais que 4 FQDN CIRA locais. Ignorando valores.", "xloc": [ "default.handlebars->39->90" ] @@ -12744,9 +12744,9 @@ "ja": "アカウントの表示名を{0}に変更しました。", "nl": "Weergavenaam account gewijzigd in {0}.", "pl": "Zmieniono wyświetlaną nazwę konta na {0}.", + "pt-br": "Nome de exibição da conta alterado para {0}", "ru": "Изменено отображаемое имя учетной записи на {0}.", "tr": "Hesap görünen adı {0} olarak değiştirildi.", - "pt-br": "Nome de exibição da conta alterado para {0}", "xloc": [ "default.handlebars->39->2308" ] @@ -13729,9 +13729,9 @@ }, { "en": "Click here to download the MeshCentral Assistant for Windows.", - "pl": "Kliknij tutaj by pobrać Asystenta MeshCentral dla Windows.", - "nl": "Klik hier om de MeshCentral Assistant voor Windows te downloaden.", "fr": "Cliquez ici pour télécharger l'assistant Meshcentral pour Windows.", + "nl": "Klik hier om de MeshCentral Assistant voor Windows te downloaden.", + "pl": "Kliknij tutaj by pobrać Asystenta MeshCentral dla Windows.", "pt-br": "Clique aqui para baixar o Mesh Central Assistant para Windows", "xloc": [ "mesh-invite.html->2->15->1->1" @@ -13971,9 +13971,9 @@ "ja": "このリモート管理ソフトウェアをインストールまたはアンインストールするには、下のボタンをクリックしてください。インストールすると、このソフトウェアはバックグラウンドで実行され、リモート管理者がこのコンピューターを管理および制御できるようになります。", "nl": "Klik op de onderstaande knoppen om deze software voor beheer op afstand te installeren of te verwijderen. Na installatie draait deze software op de achtergrond waardoor deze computer kan worden beheerd en gecontroleerd door een externe beheerder.", "pl": "Kliknij poniższe przyciski, aby zainstalować lub odinstalować oprogramowanie zdalnego dostępu. Po zainstalowaniu, to oprogramowanie działa w tle, umożliwiając zarządzanie i kontrolowanie tego komputera przez zdalnego administratora.", + "pt-br": "Clique nos botões abaixo para instalar ou desinstalar este software de gerenciamento remoto. Quando instalado, este software é executado em segundo plano permitindo que este computador seja gerenciado e controlado por um administrador remoto", "ru": "Нажмите кнопки ниже, чтобы установить или удалить это программное обеспечение для удаленного управления..После установки это программное обеспечение работает в фоновом режиме, что позволяет удаленному администратору управлять этим компьютером.", "tr": "Bu uzaktan yönetim yazılımını yüklemek veya kaldırmak için aşağıdaki düğmelere tıklayın. Yüklendiğinde, bu yazılım arka planda çalışır ve bu bilgisayarın uzak bir yönetici tarafından yönetilmesine ve kontrol edilmesine olanak tanır.", - "pt-br": "Clique nos botões abaixo para instalar ou desinstalar este software de gerenciamento remoto. Quando instalado, este software é executado em segundo plano permitindo que este computador seja gerenciado e controlado por um administrador remoto", "xloc": [ "agent-translations.json" ] @@ -14165,9 +14165,9 @@ }, { "en": "Closed desktop multiplex session \\\"{0}\\\", {1} second(s)", + "fr": "Session de bureau multiplexée fermée \\\"{0}\\\", {1} seconde(s)", "nl": "Gesloten desktop multiplexsessie \\\"{0}\\\", {1} seconde(n)", "pl": "Zamknięta sesja pulpitu wielokrotnego \\\"{0}\\\", {1} sekund(a)", - "fr": "Session de bureau multiplexée fermée \\\"{0}\\\", {1} seconde(s)", "pt-br": "Sessão \\\"{0}\\\" multiplex de área de trabalho fechada, {1} segundo(s)", "xloc": [ "default.handlebars->39->2328" @@ -14434,7 +14434,7 @@ "en": "Compile time", "es": "Fecha de compilación", "fi": "Käännä aika", - "fr": "Temps de compilation", + "fr": "Date de compilation", "hi": "संकलन समय", "it": "Tempo di compilazione", "ja": "コンパイル時間", @@ -15686,9 +15686,9 @@ "ja": "接続されているデバイス:", "nl": "Verbonden apparaten:", "pl": "Podłączone urządzenia:", + "pt-br": "Dispositivos conectados", "ru": "Подключенные устройства:", "tr": "Bağlı cihazlar:", - "pt-br": "Dispositivos conectados", "xloc": [ "device-notify.html->2->5->1", "device-notify.txt" @@ -15800,9 +15800,9 @@ "ja": "サーバーにつなげる...", "nl": "Verbinden met de server...", "pl": "Łączenie z serwerem...", + "pt-br": "Conectando ao servidor", "ru": "Подключение к серверу...", "tr": "Sunucuya baglanıyor...", - "pt-br": "Conectando ao servidor", "xloc": [ "player.handlebars->3->16" ] @@ -16033,9 +16033,9 @@ "ja": "同意", "nl": "Toestemming", "pl": "Zgoda", + "pt-br": "Permitir", "ru": "Согласие", "tr": "Onay", - "pt-br": "Permitir", "xloc": [ "default.handlebars->39->2338" ] @@ -17226,7 +17226,7 @@ "en": "Creation Time", "es": "Fecha de Creación", "fi": "Luomisaika", - "fr": "Temps de creation", + "fr": "Date de creation", "hi": "रचना समय", "it": "Tempo di creazione", "ja": "作成時間", @@ -17771,9 +17771,9 @@ "ja": "毎日", "nl": "Dagelijks", "pl": "Dziennie", + "pt-br": "Diariamente", "ru": "Ежедневно", "tr": "Günlük", - "pt-br": "Diariamente", "xloc": [ "default.handlebars->39->278" ] @@ -20243,9 +20243,9 @@ "ja": "デバイスグループ{0}が変更されました:{1}", "nl": "Apparaatgroep {0} is gewijzigd: {1}", "pl": "Grupa urządzeń {0} została zmieniona: {1}", + "pt-br": "Grupo de dispositivo {0} foi alterado: {1}", "ru": "Группа устройств {0} изменена: {1}", "tr": "{0} cihaz grubu değiştirildi: {1}", - "pt-br": "Grupo de dispositivo {0} foi alterado: {1}", "xloc": [ "default.handlebars->39->2323" ] @@ -20299,9 +20299,9 @@ "ja": "デバイスがビジーです", "nl": "Apparaat is bezet", "pl": "Urządzenie jest zajęte", + "pt-br": "O dispositivo esta ocupado", "ru": "Устройство занято", "tr": "Aygıt meşgul", - "pt-br": "O dispositivo esta ocupado", "xloc": [ "default-mobile.handlebars->11->205", "default.handlebars->39->396" @@ -20654,9 +20654,9 @@ "ja": "デバイスの電源がオフになっています。", "nl": "Apparaat is uitgeschakeld.", "pl": "Urządzenie jest wyłączone.", + "pt-br": "O dispositivo está desligado", "ru": "Устройство выключено.", "tr": "Cihaz kapalı.", - "pt-br": "O dispositivo está desligado", "xloc": [ "default.handlebars->39->608" ] @@ -21058,9 +21058,9 @@ "ja": "切断してロックする", "nl": "Verbreken en vergrendelen", "pl": "Odłącz i zablokuj", + "pt-br": "Desconectar e bloquear", "ru": "Разъединить и заблокировать", "tr": "Bağlantıyı Kes ve Kilitle", - "pt-br": "Desconectar e bloquear", "xloc": [ "default.handlebars->deskDisconnectContextMenu->1" ] @@ -21099,9 +21099,9 @@ "ja": "このセッションを切断します", "nl": "Deze sessie verbreken", "pl": "Rozłącz tą sesję", + "pt-br": "Desconectar esta sessão", "ru": "Отключить этот сеанс", "tr": "Bu oturumun bağlantısını kes", - "pt-br": "Desconectar esta sessão", "xloc": [ "default-mobile.handlebars->11->202", "default-mobile.handlebars->11->209", @@ -21172,9 +21172,9 @@ "ja": "切断されたデバイス:", "nl": "Losgekoppelde apparaten:", "pl": "Rozłączone urządzenia:", + "pt-br": "Dispositivos desconectados", "ru": "Отключенные устройства:", "tr": "Bağlantısı kesilen cihazlar:", - "pt-br": "Dispositivos desconectados", "xloc": [ "device-notify.html->2->7->1", "device-notify.txt" @@ -23472,9 +23472,9 @@ "ja": "ユーザーグループ機能の編集", "nl": "Functies van gebruikersgroepen bewerken", "pl": "Edytuj Opcje Grupy Użytkownika", + "pt-br": "Editar recursos de Grupo de Usuários", "ru": "Редактировать функции групп пользователей", "tr": "Kullanıcı Grubu Özelliklerini Düzenle", - "pt-br": "Editar recursos de Grupo de Usuários", "xloc": [ "default.handlebars->39->2545" ] @@ -23568,9 +23568,9 @@ "ja": "このソフトウェアをインストール/アンインストールするには、昇格された権限が必要です。", "nl": "Verhoogde machtigingen zijn vereist om deze software te installeren/verwijderen.", "pl": "Do zainstalowania/odinstalowania tego oprogramowania wymagane są podwyższone uprawnienia.", + "pt-br": "Permissões Elevadas são necessárias para instalar/desinstalar este software", "ru": "Для установки/удаления этого программного обеспечения требуются повышенные права.", "tr": "Bu yazılımı yüklemek/kaldırmak için yüksek izinler gerekir.", - "pt-br": "Permissões Elevadas são necessárias para instalar/desinstalar este software", "xloc": [ "agent-translations.json" ] @@ -23732,9 +23732,9 @@ "ja": "メールコネクト", "nl": "Email verbinden", "pl": "Połączenie Email", + "pt-br": "Conexão de e-mail", "ru": "Подлючение электронной почты", "tr": "E-posta Bağlantısı", - "pt-br": "Conexão de e-mail", "xloc": [ "default.handlebars->39->1877", "default.handlebars->39->858" @@ -23753,9 +23753,9 @@ "ja": "メール切断", "nl": "Email verbroken", "pl": "Rozłączenie Email", + "pt-br": "Desconexão de e-mail", "ru": "Отключение электронной почты", "tr": "E-posta Bağlantısını Kes", - "pt-br": "Desconexão de e-mail", "xloc": [ "default.handlebars->39->1878", "default.handlebars->39->859" @@ -23774,9 +23774,9 @@ "ja": "電子メール通知", "nl": "Email meldingen", "pl": "Powiadomienia Email", + "pt-br": "Notificação por e-mail", "ru": "Уведомления по электронной почте", "tr": "E-posta Bildirimleri", - "pt-br": "Notificação por e-mail", "xloc": [ "default.handlebars->39->2109", "default.handlebars->39->984" @@ -23833,8 +23833,8 @@ { "en": "Email domain \\\"{0}\\\" is not allowed. Only ({1}) are allowed", "nl": "Email domein \\\"{0}\\\" is niet toegestaan. Alleen ({1}) is toegestaan", - "pt-br": "O domínio de e-mail \\\"{0}\\\" não é permitido. Somente ({1}) são permitidos", "pl": "Domena email \\\"{0}\\\" jest niedozwolona. Tylko ({1}) jest dopuszczona", + "pt-br": "O domínio de e-mail \\\"{0}\\\" não é permitido. Somente ({1}) são permitidos", "xloc": [ "default-mobile.handlebars->11->743", "default.handlebars->39->2876" @@ -24361,11 +24361,11 @@ }, { "en": "Encoding Quality", + "fr": "Qualité d'encodage", "nl": "Coderingskwaliteit", "pl": "Jakość Kodowania", - "ru": "Качество кодирования", - "fr": "Qualité d'encodage", "pt-br": "Qualidade de codificação", + "ru": "Качество кодирования", "xloc": [ "player.handlebars->3->37" ] @@ -24383,9 +24383,9 @@ "ja": "エンコーディング:RAW", "nl": "Codering: RAW", "pl": "Kodowanie: RAW", + "pt-br": "Codificação: RAW", "ru": "Кодировка: RAW", "tr": "kodlama: RAW", - "pt-br": "Codificação: RAW", "xloc": [ "default.handlebars->39->1375" ] @@ -24403,9 +24403,9 @@ "ja": "エンコーディング:UTF8", "nl": "Codering: UTF8", "pl": "Kodowanie: UTF8", + "pt-br": "Codificação: UTF8", "ru": "Кодировка: UTF8", "tr": "Kodlama: UTF8", - "pt-br": "Codificação: UTF8", "xloc": [ "default.handlebars->39->1376" ] @@ -25949,8 +25949,8 @@ { "en": "FIDO key", "nl": "FIDO sleutel", - "pt-br": "Chave FIDO", "pl": "Klucz FIDO", + "pt-br": "Chave FIDO", "xloc": [ "default.handlebars->39->2818" ] @@ -26667,9 +26667,9 @@ "ja": "フィルタ:user:xxxまたはu:xxx ip:xxx group:xxxまたはg:xxx tag:xxxまたはt:xxx atag:xxxまたはa:xxx os:xxx amt:xxx desc:xxx wsc:ok wsc:noav wsc: noupdate wsc:nofirewall wsc:any", "nl": "Filter: user:xxx or u:xxx ip:xxx group:xxx or g:xxx tag:xxx or t: xxx atag:xxx or a:xxx os:xxx amt:xxx desc:xxx wsc:ok wsc:noav wsc:noupdate wsc:nofirewall wsc:any", "pl": "Filtr: użytkownik:xxx lub u:xxx ip:xxx grupa:xxx lub g:xxx tag:xxx lub t: xxx atag:xxx lub a:xxx os:xxx amt:xxx opis:xxx wsc:ok wsc:brakav wsc:brakaktualizacji wsc:brakfirewalla wsc:każdy", + "pt-br": "Filtro: usuário: xxx ou u:xxx ip:xxx grupo:xxx ou g:xxx tag:xxx ou t: xxx atag:xxx ou a:xxx os:xxx amt:xxx desc:xxx wsc:ok wsc:noav wsc:noupdate wsc:nofirewall wsc:any", "ru": "Фильтр: user:xxx or u:xxx ip:xxx group:xxx or g:xxx tag:xxx or t: xxx atag:xxx or a:xxx os:xxx amt:xxx desc:xxx wsc:ok wsc:noav wsc:noupdate wsc:nofirewall wsc:any", "tr": "Filtre: user:xxx veya u:xxx ip:xxx group:xxx veya g:xxx etiketi:xxx veya t: xxx atag:xxx veya a:xxx os:xxx amt:xxx desc:xxx wsc:ok wsc:noav wsc: noupdate wsc:nofirewall wsc:herhangi biri", - "pt-br": "Filtro: usuário: xxx ou u:xxx ip:xxx grupo:xxx ou g:xxx tag:xxx ou t: xxx atag:xxx ou a:xxx os:xxx amt:xxx desc:xxx wsc:ok wsc:noav wsc:noupdate wsc:nofirewall wsc:any", "xloc": [ "default.handlebars->container->column_l->p1->devListToolbarSpan->1->0->devListToolbar" ] @@ -26728,9 +26728,9 @@ }, { "en": "Finished recording session \\\"{0}\\\", {1} second(s)", + "fr": "Fin de l'enregistrement de la session \\\"{0}\\\", {1} seconde(s)", "nl": "Beëindigde opnamesessie \\\"{0}\\\", {1} seconde(n)", "pl": "Zakończono sesję nagrywania, \\\"{0}\\\", {1} sekund(a)", - "fr": "Fin de l'enregistrement de la session \\\"{0}\\\", {1} seconde(s)", "pt-br": "Gravação de sessão \\\"{0}\\\" finalizada, {1} segundo(s)", "xloc": [ "default.handlebars->39->2327" @@ -26881,9 +26881,9 @@ "ja": "フラグ", "nl": "vlaggen", "pl": "Flagi", + "pt-br": "Flags", "ru": "Флаги", "tr": "Bayraklar", - "pt-br": "Flags", "xloc": [ "default.handlebars->39->2337" ] @@ -27042,9 +27042,9 @@ }, { "en": "For MeshCentral Assistant on Windows, nagivate to the following link to complete the process:", + "fr": "Pour l'assistant MeshCentral sous Windows, cliquez sur le lien suivant pour compléter le processus :", "nl": "Voor MeshCentral Assistant voor Windows navigeert u naar de volgende link om het proces te voltooien:", "pl": "W przypadku Asystenta MeshCentral w Windows, przejdź do tego linku aby zakończyć proces:", - "fr": "Pour l'assistant MeshCentral sous Windows, cliquez sur le lien suivant pour compléter le processus :", "pt-br": "Para o MeshCentral Assistant no Windows, abre o seguinte link para completar o processo:", "xloc": [ "mesh-invite.txt" @@ -27186,9 +27186,9 @@ "ja": "ユーザー{0}のデスクトップセッションを強制的に切断しました", "nl": "Geforceerd verbroken desktopsessie van gebruiker {0}", "pl": "Wymuszone rozłączenie sesji pulpitu użytkownika {0}", + "pt-br": "Sessão de área de trabalho do usuário {0} desconectada a força", "ru": "Принудительно отключен сеанс рабочего стола пользователя {0}", "tr": "{0} kullanıcısının bağlantısı zorla kesildi masaüstü oturumu", - "pt-br": "Sessão de área de trabalho do usuário {0} desconectada a força", "xloc": [ "default.handlebars->39->2315" ] @@ -27206,9 +27206,9 @@ "ja": "ユーザー{0}のファイルセッションを強制的に切断しました", "nl": "Geforceerd verbroken bestandssessie van gebruiker {0}", "pl": "Wymuszone rozłączenie sesji plików użytkownika {0}", + "pt-br": "Sessão de arquivos do usuário {0} desconectada a força", "ru": "Принудительно отключен файловый сеанс пользователя {0}", "tr": "{0} kullanıcısının bağlantısı zorla kesilen dosyalar oturumu", - "pt-br": "Sessão de arquivos do usuário {0} desconectada a força", "xloc": [ "default.handlebars->39->2317" ] @@ -27226,9 +27226,9 @@ "ja": "ユーザー{0}のルーティングセッションを強制的に切断しました", "nl": "Geforceerd verbroken routeringssessie van gebruiker {0}", "pl": "Wymuszone rozłączenie sesji routingu użytkownika {0}", + "pt-br": "Sessão de roteamento do usuário {0} desconectada a força", "ru": "Принудительно отключен сеанс маршрутизации пользователя {0}", "tr": "{0} kullanıcısının bağlantısı zorla kesildi yönlendirme oturumu", - "pt-br": "Sessão de roteamento do usuário {0} desconectada a força", "xloc": [ "default.handlebars->39->2318" ] @@ -27246,9 +27246,9 @@ "ja": "ユーザー{0}のターミナルセッションを強制的に切断しました", "nl": "Geforceerd verbroken terminalsessie van gebruiker {0}", "pl": "Wymuszone rozłączenie sesji terminala użytkownika {0}", + "pt-br": "Sessão de terminal do usuário {0} desconectada a força", "ru": "Принудительно отключен терминальный сеанс пользователя {0}", "tr": "{0} kullanıcısının bağlantısı zorla kesildi terminal oturumu", - "pt-br": "Sessão de terminal do usuário {0} desconectada a força", "xloc": [ "default.handlebars->39->2316" ] @@ -28158,9 +28158,9 @@ "ja": "レポートの生成", "nl": "Genereer rapport", "pl": "Generuj Raport", + "pt-br": "Gerar relatório", "ru": "Создать отчет", "tr": "Rapor oluştur", - "pt-br": "Gerar relatório", "xloc": [ "default.handlebars->39->2779" ] @@ -28178,9 +28178,9 @@ "ja": "レポートを生成...", "nl": "Genereer rapport...", "pl": "Generuj Raport...", + "pt-br": "Gerar relatório...", "ru": "Создать отчет...", "tr": "Rapor oluştur...", - "pt-br": "Gerar relatório...", "xloc": [ "default.handlebars->container->column_l->p60->3->1->0->3->3" ] @@ -28373,9 +28373,9 @@ "ja": "クリップボードを取得", "nl": "Klembord ophalen", "pl": "Pobierz schowek", + "pt-br": "Obter área de transferência ", "ru": "Получить буфер", "tr": "Pano Al", - "pt-br": "Obter área de transferência ", "xloc": [ "default.handlebars->39->1257" ] @@ -28850,9 +28850,9 @@ }, { "en": "Group Name", + "fr": "Nom du groupe", "nl": "Groepsnaam", "pl": "Nazwa Grupy", - "fr": "Nom du groupe", "pt-br": "Nome do grupo", "xloc": [ "agent-translations.json" @@ -28897,9 +28897,9 @@ "ja": "グループ名", "nl": "Groepsnaam", "pl": "Nazwa grupy", + "pt-br": "Nome do grupo", "ru": "Название группы", "tr": "Grup ismi", - "pt-br": "Nome do grupo", "xloc": [ "default.handlebars->39->2335" ] @@ -29042,9 +29042,9 @@ "ja": "ゲスト", "nl": "Gast", "pl": "Gość", + "pt-br": "Convidado", "ru": "Гость", "tr": "Misafir", - "pt-br": "Convidado", "xloc": [ "default.handlebars->39->2785" ] @@ -29714,7 +29714,7 @@ "en": "Hold on, reset mail sent.", "es": "Espere, correo de restablecimiento enviado.", "fi": "Odota hetki, palautus sähköposti lähetetty.", - "fr": "Attends, le courrier est envoyé.", + "fr": "Veuillez attendre, le courriel est envoyé.", "hi": "भेजे गए मेल को रीसेट करें, दबाए रखें।", "it": "Aspetta, reimposta la posta inviata.", "ja": "お待ちください、送信されたメールをリセットします。", @@ -29977,9 +29977,9 @@ }, { "en": "IP Address", + "fr": "Adresse IP", "nl": "IP-adres", "pl": "Adres IP", - "fr": "Adresse IP", "pt-br": "Endereço IP", "xloc": [ "default.handlebars->39->2790", @@ -29999,9 +29999,9 @@ "ja": "IPKVMデバイス", "nl": "IP KVM apparaat", "pl": "Urządzenie IP KVM", + "pt-br": "Dispositivo IP KVM", "ru": "IP KVM-устройство", - "tr": "IP KVM cihazı", - "pt-br": "Dispositivo IP KVM" + "tr": "IP KVM cihazı" }, { "cs": "IP KVM port je aktivní a připraven k použití.", @@ -30016,9 +30016,9 @@ "ja": "IP KVMポートが起動し、使用できるようになりました。", "nl": "IP KVM poort is actief en klaar voor gebruik.", "pl": "Port IP KVM podniesiony i gotowy do użycia.", + "pt-br": "A porta IP KVM está ativa e pronta pro uso.", "ru": "Порт IP KVM подключен и готов к использованию.", - "tr": "IP KVM portu hazır ve kullanıma hazır.", - "pt-br": "A porta IP KVM está ativa e pronta pro uso." + "tr": "IP KVM portu hazır ve kullanıma hazır." }, { "cs": "IP rozsah", @@ -30109,9 +30109,9 @@ "ja": "IP-KVM /パワーデバイス", "nl": "IP-KVM / Power device", "pl": "IP-KVM / Zasilanie urządzenia", + "pt-br": "IP-KVM / Dispositivo de força", "ru": "IP-KVM / Устройство питания", "tr": "IP-KVM / Güç cihazı", - "pt-br": "IP-KVM / Dispositivo de força", "xloc": [ "default.handlebars->39->1782" ] @@ -30137,9 +30137,9 @@ "ja": "IP-KVMデバイス", "nl": "IP-KVM device", "pl": "Urządzenie IP-KVM", + "pt-br": "Dispositivo IP-KVM ", "ru": "IP-KVM-устройство", "tr": "IP-KVM cihazı", - "pt-br": "Dispositivo IP-KVM ", "xloc": [ "default-mobile.handlebars->11->625", "default.handlebars->39->1842" @@ -30167,9 +30167,9 @@ "ja": "IP-KVMポートが接続されています", "nl": "IP-KVM poort verbonden", "pl": "Podłączono z portem IP-KVM", + "pt-br": "Porta IP-KVM conectada", "ru": "Порт IP-KVM подключен", "tr": "IP-KVM bağlantı noktası bağlandı", - "pt-br": "Porta IP-KVM conectada", "xloc": [ "default.handlebars->39->937", "default.handlebars->39->938" @@ -30188,9 +30188,9 @@ "ja": "IP-KVMポートが接続され、使用できるようになります。", "nl": "IP-KVM poort is verbonden en klaar voor gebruik.", "pl": "Port IP-KVM podłączony i gotowy do użycia.", + "pt-br": "A porta IP KVM está conectada e pronta pro uso.", "ru": "Порт IP-KVM подключен и готов к использованию.", "tr": "IP-KVM portu bağlı ve kullanıma hazır.", - "pt-br": "A porta IP KVM está conectada e pronta pro uso.", "xloc": [ "default.handlebars->39->372" ] @@ -30208,9 +30208,9 @@ "ja": "IP-KVMポートが起動し、使用できるようになりました。", "nl": "IP-KVM poort is actief en klaar voor gebruik.", "pl": "Port IP-KVM podniesiony i gotowy do użycia.", + "pt-br": "A porta IP KVM está ativa e pronta pro uso.", "ru": "Порт IP-KVM запущен и готов к использованию.", "tr": "IP-KVM portu hazır ve kullanıma hazır.", - "pt-br": "A porta IP KVM está ativa e pronta pro uso.", "xloc": [ "default.handlebars->39->620" ] @@ -30950,9 +30950,9 @@ }, { "en": "Incorrect 2nd factor", + "fr": "Deuxième facteur d'authentification incorrect", "nl": "Incorrecte 2de factor", "pl": "Dwuskładnikowe logowanie nieprawidłowe", - "fr": "Deuxième facteur d'authentification incorrect", "pt-br": "2ª etapa incorreta", "xloc": [ "default.handlebars->39->2813", @@ -31444,9 +31444,9 @@ "ja": "Intel AMTCIRA接続", "nl": "Intel AMT CIRA verbonden", "pl": "Intel AMT CIRA połączono", + "pt-br": "Intel AMT CIRA conectado", "ru": "Intel AMT CIRA подключен", "tr": "Intel AMT CIRA bağlandı", - "pt-br": "Intel AMT CIRA conectado", "xloc": [ "default.handlebars->39->244" ] @@ -31464,9 +31464,9 @@ "ja": "Intel AMTCIRAが切断されました", "nl": "Intel AMT CIRA verbroken", "pl": "Intel AMT CIRA rozłączono", + "pt-br": "Intel AMT CIRA desconectado", "ru": "Intel AMT CIRA отключен", "tr": "Intel AMT CIRA'nın bağlantısı kesildi", - "pt-br": "Intel AMT CIRA desconectado", "xloc": [ "default.handlebars->39->248" ] @@ -31484,9 +31484,9 @@ "ja": "IntelAMTが検出されました", "nl": "Intel AMT gedetecteerd", "pl": "Wykryto Intel AMT", + "pt-br": "Intel AMT detectado", "ru": "Обнаружен Intel AMT", "tr": "Intel AMT algılandı", - "pt-br": "Intel AMT detectado", "xloc": [ "default.handlebars->39->243" ] @@ -31528,9 +31528,9 @@ "ja": "IntelAMTが検出されない", "nl": "Intel AMT niet gedetecteerd", "pl": "Nie wykryto Intel AMT", + "pt-br": "Intel AMT não detectado", "ru": "Intel AMT не обнаружен", "tr": "Intel AMT algılanmadı", - "pt-br": "Intel AMT não detectado", "xloc": [ "default.handlebars->39->247" ] @@ -32546,9 +32546,9 @@ "ja": "Intel(r)AMTポリシーの変更", "nl": "Intel(r) AMT-beleidswijziging", "pl": "Zmiana polityki Intel(r) AMT", + "pt-br": "Mudar política Intel(r) AMT", "ru": "Изменение политик Intel(r) AMT", "tr": "Intel(r) AMT ilke değişikliği", - "pt-br": "Mudar política Intel(r) AMT", "xloc": [ "default.handlebars->39->2322" ] @@ -33040,9 +33040,9 @@ "ja": "無効なLet'sEncryptの電子メールアドレス、解決できません:{0}", "nl": "Ongeldige Let's Encrypt email adres, onmogelijk om te verhelpen: {0}", "pl": "Nieprawidłowy adres e-mail Let's Encrypt, nie można go rozwiązać: {0}", + "pt-br": "Endereço de e-mail do Let's Encrypt inválido, incapaz de resolver: {0}", "ru": "Недопустимый адрес электронной почты Let's Encrypt, не удалось разрешить: {0}", "tr": "Geçersiz Let's Encrypt e-posta adresi çözülemedi: {0}", - "pt-br": "Endereço de e-mail do Let's Encrypt inválido, incapaz de resolver: {0}", "xloc": [ "default.handlebars->39->97" ] @@ -33060,9 +33060,9 @@ "ja": "無効なLet'sEncryptのホスト名。", "nl": "Ongeldige Let's Encrypt hostnamen.", "pl": "Nieprawidłowe nazwy hostów Let's Encrypt.", + "pt-br": "Nome do host Let's Encrypt inválido.", "ru": "Недопустимые имена хостов Let's Encrypt.", "tr": "Geçersiz Let's Encrypt ana bilgisayar adları.", - "pt-br": "Nome do host Let's Encrypt inválido.", "xloc": [ "default.handlebars->39->93" ] @@ -33080,9 +33080,9 @@ "ja": "無効なLet'sEncrypt名、*を含めることはできません。", "nl": "Ongeldige Let's Encrypt namen, mag geen * bevatten.", "pl": "Nieprawidłowe nazwy Let's Encrypt, nie mogą zawierać *.", + "pt-br": "Nomes Let's Encrypt inválidos, não pode contar um *.", "ru": "Недопустимые имена Let's Encrypt, имена не могут содержать *.", "tr": "Geçersiz Let's Encrypt adları, * içeremez.", - "pt-br": "Nomes Let's Encrypt inválidos, não pode contar um *.", "xloc": [ "default.handlebars->39->94" ] @@ -33100,9 +33100,9 @@ "ja": "無効なLet'sEncrypt名、解決できません:{0}", "nl": "Ongeldige Let's Encrypt-namen, onmogelijk om te verhelpen: {0}", "pl": "Nieprawidłowe nazwy Let's Encrypt, niemożliwe do rozwiązania: {0}", + "pt-br": "Nomes Let's Encrypt inválidos, incapaz de resolver: {0}", "ru": "Недопустимые имена Let's Encrypt, не удалось разрешить: {0}", "tr": "Geçersiz Let's Encrypt adları çözülemedi: {0}", - "pt-br": "Nomes Let's Encrypt inválidos, incapaz de resolver: {0}", "xloc": [ "default.handlebars->39->96" ] @@ -33195,9 +33195,9 @@ "ja": "config.jsonの「LoginCookieEncryptionKey」が無効です。", "nl": "Ongeldige \\\"LoginCookieEncryptionKey\\\" in config.json.", "pl": "Nieprawidłowy \\\"LoginCookieEncryptionKey\\\" w config.json.", + "pt-br": "\\\"LoginCookieEncryptionKey\\\" inválido no config.json.", "ru": "Некорректный \\\"LoginCookieEncryptionKey\\\" в config.json.", "tr": "config.json'da geçersiz \\\"LoginCookieEncryptionKey\\\".", - "pt-br": "\\\"LoginCookieEncryptionKey\\\" inválido no config.json.", "xloc": [ "default.handlebars->39->102" ] @@ -33380,9 +33380,9 @@ }, { "en": "Invalid login attempt", + "fr": "Tentative de connexion invalide", "nl": "Invalid login attempt", "pl": "Nieprawidłowa próba logowania", - "fr": "Tentative de connexion invalide", "pt-br": "Tentativa de login inválida", "xloc": [ "default.handlebars->39->2815", @@ -33756,9 +33756,9 @@ "ja": "招待コード", "nl": "Uitnodigingscode", "pl": "Kod zaproszenia", + "pt-br": "Código de convite", "ru": "Код приглашения", "tr": "Davet kodu", - "pt-br": "Código de convite", "xloc": [ "default.handlebars->39->2340" ] @@ -34047,9 +34047,9 @@ }, { "en": "Joined desktop multiplex session \\\"{0}\\\"", + "fr": "Session de bureau multiplexée jointe \\\"{0}\\\"", "nl": "Deelgenomen aan desktop multiplex-sessie \\\"{0}\\\"", "pl": "Dołączył do sesji multipleksu pulpitów \\\"{0}\\\"", - "fr": "Session de bureau multiplexée jointe \\\"{0}\\\"", "pt-br": "Entrou na sessão \\\"{0}\\\" multiplex de área de trabalho", "xloc": [ "default.handlebars->39->2324" @@ -34344,9 +34344,9 @@ "ja": "キーボード弦のカスタマイズ", "nl": "Toetsenbord strings aanpassen", "pl": "Ustawienia Ciagów Klawiatury", + "pt-br": "Personalização de Strings de Teclado", "ru": "Настройка клавиатурных строк", "tr": "Klavye Dizileri Özelleştirme", - "pt-br": "Personalização de Strings de Teclado", "xloc": [ "default.handlebars->39->1253" ] @@ -34925,9 +34925,9 @@ "ja": "過去7日間", "nl": "Laaste 7 dagen", "pl": "Ostatnie 7 dni", + "pt-br": "Últimos 7 dias", "ru": "Последние 7 дней", "tr": "Son 7 gün", - "pt-br": "Últimos 7 dias", "xloc": [ "default.handlebars->39->2772" ] @@ -34995,9 +34995,9 @@ "ja": "最終日", "nl": "Laaste dag", "pl": "Ostatni Dzień", + "pt-br": "Último dia", "ru": "Последний день", "tr": "Son gun", - "pt-br": "Último dia", "xloc": [ "default.handlebars->39->2771" ] @@ -35066,9 +35066,9 @@ "ja": "最終アクセス:{0}", "nl": "Laatste toegang: {0}", "pl": "Ostatni dostęp: {0}", + "pt-br": "Último acesso: {0}", "ru": "Последний доступ: {0}", "tr": "Son erişim: {0}", - "pt-br": "Último acesso: {0}", "xloc": [ "default.handlebars->39->2380" ] @@ -35579,9 +35579,9 @@ }, { "en": "Left Web-RDP session \\\"{1}\\\" after {0} second(s).", + "fr": "Fin de la session Web-RDP \\\"{1}\\\" dans {0} seconde(s).", "nl": "Verliet de desktop multiplex sessie na \\\"{1}\\\" {0} seconde(n).", "pl": "Opuścił sesję Web-RDP \\\"{1}\\\" po {0} sekundach(sekundzie).", - "fr": "Fin de la session Web-RDP \\\"{1}\\\" dans {0} seconde(s).", "pt-br": "Deixar a sessão WEB-RDP \\\"{1}\\\" depois de {0} segundo(s)", "xloc": [ "default.handlebars->39->2306" @@ -35600,15 +35600,15 @@ "ja": "{0}秒後にWeb-RDPセッションを終了しました。", "nl": "Web-RDP sessie verlaten na {0} seconde(n).", "pl": "Opuścił sesję Web-RDP po {0} sekundach.", + "pt-br": "Deixar a sessão WEB-RDP depois de {0} segundo(s)", "ru": "Покинул сеанс Web-RDP через {0} с.", - "tr": "{0} saniye sonra Web-RDP oturumundan ayrıldı.", - "pt-br": "Deixar a sessão WEB-RDP depois de {0} segundo(s)" + "tr": "{0} saniye sonra Web-RDP oturumundan ayrıldı." }, { "en": "Left Web-SFTP session \\\"{1}\\\" after {0} second(s).", + "fr": "Fin de la session Web-SFTP \\\"{1}\\\" dans {0} seconde(s).", "nl": "Verliet de web-SFTP sessie na \\\"{1}\\\" {0} seconde(n).", "pl": "Opuścił sesję Web-SFTP \\\"{1}\\\" po {0} sekundach(sekundzie).", - "fr": "Fin de la session Web-SFTP \\\"{1}\\\" dans {0} seconde(s).", "pt-br": "Deixar a sessão WEB-SFTP \\\"{1}\\\" depois de {0} segundo(s)", "xloc": [ "default.handlebars->39->2305" @@ -35627,15 +35627,15 @@ "ja": "{0}秒後にWeb-SFTPセッションを終了しました。", "nl": "Web-SFTP sessie verlaten na {0} seconde(n).", "pl": "Opuścił sesję Web-SFTP po {0} sekundach.", + "pt-br": "Deixar a sessão WEB-SFTP depois de {0} segundo(s)", "ru": "Покинул сеанс Web-SFTP через {0} с.", - "tr": "{0} saniye sonra Web-SFTP oturumundan ayrıldı.", - "pt-br": "Deixar a sessão WEB-SFTP depois de {0} segundo(s)" + "tr": "{0} saniye sonra Web-SFTP oturumundan ayrıldı." }, { "en": "Left Web-SSH session \\\"{1}\\\" after {0} second(s).", + "fr": "Fin de la session Web-SSH \\\"{1}\\\" dans {0} seconde(s).", "nl": "Verliet de web-SSH sessie na \\\"{1}\\\" {0} seconde(n).", "pl": "Opuścił sesję Web-SSH \\\"{1}\\\" po {0} sekundach(sekundzie).", - "fr": "Fin de la session Web-SSH \\\"{1}\\\" dans {0} seconde(s).", "pt-br": "Deixar a sessão WEB-SSH \\\"{1}\\\" depois de {0} segundo(s)", "xloc": [ "default.handlebars->39->2304" @@ -35654,9 +35654,9 @@ "ja": "{0}秒後にWeb-SSHセッションを終了しました。", "nl": "Web-SSH sessie verlaten na {0} seconde(n).", "pl": "Opuścił sesję Web-SSH po {0} sekundach.", + "pt-br": "Deixar a sessão WEB-SSH depois de {0} segundo(s)", "ru": "Покинул сеанс Web-SSH через {0} с.", - "tr": "{0} saniye sonra Web-SSH oturumundan ayrıldı.", - "pt-br": "Deixar a sessão WEB-SSH depois de {0} segundo(s)" + "tr": "{0} saniye sonra Web-SSH oturumundan ayrıldı." }, { "cs": "Opustili relaci Web-VNC po {0} sekundách.", @@ -35671,9 +35671,9 @@ "ja": "{0}秒後にWeb-VNCセッションを終了しました。", "nl": "Web-VNC sessie verlaten na {0} seconde(n).", "pl": "Opuścił sesję Web-VNC po {0} sekundach.", + "pt-br": "Deixar a sessão WEB-VNC depois de {0} segundo(s)", "ru": "Покинул сеанс Web-VNC через {0} с.", "tr": "{0} saniye sonra Web-VNC oturumundan ayrıldı.", - "pt-br": "Deixar a sessão WEB-VNC depois de {0} segundo(s)", "xloc": [ "default.handlebars->39->2307" ] @@ -35735,9 +35735,9 @@ }, { "en": "Left the desktop multiplex session \\\"{0}\\\" after {1} second(s).", + "fr": "Fin de la session de bureau multiplexée \\\"{1}\\\" dans {0} seconde(s).", "nl": "Verliet de desktop multiplexsessie \\\"{0}\\\" na {1} seconde(n).", "pl": "Opuścił sesję multiplex pulpitów \\\"{0}\\\" po {1} sekundach(sekundzie).", - "fr": "Fin de la session de bureau multiplexée \\\"{1}\\\" dans {0} seconde(s).", "pt-br": "Deixar a sessão \\\"{0}\\\" de área de trabalho multiplex depois de {1} segundo(s)", "xloc": [ "default.handlebars->39->2325" @@ -35756,9 +35756,9 @@ "ja": "{0}秒後にデスクトップマルチプレックスセッションを終了しました。", "nl": "Verliet de desktop multiplex sessie na {0} seconde(n).", "pl": "Opuścił sesję multiplex pulpitu po {0} sekundach.", + "pt-br": "Deixar a sessão de área de trabalho multiplex depois de {0} segundo(s)", "ru": "Покинул сеанс мультиплексного режима рабочего стола через {0} с.", "tr": "{0} saniye sonra masaüstü multipleks oturumundan ayrıldı.", - "pt-br": "Deixar a sessão de área de trabalho multiplex depois de {0} segundo(s)", "xloc": [ "default.handlebars->39->2303" ] @@ -35776,9 +35776,9 @@ "ja": "長さ", "nl": "Duur", "pl": "Długość", + "pt-br": "Comprimento", "ru": "Продолжительность", "tr": "Uzunluk", - "pt-br": "Comprimento", "xloc": [ "default.handlebars->39->2786" ] @@ -36321,9 +36321,9 @@ }, { "en": "Linux MeshAgent", + "fr": "MeshAgent Linux", "nl": "Linux MeshAgent", "pl": "MeshAgent dla Linuksa", - "fr": "MeshAgent Linux", "pt-br": "MeshAgent Linux", "xloc": [ "default.handlebars->39->2090", @@ -37095,9 +37095,9 @@ "ja": "ロックオン切断", "nl": "Vergrendelen bij verbreken", "pl": "Zablokuj na Odłącz", + "pt-br": "Bloquear ao Desconectar", "ru": "Заблокировать при отключении", "tr": "Bağlantıyı Keste Kilitle", - "pt-br": "Bloquear ao Desconectar", "xloc": [ "default-mobile.handlebars->dialog->3->dialog7->d7meshkvm->3->1->6->3->d7deskAutoLockLabel", "default.handlebars->container->dialog->dialogBody->dialog7->d7meshkvm->d7desktopOtherSettings->d7otherset2->d7deskAutoLockLabel" @@ -37464,8 +37464,8 @@ { "en": "Login Token", "nl": "Inlogtoken", - "pt-br": "Token de Login", "pl": "Token Logowania", + "pt-br": "Token de Login", "xloc": [ "default.handlebars->39->2824" ] @@ -38153,9 +38153,9 @@ }, { "en": "MacOS MeshAgent", + "fr": "MeshAgent MacOs", "nl": "MacOS MeshAgent", "pl": "MeshAgent dla MacOS", - "fr": "MeshAgent MacOs", "pt-br": "MeshAgent MacOS", "xloc": [ "default.handlebars->39->2091", @@ -38939,9 +38939,9 @@ }, { "en": "Maximum keys reached.", + "fr": "Nombre de clés maximum atteint.", "nl": "Maximum aantal sleutels bereikt.", "pl": "Osiągnięto maximum klawiszy.", - "fr": "Nombre de clés maximum atteint.", "pt-br": "Máximo de teclas atingido.", "xloc": [ "default.handlebars->39->227" @@ -39685,9 +39685,9 @@ "ja": "MeshCentral SSHのサポートには、NodeJS11以降が必要です。", "nl": "MeshCentral SSH ondersteuning vereist NodeJS 11 of hoger.", "pl": "Obsługa MeshCentral SSH wymaga NodeJS 11 lub nowszego.", + "pt-br": "O suporte ao MeshCentral SSH requer NodeJS 11 ou superior.", "ru": "Для поддержки MeshCentral SSH требуется NodeJS 11 или выше..", "tr": "MeshCentral SSH desteği, NodeJS 11 veya üstünü gerektirir.", - "pt-br": "O suporte ao MeshCentral SSH requer NodeJS 11 ou superior.", "xloc": [ "default.handlebars->39->83" ] @@ -40381,9 +40381,9 @@ "ja": "Let'sEncryptのメールアドレスがありません。", "nl": "Ontbrekend Let's Encrypt e-mailadres.", "pl": "Brak adresu e-mail Let's Encrypt.", + "pt-br": "Endereço de e-mail Let's Encrypt ausente.", "ru": "Отсутствует адрес электронной почты Let's Encrypt.", "tr": "Let's Encrypt e-posta adresi eksik.", - "pt-br": "Endereço de e-mail Let's Encrypt ausente.", "xloc": [ "default.handlebars->39->92" ] @@ -40401,9 +40401,9 @@ "ja": "WebDAVパラメーターがありません。", "nl": "Ontbrekende WebDAV parameters.", "pl": "Brak parametrów WebDAV.", + "pt-br": "Parâmetros WebDAV ausentes.", "ru": "Отсутствуют параметры WebDAV.", "tr": "WebDAV parametreleri eksik.", - "pt-br": "Parâmetros WebDAV ausentes.", "xloc": [ "default.handlebars->39->84" ] @@ -40930,9 +40930,9 @@ "ja": "マイレポート", "nl": "Mijn rapporten", "pl": "Moje Raporty", + "pt-br": "Meus Relatórios", "ru": "Мои отчеты", "tr": "Raporlarım", - "pt-br": "Meus Relatórios", "xloc": [ "default.handlebars->container->column_l->p60->p60title->1" ] @@ -41224,7 +41224,7 @@ "en": "NOT RUNNING", "es": "NO EJECUTANDOSE", "fi": "EI RUNNING", - "fr": "NE PAS COURRIR", + "fr": "PAS EN FONCTIONNEMENT", "hi": "चल नहीं रहा", "it": "NON IN ESECUZIONE", "ja": "走っていない", @@ -41506,7 +41506,7 @@ "en": "Networking", "es": "Redes", "fi": "Verkko", - "fr": "La mise en réseau", + "fr": "Réseaux", "hi": "नेटवर्किंग", "it": "Rete ", "ja": "ネットワーキング", @@ -41799,9 +41799,9 @@ "ja": "新しいバージョン", "nl": "Nieuwe versie", "pl": "Nowa Wersja", + "pt-br": "Nova Versão", "ru": "Новая версия", "tr": "Yeni sürüm", - "pt-br": "Nova Versão", "xloc": [ "agent-translations.json" ] @@ -42427,9 +42427,9 @@ "ja": "新しいデバイスはありません", "nl": "Geen nieuwe apparaten", "pl": "Brak Nowych Urządzeń", + "pt-br": "Não dispositivo novo", "ru": "Запретить добавление новых устройств", "tr": "Yeni Cihaz Yok", - "pt-br": "Não dispositivo novo", "xloc": [ "default.handlebars->39->2472" ] @@ -43271,9 +43271,9 @@ "ja": "キーボード文字列が定義されていません", "nl": "Geen toetsenbord strings gedefineerd", "pl": "Nie zdefiniowano ciągu klawiatury", + "pt-br": "Nenhuma string de teclado definida", "ru": "Клавиатурные строки не заданны", "tr": "Tanımlanmış klavye dizesi yok", - "pt-br": "Nenhuma string de teclado definida", "xloc": [ "default.handlebars->39->1254" ] @@ -44817,8 +44817,8 @@ { "en": "One-Time Password", "nl": "Eenmalig wachtwoord", - "pt-br": "One-Time Password (Senha de único acesso)", "pl": "Hasło Jednorazowe", + "pt-br": "One-Time Password (Senha de único acesso)", "xloc": [ "default.handlebars->39->2822" ] @@ -45764,7 +45764,7 @@ "en": "Part Number", "es": "Numero de Parte", "fi": "Osa numero", - "fr": "Numéro d'article", + "fr": "Réference", "hi": "भाग संख्या", "it": "Numero di parte ", "ja": "品番", @@ -46841,9 +46841,9 @@ "ja": "電源オフを実行しますか?", "nl": "Uitschakelen uitvoeren?", "pl": "Czy wykonać wyłączenie?", + "pt-br": "Desligar?", "ru": "Выключить питание?", "tr": "Güç kapatılsın mı?", - "pt-br": "Desligar?", "xloc": [ "default-mobile.handlebars->11->347", "default.handlebars->39->977" @@ -46862,9 +46862,9 @@ "ja": "電源を入れますか?", "nl": "Inschakelen uitvoeren?", "pl": "Czy wykonać uruchomienie?", + "pt-br": "Ligar", "ru": "Включить питание?", "tr": "Güç açık mı?", - "pt-br": "Ligar", "xloc": [ "default-mobile.handlebars->11->349", "default.handlebars->39->979" @@ -47587,9 +47587,9 @@ "ja": "ポート名同期", "nl": "Poort naam synchronisatie", "pl": "Synchronizacja Nazwy Portu", + "pt-br": "Sincronizar Nome da Porta", "ru": "Синхронизация имени порта", "tr": "Bağlantı Noktası Adı Senkronizasyonu", - "pt-br": "Sincronizar Nome da Porta", "xloc": [ "default.handlebars->39->1856" ] @@ -47607,9 +47607,9 @@ "ja": "ポート番号", "nl": "Poortnummer", "pl": "Numer Portu", + "pt-br": "Número da Porta", "ru": "Номер порта", "tr": "Port numarası", - "pt-br": "Número da Porta", "xloc": [ "default-mobile.handlebars->11->280", "default.handlebars->39->786" @@ -47628,9 +47628,9 @@ "ja": "ポートタイプ", "nl": "Poort type", "pl": "Typ Portu", + "pt-br": "Tipo de Porta", "ru": "Тип порта", "tr": "Bağlantı Noktası Türü", - "pt-br": "Tipo de Porta", "xloc": [ "default-mobile.handlebars->11->281", "default.handlebars->39->787" @@ -47792,9 +47792,9 @@ "ja": "電源操作", "nl": "Power Operation", "pl": "Operacja Zasilania", + "pt-br": "Operação de energia", "ru": "Работа с питанием", "tr": "Güç Çalışması", - "pt-br": "Operação de energia", "xloc": [ "default-mobile.handlebars->11->346", "default-mobile.handlebars->11->348", @@ -47919,9 +47919,9 @@ "ja": "電源スイッチを使用する準備が整いました。", "nl": "Aan/uit-schakelaar is klaar voor gebruik.", "pl": "Włącznik jest gotowy do użycia.", + "pt-br": "Interruptor de energia pronto para o uso.", "ru": "Выключатель питания готов к использованию.", "tr": "Güç anahtarı kullanıma hazırdır.", - "pt-br": "Interruptor de energia pronto para o uso.", "xloc": [ "default.handlebars->39->618" ] @@ -48777,8 +48777,8 @@ { "en": "Push Notification", "nl": "Push Notificatie", - "pt-br": "Notificação de Push", "pl": "Powiadomianie Push", + "pt-br": "Notificação de Push", "xloc": [ "default.handlebars->39->2821" ] @@ -49579,9 +49579,9 @@ "ja": "繰り返し", "nl": "Terugkerend", "pl": "Powtarzanie", + "pt-br": "Recorrente", "ru": "Повторяющийся", "tr": "yinelenen", - "pt-br": "Recorrente", "xloc": [ "default.handlebars->39->277", "default.handlebars->39->279" @@ -49600,9 +49600,9 @@ "ja": "毎日繰り返される", "nl": "Dagelijks terugkerend", "pl": "Powtarzanie codzienne", + "pt-br": "Diariamente", "ru": "Ежедневно", "tr": "Günlük yinelenen", - "pt-br": "Diariamente", "xloc": [ "default.handlebars->39->1071" ] @@ -49620,9 +49620,9 @@ "ja": "毎週繰り返される", "nl": "Wekelijks terugkerend", "pl": "Powtarzanie co tydzień", + "pt-br": "Semanalmente", "ru": "Еженедельно", "tr": "Haftalık yinelenen", - "pt-br": "Semanalmente", "xloc": [ "default.handlebars->39->1072" ] @@ -49981,8 +49981,8 @@ { "en": "Remember Device", "nl": "Onthoud apparaat", - "pt-br": "Lembrar dispositivo", "pl": "Pamiętaj Urządzenie", + "pt-br": "Lembrar dispositivo", "xloc": [ "default.handlebars->39->2823" ] @@ -51848,9 +51848,9 @@ "ja": "アカウントの表示名を削除しました。", "nl": "Weergavenaam account verwijderd.", "pl": "Usunięto nazwę wyświetlania konta.", + "pt-br": "Remover nome de exibição da conta.", "ru": "Удалено отображаемое имя учетной записи.", "tr": "Hesabın görünen adı kaldırıldı.", - "pt-br": "Remover nome de exibição da conta.", "xloc": [ "default.handlebars->39->2310" ] @@ -52276,9 +52276,9 @@ "ja": "レポートは全体を返しませんでした。", "nl": "Rapport heeft geen vermeldingen geretourneerd.", "pl": "Raport zwrócił brak wpisów.", + "pt-br": "O relatório não retornou entradas.", "ru": "Отчет не вернул данных", "tr": "Rapor hiçbir bütün döndürmedi.", - "pt-br": "O relatório não retornou entradas.", "xloc": [ "default.handlebars->39->2794" ] @@ -52318,9 +52318,9 @@ "ja": "レポート", "nl": "Rapport", "pl": "Raporty", + "pt-br": "Relatório", "ru": "Отчеты", "tr": "Raporlar", - "pt-br": "Relatório", "xloc": [ "default.handlebars->container->topbar->1->1->EventsSubMenuSpan->EventsSubMenu->1->0->EventsReport" ] @@ -53443,9 +53443,9 @@ "ja": "ランニング", "nl": "lopende", "pl": "Uruchomiony", + "pt-br": "Executando", "ru": "Запущен", "tr": "Koşma", - "pt-br": "Executando", "xloc": [ "default.handlebars->39->1265", "default.handlebars->39->1269" @@ -53645,9 +53645,9 @@ }, { "en": "SCROLL", + "fr": "Défilement", "nl": "SCROLL", "pl": "SCROLL", - "fr": "Défilement", "xloc": [ "default.handlebars->container->column_l->p11->7->p11scrolllock" ] @@ -53778,9 +53778,9 @@ "ja": "SMSゲートウェイは、LANモードでの使用が制限されています。", "nl": "SMS gateway heeft beperkte mogelijkheden in LAN modus.", "pl": "Bramka SMS ma ograniczone zastosowanie w trybie LAN.", + "pt-br": "O gateway SMS tem uso limitado em modo LAN.", "ru": "SMS-шлюз имеет ограниченное применение в LAN режиме.", "tr": "SMS ağ geçidinin LAN modunda sınırlı kullanımı vardır.", - "pt-br": "O gateway SMS tem uso limitado em modo LAN.", "xloc": [ "default.handlebars->39->101" ] @@ -53813,8 +53813,8 @@ { "en": "SMS message", "nl": "SMS bericht", - "pt-br": "Mensagem SMS", "pl": "Wiadomość SMS", + "pt-br": "Mensagem SMS", "xloc": [ "default.handlebars->39->2819" ] @@ -53905,9 +53905,9 @@ "ja": "SMTPサーバーはLANモードでの使用が制限されています。", "nl": "SMTP server heeft beperkte mogelijkheden in LAN modus.", "pl": "Serwer SMTP ma ograniczone wykorzystanie w trybie LAN.", + "pt-br": "O servidor SMTP tem uso limitado em modo LAN", "ru": "SMTP-сервер имеет ограниченное применение в LAN режиме.", "tr": "SMTP sunucusunun LAN modunda sınırlı kullanımı vardır.", - "pt-br": "O servidor SMTP tem uso limitado em modo LAN", "xloc": [ "default.handlebars->39->100" ] @@ -54693,9 +54693,9 @@ "ja": "ひみつ", "nl": "Geheim", "pl": "Sekret", + "pt-br": "Segredo", "ru": "Ключ", "tr": "Gizli", - "pt-br": "Segredo", "xloc": [ "default.handlebars->39->202" ] @@ -54937,9 +54937,9 @@ "ja": "日付と時刻を選択...", "nl": "Selecteer datum & Tijd...", "pl": "Wybierz Datę i Czas...", + "pt-br": "Selecionar Data & Hora...", "ru": "Выберите дату и время...", "tr": "Tarih ve Saati Seçin...", - "pt-br": "Selecionar Data & Hora...", "xloc": [ "default.handlebars->39->1075", "default.handlebars->39->1077", @@ -55722,9 +55722,9 @@ "ja": "SendGridサーバーはLANモードでの使用が制限されています。", "nl": "SendGrid server heeft beperkte mogelijkeden LAN modus.", "pl": "Serwer SendGrid ma ograniczone zastosowanie w trybie LAN.", + "pt-br": "O servidor SendGrid tem uso limitado no modo LAN.", "ru": "Сервер SendGrid имеет ограниченное применение в LAN режиме.", "tr": "SendGrid sunucusunun LAN modunda sınırlı kullanımı vardır.", - "pt-br": "O servidor SendGrid tem uso limitado no modo LAN.", "xloc": [ "default.handlebars->39->99" ] @@ -55809,7 +55809,7 @@ "en": "Serial", "es": "Número de Serie", "fi": "Sarja", - "fr": "En série", + "fr": "Numéro de série", "hi": "धारावाहिक", "it": "Seriale", "ja": "シリアル", @@ -56826,9 +56826,9 @@ "ja": "セッションタイムアウト。", "nl": "Sessie timeout.", "pl": "Przekroczony czas Sesji.", + "pt-br": "Sessão expirada.", "ru": "Тайм-аут сеанса.", "tr": "Oturum zaman aşımına uğradı.", - "pt-br": "Sessão expirada.", "xloc": [ "ssh.handlebars->3->27" ] @@ -56898,9 +56898,9 @@ "ja": "クリップボードを設定する", "nl": "Klembord instellen", "pl": "Ustaw schowek", + "pt-br": "Enviar área de transferência ", "ru": "Установить буфер", "tr": "Panoyu Ayarla", - "pt-br": "Enviar área de transferência ", "xloc": [ "default.handlebars->39->1258" ] @@ -57294,9 +57294,9 @@ "ja": "デバイスをゲストと共有する", "nl": "Deel het apparaat met een gast", "pl": "Współdziel to urządzenie z gościem", + "pt-br": "Compartilhar dispositivo com convidado", "ru": "Поделиться устройством с гостем", "tr": "Cihazı bir misafirle paylaşın", - "pt-br": "Compartilhar dispositivo com convidado", "xloc": [ "default.handlebars->container->column_l->p11->deskarea0->deskarea4->1" ] @@ -57363,9 +57363,9 @@ "ja": "デスクトップの共有:{0}", "nl": "Bureaublad delen met: {0}", "pl": "Współdzielenie pulpitu z: {0}", + "pt-br": "Compartilhando área de trabalho com: {0}", "ru": "Доступ к рабочему столу предоставлен: {0}", "tr": "Masaüstünü şu kişilerle paylaşma: {0}", - "pt-br": "Compartilhando área de trabalho com: {0}", "xloc": [ "coretranslations.json" ] @@ -57674,9 +57674,9 @@ "ja": "ゲスト名を表示", "nl": "Toon gasten naam", "pl": "Pokaż Nazwę Gościa", + "pt-br": "Exibir Nome do Convidado", "ru": "Показать имя гостя", - "tr": "Misafir Adını Göster", - "pt-br": "Exibir Nome do Convidado" + "tr": "Misafir Adını Göster" }, { "cs": "Zobrazit nápovědu", @@ -57791,9 +57791,9 @@ "ja": "トラフィックを表示", "nl": "Toon verkeer", "pl": "Pokaż Ruch", + "pt-br": "Mostrar Tráfego", "ru": "Показать трафик", "tr": "Trafiği Göster", - "pt-br": "Mostrar Tráfego", "xloc": [ "default.handlebars->39->2778" ] @@ -58404,8 +58404,8 @@ { "en": "Single Sign-on", "nl": "Eenmalig inloggen", - "pt-br": "Single Sign-on (Login único)", "pl": "Pojedyncze Logowanie", + "pt-br": "Single Sign-on (Login único)", "xloc": [ "default.handlebars->39->2826" ] @@ -59813,9 +59813,9 @@ }, { "en": "Started Web-RDP session \\\"{0}\\\".", + "fr": "Démarrage de la session Web-RDP \\\"{0}\\\".", "nl": "Gestarte Web-RDP sessie \\\"{0}\\\".", "pl": "Uruchomiono sesję Web-RDP \\\"{0}\\\".", - "fr": "Démarrage de la session Web-RDP \\\"{0}\\\".", "pt-br": "Sessão Web-RDP \\\"{0}\\\" iniciada.", "xloc": [ "default.handlebars->39->2331" @@ -59823,9 +59823,9 @@ }, { "en": "Started Web-SFTP session \\\"{0}\\\".", + "fr": "Démarrage de la session Web-SFTP \\\"{0}\\\".", "nl": "Gestarte Web-SFTP sessie \\\"{0}\\\".", "pl": "Uruchomiono sesję Web-SFTP \\\"{0}\\\".", - "fr": "Démarrage de la session Web-SFTP \\\"{0}\\\".", "pt-br": "Sessão Web-SFTP \\\"{0}\\\" iniciada", "xloc": [ "default.handlebars->39->2330" @@ -59833,9 +59833,9 @@ }, { "en": "Started Web-SSH session \\\"{0}\\\".", + "fr": "Démarrage de la session Web-SSH \\\"{0}\\\".", "nl": "Gestarte Web-SSH sessie \\\"{0}\\\".", "pl": "Uruchomiono sesję Web-SSH \\\"{0}\\\".", - "fr": "Démarrage de la session Web-SSH \\\"{0}\\\".", "pt-br": "Sessão Web-SSH \\\"{0}\\\" iniciada", "xloc": [ "default.handlebars->39->2329" @@ -59843,9 +59843,9 @@ }, { "en": "Started Web-VNC session \\\"{0}\\\".", + "fr": "Démarrage de la session Web-VNC \\\"{0}\\\".", "nl": "Gestarte Web-VNC sessie \\\"{0}\\\".", "pl": "Uruchomiono sesję Web-VNC \\\"{0}\\\".", - "fr": "Démarrage de la session Web-VNC \\\"{0}\\\".", "pt-br": "Sessão Web-VNC \\\"{0}\\\" iniciada", "xloc": [ "default.handlebars->39->2332" @@ -59878,9 +59878,9 @@ }, { "en": "Started desktop multiplex session \\\"{0}\\\"", + "fr": "Démarrage de la session de bureau multiplexée \\\"{0}\\\"", "nl": "Startte een Desktop multiplexsessie \\\"{0}\\\"", "pl": "Uruchomienie sesji multiplex pulpitów \\\"{0}\\\"", - "fr": "Démarrage de la session de bureau multiplexée \\\"{0}\\\"", "pt-br": "Sessão de área de trabalho multiplex \\\"{0}\\\" iniciada", "xloc": [ "default.handlebars->39->2326" @@ -60454,7 +60454,7 @@ "en": "Storage", "es": "Almacenamiento", "fi": "Tallennustila", - "fr": "Espace de rangement", + "fr": "Stockage", "hi": "भंडारण", "it": "Spazio di archiviazione", "ja": "ストレージ", @@ -60639,9 +60639,9 @@ }, { "en": "Succesful login", + "fr": "Connexion réussie", "nl": "Geslaagde inlog", "pl": "Poprawne logowanie", - "fr": "Connexion réussie", "pt-br": "Login realizado com sucesso", "xloc": [ "default.handlebars->39->2812", @@ -60936,9 +60936,9 @@ "ja": "スイッチポートが接続されています", "nl": "Schakelpoort verbonden", "pl": "Przełącz połączony port", + "pt-br": "Porta do switch conectada", "ru": "Порт свитча подключен", "tr": "Bağlantı noktasını değiştir", - "pt-br": "Porta do switch conectada", "xloc": [ "default.handlebars->39->935", "default.handlebars->39->936" @@ -60957,9 +60957,9 @@ "ja": "スイッチポートを使用する準備が整いました。", "nl": "Schakelpoort is klaar voor gebruik..", "pl": "Przełącz port na gotowy do użycia.", + "pt-br": "Porta do switch está pronto para o uso.", "ru": "Порт свитча готов к использованию.", "tr": "Anahtar portu kullanıma hazırdır.", - "pt-br": "Porta do switch está pronto para o uso.", "xloc": [ "default.handlebars->39->370" ] @@ -61002,9 +61002,9 @@ "ja": "サーバーデバイス名をポート名に同期する", "nl": "Synchroniseer de naam van de server met de poortnaam", "pl": "Synchronizuj nazwę urządzenia serwera na nazwę portu", + "pt-br": "Sincronizar nome do dispositivo do servidor com o nome da porta", "ru": "Синхронизировать имя устройства сервера с именем порта", "tr": "Sunucu cihaz adını bağlantı noktası adıyla senkronize et", - "pt-br": "Sincronizar nome do dispositivo do servidor com o nome da porta", "xloc": [ "default.handlebars->39->1994" ] @@ -61442,7 +61442,7 @@ "en": "Tags", "es": "Etiquetas", "fi": "Tunnisteet", - "fr": "Mots clés", + "fr": "Etiquettes", "hi": "टैग", "it": "Tags", "ja": "タグ", @@ -61883,9 +61883,9 @@ "ja": "デバイスの電源がオフになっています", "nl": "Het apparaat is uitgeschakeld", "pl": "To urządzenie jest wyłączone", + "pt-br": "O dispositivo está desligado", "ru": "Устройство выключено", "tr": "Cihaz kapalı", - "pt-br": "O dispositivo está desligado", "xloc": [ "default-mobile.handlebars->11->253", "default.handlebars->39->617" @@ -61930,9 +61930,9 @@ "ja": "次のデバイスは接続状態を変更しました。", "nl": "De volgende apparaten hebben hun verbindingsstatus gewijzigd.", "pl": "Przedstawione urządzenia zmieniły stan połączenia.", + "pt-br": "Os seguintes dispositivos mudaram seus estados de conexão.", "ru": "Следующие устройства изменили свое состояние подключения.", "tr": "Aşağıdaki cihazlar bağlantı durumlarını değiştirdi.", - "pt-br": "Os seguintes dispositivos mudaram seus estados de conexão.", "xloc": [ "device-notify.html->2->3->1", "device-notify.txt" @@ -61973,9 +61973,9 @@ "ja": "このインストーラーのグラフィカルバージョンは、このシステムでは実行できません", "nl": "De grafische versie van dit installatieprogramma kan niet op dit systeem draaien", "pl": "Graficzna wersja tego instalatora nie może być uruchomiona w tym systemie", + "pt-br": "A versão gráfica do instalador não pode ser executada neste sistema", "ru": "Графическая версия этого установщика не может быть запущена в этой системе.", "tr": "Bu yükleyicinin grafik sürümü bu sistemde çalışamaz", - "pt-br": "A versão gráfica do instalador não pode ser executada neste sistema", "xloc": [ "agent-translations.json" ] @@ -63253,9 +63253,9 @@ "ja": "退会するには、", "nl": "Uitschrijven,", "pl": "By się wypisać.", + "pt-br": "Cancelar inscrição", "ru": "Чтобы отписаться,", "tr": "Abonelikten çıkmak,", - "pt-br": "Cancelar inscrição", "xloc": [ "device-notify.html->2->9->1" ] @@ -63273,9 +63273,9 @@ "ja": "登録を解除するには、次のメッセージが表示されてから1時間以内に次のリンクを読み込みます:[[[SERVERURL]]] [[[[UNSUBSCRIBELINK]]]", "nl": "Om je af te melden, open je deze link binnen 1 uur nadat je dit bericht hebt ontvangen: [[[SERVERURL]]][[[UNSUBSCRIBELINK]]]", "pl": "By się wypisać, załaduj ten link w ciągu 1 godziny od otrzymania wiadomości: [[[SERVERURL]]][[[UNSUBSCRIBELINK]]]", + "pt-br": "Para cancelar inscrição, clique no link dentro de 1 hora após receber esta mensagem: [[[SERVERURL]]][[[UNSUBSCRIBELINK]]]", "ru": "Чтобы отказаться от подписки, откройте эту ссылку в течение 1 часа после получения этого сообщения: [[[SERVERURL]]][[[UNSUBSCRIBELINK]]]", "tr": "Aboneliğinizi iptal etmek için, bu mesajı aldıktan sonraki 1 saat içinde bu bağlantıyı yükleyin: [[[SERVERURL]]][[[UNSUBSCRIBELINK]]]", - "pt-br": "Para cancelar inscrição, clique no link dentro de 1 hora após receber esta mensagem: [[[SERVERURL]]][[[UNSUBSCRIBELINK]]]", "xloc": [ "device-notify.txt" ] @@ -64148,9 +64148,9 @@ "ja": "消す", "nl": "Uitschakelen", "pl": "Wyłącz", + "pt-br": "Desligar", "ru": "Выключить", "tr": "Kapat", - "pt-br": "Desligar", "xloc": [ "default-mobile.handlebars->11->333", "default-mobile.handlebars->11->334", @@ -64171,9 +64171,9 @@ "ja": "消す。", "nl": "Uitschakelen", "pl": "Wyłącz.", + "pt-br": "Desligar.", "ru": "Выключить.", "tr": "Kapat.", - "pt-br": "Desligar.", "xloc": [ "default.handlebars->39->2314" ] @@ -64191,9 +64191,9 @@ "ja": "オンにする", "nl": "Inschakelen", "pl": "Włącz", + "pt-br": "Ligar", "ru": "Включить", "tr": "Aç", - "pt-br": "Ligar", "xloc": [ "default-mobile.handlebars->11->335", "default-mobile.handlebars->11->336", @@ -64214,9 +64214,9 @@ "ja": "オンにする。", "nl": "Inschakelen.", "pl": "Włącz.", + "pt-br": "Ligar.", "ru": "Включить.", "tr": "Aç.", - "pt-br": "Ligar.", "xloc": [ "default.handlebars->39->2313" ] @@ -64825,9 +64825,9 @@ "ja": "CloudFlareの信頼できるプロキシIPv6アドレスリストを読み込めません。", "nl": "Kan CloudFlare vertrouwde proxy IPv6 adreslijst niet laden.", "pl": "Nie można załadować listy adresów IPv6 zaufanego serwera proxy CloudFlare.", + "pt-br": "Incapaz de carregar a lista de endereços do proxy confiável IPv6 da CloudFlare", "ru": "Не удалось загрузить список IPv6 адресов доверенных прокси-серверов CloudFlare.", "tr": "CloudFlare güvenilir proxy IPv6 adres listesi yüklenemiyor.", - "pt-br": "Incapaz de carregar a lista de endereços do proxy confiável IPv6 da CloudFlare", "xloc": [ "default.handlebars->39->98" ] @@ -64845,9 +64845,9 @@ "ja": "デフォルトドメインのIntelAMTTLSルート証明書を読み込めません。", "nl": "Kan Intel AMT TLS rootcertificaat voor standaarddomein niet laden.", "pl": "Nie można załadować certyfikatu głównego Intel AMT TLS dla domeny domyślnej.", + "pt-br": "Incapaz de carregar o certificado raiz para o domínio padrão do Intel AMT TLS", "ru": "Не удалось загрузить корневой сертификат Intel AMT TLS для домена по умолчанию.", "tr": "Varsayılan etki alanı için Intel AMT TLS kök sertifikası yüklenemiyor.", - "pt-br": "Incapaz de carregar o certificado raiz para o domínio padrão do Intel AMT TLS", "xloc": [ "default.handlebars->39->87" ] @@ -64865,9 +64865,9 @@ "ja": "ドメイン{0}のIntelAMTTLSルート証明書を読み込めません。", "nl": "Kan Intel AMT TLS rootcertificaat voor domein {0} niet laden.", "pl": "Nie można załadować certyfikatu głównego Intel AMT TLS dla domeny {0}.", + "pt-br": "Incapaz de carregar o certificado raiz para o domínio {0} do Intel AMT TLS", "ru": "Не удалось загрузить корневой сертификат Intel AMT TLS для домена {0}.", "tr": "{0} alanı için Intel AMT TLS kök sertifikası yüklenemiyor.", - "pt-br": "Incapaz de carregar o certificado raiz para o domínio {0} do Intel AMT TLS", "xloc": [ "default.handlebars->39->88" ] @@ -65017,9 +65017,9 @@ "ja": "Let'sEncryptモジュールをセットアップできません。", "nl": "Kan de Let's Encrypt module niet instellen.", "pl": "Nie można skonfigurować modułu Let's Encrypt.", + "pt-br": "Incapaz de configurar o módulo Let's Encrypt.", "ru": "Не удалось настроить модуль Let's Encrypt.", "tr": "Let's Encrypt modülü kurulamıyor.", - "pt-br": "Incapaz de configurar o módulo Let's Encrypt.", "xloc": [ "default.handlebars->39->95" ] @@ -65375,9 +65375,9 @@ "ja": "不明なユーザー", "nl": "Onbekende gebruiker", "pl": "Nieznany Użytkownik", + "pt-br": "usuário desconhecido", "ru": "Неизвестный пользователь", "tr": "Bilinmeyen kullanıcı", - "pt-br": "usuário desconhecido", "xloc": [ "default.handlebars->39->2811", "default.handlebars->39->2831" @@ -65550,9 +65550,9 @@ "ja": "認識されない構成オプション\\\"{0}\\\"。", "nl": "Niet herkende configuratie instelling \\\"{0}\\\".", "pl": "Nierozpoznana opcja konfiguracji \\\"{0}\\\".", + "pt-br": "Opção de configuração \\\"{0}\\\". não reconhecida ", "ru": "Неизвестный параметр конфигурации \\\"{0}\\\".", "tr": "Tanınmayan yapılandırma seçeneği \\\"{0}\\\".", - "pt-br": "Opção de configuração \\\"{0}\\\". não reconhecida ", "xloc": [ "default.handlebars->39->85" ] @@ -65589,7 +65589,7 @@ "en": "Up", "es": "Subir", "fi": "Ylös", - "fr": "Up", + "fr": "Parent", "hi": "यूपी", "it": "Su", "ja": "アップ", @@ -66768,9 +66768,9 @@ }, { "en": "User Logins", + "fr": "Connexions utilisateurs", "nl": "Gebruikersaanmeldingen", "pl": "Logowania Użytkownika", - "fr": "Connexions utilisateurs", "pt-br": "Logins de usuários", "xloc": [ "default.handlebars->39->2760" @@ -66964,9 +66964,9 @@ "ja": "ユーザートラフィックの使用", "nl": "Gebruik van gebruikersverkeer", "pl": "Wykorzystanie Pasma przez Użytkownika", + "pt-br": "Uso de Trafego de Usuário", "ru": "Расход трафика пользователями", "tr": "Kullanıcı Trafiği Kullanımı", - "pt-br": "Uso de Trafego de Usuário", "xloc": [ "default.handlebars->39->2759" ] @@ -67263,9 +67263,9 @@ "ja": "ユーザー通知が変更されました", "nl": "Gebruikersmeldingen gewijzigd", "pl": "Powiadomienia użytkownika zmieniono", + "pt-br": "Notificações de usuários alteradas", "ru": "Уведомления пользователей изменены", "tr": "Kullanıcı bildirimleri değişti", - "pt-br": "Notificações de usuários alteradas", "xloc": [ "default.handlebars->39->2311" ] @@ -68846,9 +68846,9 @@ "ja": "Webページの通知", "nl": "Webpagina meldingen", "pl": "Powiadomienia Strony Web", + "pt-br": "Notificação de Página Web", "ru": "Веб Push-уведомления", "tr": "Web Sayfası Bildirimleri", - "pt-br": "Notificação de Página Web", "xloc": [ "default.handlebars->39->2105", "default.handlebars->39->980" @@ -69132,9 +69132,9 @@ "ja": "WebSocket圧縮が無効になっているため、この機能はNodeJSv11.11からv12.15およびv13.2で機能しなくなります。", "nl": "WebSocket compressie is uitgeschakeld, deze functie werkt niet meer in NodeJS v11.11 tot v12.15 en v13.2", "pl": "Kompresja WebSocket jest wyłączona, ta funkcja nie działa w NodeJS v11.11 do v12.15 i v13.2", + "pt-br": "Compressão WebSocket desabilitada, este recurso está com falha no NodeJS v11.11 ao v12.15 e v13.2", "ru": "Сжатие WebSocket отключено, эта функция не работает в NodeJS v11..с 11 по 12 версию.15 и v13.2", "tr": "WebSocket sıkıştırması devre dışı, bu özellik NodeJS v11.11'den v12.15'e ve v13.2'de bozuk", - "pt-br": "Compressão WebSocket desabilitada, este recurso está com falha no NodeJS v11.11 ao v12.15 e v13.2", "xloc": [ "default.handlebars->39->86" ] @@ -69176,9 +69176,9 @@ "ja": "毎週", "nl": "Wekelijks", "pl": "Tygodnowo", + "pt-br": "Semanalmente", "ru": "Еженедельно", "tr": "Haftalık", - "pt-br": "Semanalmente", "xloc": [ "default.handlebars->39->280" ] @@ -70045,9 +70045,9 @@ }, { "en": "Windows MeshAgent", + "fr": "MeshAgent Windows", "nl": "Windows MeshAgent", "pl": "MeshAgent dla Windows", - "fr": "MeshAgent Windows", "pt-br": "MeshAgent Windows", "xloc": [ "default.handlebars->39->2089", @@ -71077,9 +71077,9 @@ "ja": "[[[SERVERNAME]]]-デバイス通知", "nl": "[[[SERVERNAME]]] - Apparaatmelding", "pl": "[[[SERVERNAME]]] - Powiadomienia Urządzenia", + "pt-br": "[[[SERVERNAME]]] - Notificação do dispositivo", "ru": "[[[SERVERNAME]]] - Уведомление устройства", "tr": "[[[SERVERNAME]]] - Cihaz Bildirimi", - "pt-br": "[[[SERVERNAME]]] - Notificação do dispositivo", "xloc": [ "device-notify.html->0", "device-notify.html->2->1->1->0->1->1", @@ -73543,9 +73543,9 @@ "ja": "このメッセージを受け取ってから1時間以内。", "nl": "binnen 1 uur na ontvangst van dit bericht.", "pl": "w ciągu 1 godziny od otrzymania wiadomości.", + "pt-br": "Com 1 hora após recebida está mensagem.", "ru": "в течение 1 часа после получения этого сообщения.", "tr": "Bu mesajı aldıktan sonra 1 saat içinde.", - "pt-br": "Com 1 hora após recebida está mensagem.", "xloc": [ "device-notify.html->2->9->1" ] @@ -73692,7 +73692,7 @@ "en": "{0} Gb", "es": "{0} Gb", "fi": "{0} Gb", - "fr": "{0} Gb", + "fr": "{0} Go", "hi": "{0} जी.बी.", "it": "{0} Gb", "ja": "{0} Gb", @@ -73718,7 +73718,7 @@ "en": "{0} Gbytes/sec", "es": "{0} Gbytes / seg", "fi": "{0} Tavu/s", - "fr": "{0} Gbytes/sec", + "fr": "{0} Goctets/sec", "hi": "{0} गीबाइट्स/सेकंड", "it": "{0} Gbyte/sec", "ja": "{0}ギガバイト/秒", @@ -73739,7 +73739,7 @@ "en": "{0} Kb", "es": "{0} Kb", "fi": "{0} Kb", - "fr": "{0} Kb", + "fr": "{0} Ko", "hi": "{0} Kb", "it": "{0} Kb", "ja": "{0} Kb", @@ -73766,7 +73766,7 @@ "en": "{0} Kbytes/sec", "es": "{0} Kbytes / seg", "fi": "{0} Kt/sek", - "fr": "{0} Kbytes/sec", + "fr": "{0} Koctets/sec", "hi": "{0} किलोबाइट/सेकंड", "it": "{0} Kbyte/sec", "ja": "{0}キロバイト/秒", @@ -73787,7 +73787,7 @@ "en": "{0} Mb", "es": "{0} Mb", "fi": "{0} Mb", - "fr": "{0} Mб", + "fr": "{0} Mo", "hi": "{0} एमबी", "it": "{0} Mb", "ja": "{0} Mb", @@ -73817,7 +73817,7 @@ "en": "{0} Mb, {1} Mhz", "es": "{0} Mb, {1} Mhz", "fi": "{0} Mb, {1} MHz", - "fr": "{0} Mb, {1} Mhz", + "fr": "{0} Mo, {1} Mhz", "hi": "{0} एमबी, {1} Mhz", "it": "{0} Mb, {1} Mhz", "ja": "{0} Mb、{1} Mhz", @@ -73843,7 +73843,7 @@ "en": "{0} Mbytes/sec", "es": "{0} Mbytes / seg", "fi": "{0} Megatavua/sek", - "fr": "{0} Mbytes/sec", + "fr": "{0} Moctets/sec", "hi": "{0}एमबाइट्स/सेकंड", "it": "{0} Mbyte/sec", "ja": "{0}メガバイト/秒", @@ -73970,7 +73970,7 @@ "en": "{0} bytes/sec", "es": "{0} bytes / seg", "fi": "{0} tavua/sek", - "fr": "{0} bytes/sec", + "fr": "{0} octets/sec", "hi": "{0} बाइट्स/सेकंड", "it": "{0} byte/sec", "ja": "{0}バイト/秒", @@ -74190,7 +74190,7 @@ "en": "{0} megabytes remaining", "es": "{0} megabytes restantes", "fi": "{0} megatavua jäljellä", - "fr": "{0} Mo restant", + "fr": "{0} Moctets restant", "hi": "{0} मेगाबाइट शेष", "it": "{0} megabyte rimanenti", "ja": "残り{0}メガバイト", @@ -74221,9 +74221,9 @@ "ja": "{0}分", "nl": "{0} minuut", "pl": "{0} minuta", + "pt-br": "{0} minuto", "ru": "{0} минута", "tr": "{0} dakika", - "pt-br": "{0} minuto", "xloc": [ "default.handlebars->39->272" ] @@ -74241,9 +74241,9 @@ "ja": "{0}分", "nl": "{0} minuten", "pl": "{0} minut", + "pt-br": "{0} minutos", "ru": "{0} минут", "tr": "{0} dakika", - "pt-br": "{0} minutos", "xloc": [ "default.handlebars->39->274" ] @@ -74453,9 +74453,9 @@ "ja": "{0}リモートデスクトップアクセスを要求しています。アクセス許可?", "nl": "{0} verzoekt om toegang tot extern bureaublad.Toegang verlenen?", "pl": "{0} prosi o zdalny dostęp do pulpitu. Przyznać dostęp?", + "pt-br": "{0} está solicitando acesso a área de trabalho remota. Permitir?", "ru": "{0} запрашивает удаленный доступ к рабочему столу. Разрешить доступ?", "tr": "{0} uzak masaüstü erişimi istiyor. Erişim izni veriyor musunuz?", - "pt-br": "{0} está solicitando acesso a área de trabalho remota. Permitir?", "xloc": [ "coretranslations.json" ] @@ -74473,9 +74473,9 @@ "ja": "{0}リモートファイルアクセスを要求しています。アクセス許可?", "nl": "{0} verzoekt om externe bestandstoegang.Toegang verlenen?", "pl": "{0} prosi o zdalny dostęp do plików. Przyznać dostęp?", + "pt-br": "{0} está solicitando acesso aos arquivos. Permitir?", "ru": "{0} запрашивает удаленный доступ к файлам. Разрешить доступ?", "tr": "{0} uzak dosya Erişimi istiyor. Erişim izni veriyor musunuz?", - "pt-br": "{0} está solicitando acesso aos arquivos. Permitir?", "xloc": [ "coretranslations.json" ] @@ -74493,9 +74493,9 @@ "ja": "{0}リモート端末アクセスを要求しています。アクセス許可?", "nl": "{0} verzoekt om toegang tot externe terminal.Toegang verlenen?", "pl": "{0} prosi o zdalny dostęp do terminala. Przyznać dostęp?", + "pt-br": "{0} está solicitando acesso ao terminal. Permitir?", "ru": "{0} запрашивает удаленный доступ к терминалу. Разрешить доступ?", "tr": "{0} uzak terminal erişimi istiyor. Erişim izni veriyor musunuz?", - "pt-br": "{0} está solicitando acesso ao terminal. Permitir?", "xloc": [ "coretranslations.json" ] @@ -74766,9 +74766,9 @@ "ja": "{0}はリモートデスクトップセッションを開始しました。", "nl": "{0} heeft een extern bureaubladsessie gestart.", "pl": "{0} rozpoczął sesję dostępu do pulpitu.", + "pt-br": "{0} iniciou uma sessão de área de trabalho remota.", "ru": "{0} начал сеанс удаленного рабочего стола.", "tr": "{0} bir uzak masaüstü oturumu başlattı.", - "pt-br": "{0} iniciou uma sessão de área de trabalho remota.", "xloc": [ "coretranslations.json" ] @@ -74786,9 +74786,9 @@ "ja": "{0}がリモートファイルセッションを開始しました。", "nl": "{0} heeft een externe bestandssessie gestart.", "pl": "{0} rozpoczął sesję dostępu do plików.", + "pt-br": "{0} {0} iniciou uma sessão de arquivos.", "ru": "{0} начал удаленный файловый сеанс.", "tr": "{0} bir uzak dosya oturumu başlattı.", - "pt-br": "{0} {0} iniciou uma sessão de arquivos.", "xloc": [ "coretranslations.json" ] @@ -74806,9 +74806,9 @@ "ja": "{0}がリモートターミナルセッションを開始しました。", "nl": "{0} heeft een externe terminalsessie gestart.", "pl": "{0} rozpoczął sesję dostępu do terminala.", + "pt-br": "{0} iniciou uma sessão de terminal.", "ru": "{0} начал сеанс удаленного терминала.", "tr": "{0} bir uzak terminal oturumu başlattı.", - "pt-br": "{0} iniciou uma sessão de terminal.", "xloc": [ "coretranslations.json" ] @@ -74949,9 +74949,9 @@ "ja": "{0}、{1}は{2}分", "nl": "{0}, {1} voor {2} minuut", "pl": "{0}, {1} dla {2} minuty", + "pt-br": "{0}, {1} até {2} minuto", "ru": "{0}, {1} на {2} мин.", "tr": "{0}, {1} için {2} dakika", - "pt-br": "{0}, {1} até {2} minuto", "xloc": [ "default.handlebars->39->1917", "default.handlebars->39->967" @@ -74970,9 +74970,9 @@ "ja": "{0}、{1}は{2}分", "nl": "{0}, {1} voor {2} minuten", "pl": "{0}, {1} dla {2} minut", + "pt-br": "{0}, {1} até {2} minutos", "ru": "{0}, {1} на {2} мин.", "tr": "{0}, {1} için {2} dakika", - "pt-br": "{0}, {1} até {2} minutos", "xloc": [ "default.handlebars->39->1918", "default.handlebars->39->968" @@ -75235,17 +75235,17 @@ "ru": "≡" }, { + "cs": "▲", + "da": "▲", + "de": "▲", "en": "▲", - "pl": "▲", "es": "▲", "fi": "▲", "fr": "▲", "it": "▲", "ja": "▲", "nl": "▲", - "cs": "▲", - "da": "▲", - "de": "▲", + "pl": "▲", "pt": "▲", "pt-br": "▲", "ru": "▲", @@ -75254,17 +75254,17 @@ ] }, { + "cs": "▼", + "da": "▼", + "de": "▼", "en": "▼", - "pl": "▼", "es": "▼", "fi": "▼", "fr": "▼", "it": "▼", "ja": "▼", "nl": "▼", - "cs": "▼", - "de": "▼", - "da": "▼", + "pl": "▼", "pt": "▼", "pt-br": "▼", "ru": "▼",