From 128dedfce42b609c987071c58bdedd082940f8ec Mon Sep 17 00:00:00 2001 From: MicJ Date: Wed, 21 Aug 2024 17:02:02 -0400 Subject: [PATCH 01/18] PD-1381 Update Setting Up Backup and other Articles This commit updates the content in the /gettingstarted/configure/setUpBackupSCALE.md article adds a screenshots and deleted the one it replaces in all impacted articles. --- .../Configure/SetUpBackupScale.md | 100 +++++++++++------- .../AddSSHConnectionKeyPair.md | 2 +- .../BackupCredentials/SSHCredentialScreens.md | 4 +- .../Credentials/BackupCredentials/_index.md | 3 +- .../BackupCredentialsAllCloudSSH.png | Bin 24622 -> 0 bytes .../Credentials/BackupCredentialsScreen.png | Bin 0 -> 24268 bytes .../includes/DownloadSystemConfigFileSCALE.md | 18 ++-- 7 files changed, 76 insertions(+), 51 deletions(-) delete mode 100644 static/images/SCALE/Credentials/BackupCredentialsAllCloudSSH.png create mode 100644 static/images/SCALE/Credentials/BackupCredentialsScreen.png diff --git a/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md b/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md index a0ade3fa90..fe1b9f29f2 100644 --- a/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md +++ b/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md @@ -1,6 +1,6 @@ --- title: "Backing Up TrueNAS" -description: "Provides general information and instructions on setting up data storage backups, saving the system configuration and initial system debug file, and creating a boot environment." +description: "Provides general information and instructions on setting up data storage backups, saving the system configuration and initial system debug files, and creating a boot environment." weight: 60 aliases: - /scale/gettingstarted/install/setupbackupscale/ @@ -20,12 +20,38 @@ You should also: * [Download and save your system configuration file](#backing-up-the-system-configuration) to protect your system configuration information. * [Download a debug file](#downloading-the-initial-system-debug-file). * [Create a boot environment](#create-a-boot-environment) to use as a restore point. +* [Backup Stored Data](#backing-up-truenas-storage-data) -You should also set up a data storage backup method using either a cloud sync or replication task. +TrueNAS provides several options to set up a data storage backup method including using either a cloud sync provider and scheduled task, or configuring a replication task. + +## Backing Up the System Configuration +First thing after you set up TrueNAS is to back up your system configuration by downloading the system configuration file. + +{{< include file="/static/includes/DownloadSystemConfigFileSCALE.md" >}} + +### Downloading the Initial System Debug File + +After saving the system configuration, go to **System > Advanced** and click **Save Debug**. After the download completes, save this initial debug file with your system configuration file. + +## Create a Boot Environment + +After installing and completing your SCALE system configuration, [create a boot environment]({{< relref "ManageBootEnvironSCALE.md" >}}) to use as a restore point. + +If an issue occurs where you lose access to the SCALE UI, you can establish an SSH session and restore it from the boot environment. +You can clone the boot environment listed after the **initial-install** environment and rename the clone to something you recognize, such as the release number with date and time. ## Backing Up TrueNAS Storage Data -TrueNAS provides for data backup through cloud sync or replication. +TrueNAS has several options that allow you to back up data: + +* [TrueCloud backup tasks](#using-truecloud-backup-or-cloud-sync) +* [Cloud sync tasks]({{< relref "/Scale/ScaleTutorials/DataProtection/CloudSyncTasks/_index.md" >}}) +* [Replication tasks](#using-replication) +* [Rsync tasks]({{< relref "RsyncTasksSCALE.md" >}}) + +Both TrueCloud backup and cloud sync tasks require setting up a cloud service provider account and adding the credentials in TrueNAS before configuring and schedule the tasks. + +Replication requires setting up SSH credentials before configuring and scheduling the task. Rsync tasks can be configured with SSH credentials or set up to use a module. ### Using TrueCloud Backup or Cloud Sync @@ -35,23 +61,27 @@ SCALE supports major providers like Storj, Amazon S3, Google Cloud, Box, and Mic These providers can charge fees for data transfer and storage, so please review the policies of your cloud storage provider before transferring your data. {{< /hint >}} -You can configure TrueNAS to send, receive, or synchronize data with a cloud storage provider. +Cloud sync and TrueCloud backup tasks can be configured to send, receive, or synchronize data with a cloud storage provider. + The simplest way to set up a TrueCloud backup task is using an Storj iX account. See [Managing TrueCloud Backup Tasks]({{< relref "TrueCloudTasks.md" >}}) for a full tutorial. {{< expand "TrueCloud Backup Quickstart with a Storj Account" "v" >}} -You can create a Storj cloud credential and set up your Storj account from the **Add TrueCloud Backup Task** screen or from the **Credentials > Backup Credentials** screen. -1. Create a Storj iX account and link to TrueNAS. +TrueNAS allows you to create a Storj cloud credential in TrueNAS, and set up a Storj account, from **Backup Task** widget on the main **Dashboard**, the **Add TrueCloud Backup Task** screen, or from the **Add Cloud Credentials** screen accessed from on the **Credentials > Backup Credentials** screens. + +To create the TrueCloud backup task using Storj: + +1. Create the TrueCloud backup task and set up the Storj iX account. - From the TrueNAS **Dashboard**, find the **Backup Tasks** widget and click **Cloud Sync to Storj or similar provider**. + From the TrueNAS **Dashboard**, find the **Backup Tasks** widget and click **Cloud Sync to Storj or similar provider** to open the **Cloud Sync Task Wizard**. - Open the **Credentials** dropdown and select **Add New**. + Select **Add New** on the **Credentials** dropdown list. The **Cloud Credentials** screen opens with **Storj iX** prepopulated in the **Provider** field. - The **Storj iX** provider is preselected. - Click **Signup for account** to open a browser tab, then register, select a plan, and activate an Storj iX Account. + Click **Signup for account** to open the **Storj + iX** browser tab. Register an account, select a plan, and activate the Storj iX account. + + After creating the Storj iX account, log into the Storj portal to create a new bucket and new S3 access credentials ([details]({{< relref "TrueCloudTasks.md#adding-storj-cloud-credentials" >}})). + Download the **Access Key** and **Secret Key** provided while creating the new S3 credentials, copy and paste each string into the TrueNAS **Access Key ID** and **Secret Access Key** fields, respectively. - After creating the Storj iX account, log in to the Storj portal to create a new bucket and new S3 access credentials ([details]({{< relref "TrueCloudTasks.md#adding-storj-cloud-credentials" >}})). - After the new S3 credentials are created, download the **Access Key** and **Secret Key** and paste each string into the TrueNAS **Access Key ID** and **Secret Access Key** fields, respectively. Click **Save**. 2. Define the backup targets and schedule. @@ -59,9 +89,10 @@ You can create a Storj cloud credential and set up your Storj account from the * To add the TrueCloud backup task, go to **Data Protection > TrueCloud Backup Tasks** and click **Add** to open the **Add TrueCloud Backup Task** screen. Review the fields in the **Local**, **Remote**, **Task Settings**, and **Control** sections. + Select the created Storj **Credentials** and **Bucket** before choosing a **Folder**. - There are several predefined **Schedules** to choose from, or you can select **Custom** to define your own. + Set the desired schedule using any of the predefined schedules, or select **Custom** to define your own. Click **Save**. {{< /expand >}} @@ -69,30 +100,37 @@ You can create a Storj cloud credential and set up your Storj account from the * See [Adding Cloud Credentials]({{< relref "/scale/scaletutorials/credentials/backupcredentials/addcloudcredentials.md" >}}) for information on connecting TrueNAS SCALE to other cloud storage providers. ### Using Replication - Replication is the process of taking a moment-in-time snapshot of data and then copying that snapshot to another location. Snapshot technology typically uses less storage than full file backups and has more management and snapshot storage options. -{{< expand "Click here for basic instructions" "v" >}} +{{< expand "Setting Up a Simple Replication Task" "v" >}} To create a simple replication task with the TrueNAS replication wizard: -1. Create a periodic snapshot task using the **[Periodic Snapshot Task]({{< relref "PeriodicSnapshotTasksSCALE.md" >}})** or use the **Run Once** replication schedule option. +Replication needs an existing [periodic snapshot task]({{< relref "PeriodicSnapshotTasksSCALE.md" >}})** to run before the replication task runs or the replication task fails. +You can define this before configuring the replication task or select the replication wizard **Replicate Custom Snapshots** option have TrueNAS automatically to create the task before running the replication task. + +1. Create a periodic snapshot task using the or use the replication wizard **Replicate Custom Snapshots** replication option. If scheduling a task, SCALE creates the periodic snapshot task when it runs the replication task according to the scheduled time. 2. Create the replication task. - Go to **Data Protection** and click **Add** on the **Replication Tasks** widget. The **Replication Task Wizard** opens on the **What and Where** configuration screen. + Go to **Data Protection**, click **Add** on the **Replication Tasks** widget to open the **Replication Task Wizard** configuration screen. + Select both the **Source Location** and **Destination Location** using the dropdown list options. You can back up your data on the same system or a different system. If you select **A different system** you must have an SSH connection. Have your destination and source information ready. - Next, enter the **Source** and **Destination** paths. To populate the field with the full path, you can either type the full path to the data you want to back up or click on the caret to the left of **mnt** and at the pool and dataset levels to expand the options. Click on the dataset and/or the file if you want to narrow backup down to that level. + Set the **Source** and **Destination** paths, either enter the full path to the data you want to back up or click on the caret to the left of **mnt** and at the pool and dataset levels to expand the options. Click on the dataset or directory to narrow backup down to that level. - The task name populates from the values in **Source** and **Destination**. Click **Next**. + The task name populates from the values in **Source** and **Destination**. + + Select **Replicate Custom Snapshots**. + + Click **Next**. -3. Define when you want this task to occur. +3. Define when to run this task. - Select the radio button for **Run On a Schedule** and select the schedule you want to use. Or select **Run Once** to run the task manually. - If using this option you must have a periodic snapshot task already defined. If running on a schedule, you don't have to have a pre-defined snapshot task. + Select the radio button for **Run On a Schedule** and select the schedule to use. Select **Run Once** to run the task manually. + If using this option you must have a periodic snapshot task already defined. If running on a schedule, you do not need to pre-defined a snapshot task. Select the radio button to specify the destination snapshot lifetime. @@ -100,21 +138,3 @@ To create a simple replication task with the TrueNAS replication wizard: {{< /expand >}} You can monitor created backup tasks from the **Dashboard** widget. - -## Backing Up the System Configuration - -Now that you configured your system network, storage, and the data shares you want, and you have set up your data backup solution, it is time to back up your system configuration. - -{{< expand "Click here for instructions" "v" >}} -{{< include file="/static/includes/DownloadSystemConfigFileSCALE.md" >}} -{{< /expand >}} - -### Downloading the Initial System Debug File - -After saving the system configuration, go to **System > Advanced** and click **Save Debug**. After the download completes, save this initial debug file with your system configuration file. - -## Create a Boot Environment - -After installing and completing your SCALE system configuration, [create a boot environment]({{< relref "ManageBootEnvironSCALE.md" >}}) to use as a restore point. -If an issue occurs where you lose access to the SCALE UI, you can establish an SSH session and restore it from the boot environment. -You can clone the boot environment listed after the **initial-install** environment and rename the clone to something you recognize, such as the release number with date and time. diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md index a30a9141ab..05ae958f64 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md @@ -22,7 +22,7 @@ You must also configure and activate the [SSH Service]({{< relref "sshservicesca To begin setting up an SSH connection, go to **Credentials > Backup Credentials**. -{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsAllCloudSSH.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} +{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} Click **Add** on the **SSH Connections** widget. diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md index 2914547c50..f8e1c778cf 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md @@ -1,4 +1,4 @@ ---- +BackupCredentialsAllCloudSSH--- title: "SSH Screens" description: "Provides information on the SSH Connections and SSH Keypairs screens, widgets, and settings." weight: 20 @@ -18,7 +18,7 @@ You must also configure and activate the [SSH Service]({{< relref "sshservicescr The **SSH Connections** and **SSH Keypairs** widgets display a list of SSH connections and keypairs configured on the system. -{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsAllCloudSSH.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} +{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} The **SSH Connections** widget allows users to establish Secure Socket Shell (SSH) connections. The **SSH Keypairs** widget allows users to generate SSH keypairs required to authenticate the identity of a user or process that wants to access the system using SSH protocol. diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md index b56fce66cf..a3b68bf88a 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md @@ -13,8 +13,9 @@ related: false TrueNAS stores cloud backup services credentials, SSH connections, and SSH keypairs configured using the widgets on the **Backup Credentials** screen. Users can set up backup credentials with cloud and SSH clients to back up data in case of drive failure. -![BackupCredentialsAllCloudSSH](/images/SCALE/Credentials/BackupCredentialsAllCloudSSH.png "Backup Credentials Screen") +{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} +Click **Add** on the widget for the type of credential to add and open that configuration screen.
## Contents diff --git a/static/images/SCALE/Credentials/BackupCredentialsAllCloudSSH.png b/static/images/SCALE/Credentials/BackupCredentialsAllCloudSSH.png deleted file mode 100644 index 444d8d9214695a79dd0c647688d10a5f7a6483a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24622 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 +Physically secure the config file, any encryption key files, and the secret seed file as it contains the seed to prevent unauthorized access or password decryption. +{{< /hint >}} We recommend backing up the system configuration regularly. Doing so preserves settings when migrating, restoring, or fixing the system if it runs into any issues. Save the configuration file each time the system configuration changes. -Go to System **Settings > General** and click on **Manage Configuration**. +Go to System **Settings > General Settings** and click on **Manage Configuration**. Select **Download File**. ![GeneralManageConfigurationOptions](/images/SCALE/SystemSettings/GeneralManageConfigurationOptions.png "Download Configuration File") -The **Save Configuration** dialog displays. +The **Save Configuration** dialog opens. ![SaveConfigurationWindow](/images/SCALE/SystemSettings/SaveConfigurationWindow.png "Save Configuration") -Click **Export Password Secret Seed** and then click **Save**. The system downloads the system configuration. Save this file in a safe location on your network where files are regularly backed up. +Select **Export Password Secret Seed** and then click **Save**. The system downloads the system configuration. +Save this file in a safe location on your network where files are regularly backed up. -Anytime you change your system configuration, download the system configuration file again and keep it safe. +To maintain a current file, download the config file anytime you change your system configuration. Keep the config file safe. \ No newline at end of file From dc81d44a21f7d83de7831b9273933dd55cc0e7fd Mon Sep 17 00:00:00 2001 From: MicJ Date: Thu, 22 Aug 2024 12:16:18 -0400 Subject: [PATCH 02/18] PD-1381 Update Cloud Credential Screen Article This commit updates the content in the UI ref article for the CloudCredentialScreen.md article. It adds a few new screenshots and content for some of the cloud provider credentials. --- .../CloudCredentialScreens.md | 198 +++++++++--------- .../CloudCredentialsGoogleCloudAuth.png | Bin 0 -> 26882 bytes ...entialsOAuthAccessTokenAuthentication.png} | Bin 3 files changed, 100 insertions(+), 98 deletions(-) create mode 100644 static/images/SCALE/Credentials/CloudCredentialsGoogleCloudAuth.png rename static/images/SCALE/Credentials/{CloudCredentialsOAuthAccessTokeAuthentication.png => CloudCredentialsOAuthAccessTokenAuthentication.png} (100%) diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md index 8298cc9d11..8cdd7b5c09 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md @@ -1,6 +1,6 @@ --- title: "Cloud Credentials Screens" -description: "Provides information on the Cloud Credentials widget, screens, and settings." +description: "Provides information on the Cloud Credentials screens and settings." weight: 10 alias: - /scale/scaleclireference/task/cloudsync/clicredential/ @@ -12,50 +12,49 @@ tags: - backup --- -The **Backup Credentials** screen displays the **Cloud Credentials**, **SSH Connections** and **SSH Keypairs** widgets. ## Cloud Credentials Widget The **Cloud Credentials** widget displays a list of cloud storage credentials configured on the system. -![BackupCredentialsCloudCredentialsWidget](/images/SCALE/Credentials/BackupCredentialsCloudCredentialsWidget.png "Cloud Credentials Widget") +{{< trueimage src="/images/SCALE/Credentials/BackupCredentialsCloudCredentialsWidget.png" alt="Cloud Credentials Widget" id="Cloud Credentials Widget" >}} Before adding cloud credentials for a cloud storage provider, the **Cloud Credentials** widget displays **No Cloud Credentials configured**. -![CloudCredentialsNoCredentials](/images/SCALE/Credentials/CloudCredentialsNoCredentials.png "Cloud Credentials No Cloud Credentials") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsNoCredentials.png" alt="Cloud Credentials Widget No Credentials" id="Cloud Credentials Widget No Credentials" >}} -**Add** opens the **[Cloud Credentials](#cloud-credentials-screen)** configuration screen. - -Click the name of a cloud credential to open the **Cloud Credentials** configuration screen populated with the settings for that credential. +**Add** opens the **[Cloud Credentials](#cloud-credentials-screen)** configuration screen. ## Cloud Credentials Screen +The **Cloud Credentials** configuration screen opens prepopulated with Storj-iX as the provider. +It shows settings to add or edit cloud credentials TrueNAS uses to integrate with cloud storage providers. -The **Cloud Credentials** configuration screen displays settings to add or edit cloud credentials TrueNAS uses to integrate with cloud storage providers. +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsAdd.png" alt="Cloud Credentials Configuration Screen" id="Cloud Credentials Configuration Screen" >}} -![CloudCredentialsAdd](/images/SCALE/Credentials/CloudCredentialsAdd.png "Cloud Credentials Add") +**Provider** shows a list of available providers. +Select the name of a cloud provider to populate the configuration screen with credential settings for that provider. {{< include file="/static/includes/CloudServiceProvidersSCALE.md" >}} -Use **Verify Credentials** after entering the authentication settings to verify you can access the cloud storage provider account with the credentials you entered. +**Verify Credentials** uses the credentials entered to verify access the cloud storage provider account. ### Name and Provider Settings - The selection in **Provider** changes the **Authentication** settings. {{< truetable >}} | Setting | Description | |---------|-------------| -| **Provider** | Required. Default is set to **Storj**. Select the cloud storage provider from the options on the dropdown list. | +| **Provider** | (Required) Default is set to **Storj**. Select the cloud storage provider from the options on the dropdown list. | | **Name** | Enter a name for this cloud credential. For example, *cloud1* or *amazon1*. | {{< /truetable >}} -### Storj Authentication Settings +### Storj iX Credential +Storj authentication includes going to the Storj iX sign-in screen to either create a new Storj iX account or log into an existing Storj iX account. +After configuring the Storj account in the Storj-iX portal return to SCALE to enter the S3 credentials provided by Storj. -Storj authentication includes going to the Storj iX sign-in screen to either create a new Storj iX account or log into an existing Storj iX account, and then returning to SCALE to enter the S3 credentials provided by Storj for this credential. -{{< expand "Click Here for Settings" "v" >}} - -![CloudCredentialsAdd](/images/SCALE/Credentials/CloudCredentialsAdd.png "Cloud Credentials Add for Storj") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsAdd.png" alt="Cloud Credentials Storj iX" id="Cloud Credentials Storj iX" >}} +{{< expand "Storj iX Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| @@ -63,16 +62,14 @@ Storj authentication includes going to the Storj iX sign-in screen to either cre | **Access Key ID** | Enter the alphanumeric key provided by Storj when you [create the S3 account access]({{< relref "TrueCloudTasks.md" >}}) associated with the storage buckets added in Storj. | | **Secret Access Key** | Enter the alphanumeric key provided by Storj when you [create the S3 account access]({{< relref "TrueCloudTasks.md" >}}) associated with the storage buckets added in Storj. | {{< /truetable >}} - {{< /expand >}} -### Amazon S3 Authentication Settings - +### Amazon S3 Credential Amazon S3 has basic authentication and advanced authentication settings. This section provides information on the basic authentication settings. -{{< expand "Click Here for Settings" "v" >}} -![CloudCredentialsAmzon3AuthenticationSetting](/images/SCALE/Credentials/CloudCredentialsAmzon3AuthenticationSetting.png "Amazon S3 Authentication Settings") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsAmzon3AuthenticationSetting.png" alt="Amazon S3 Authentication Settings" id="Amazon S3 Authentication Settings" >}} +{{< expand "Amazon S3 Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| @@ -82,30 +79,28 @@ Amazon S3 has basic authentication and advanced authentication settings. This se {{< /expand >}} ### Amazon S3 Advanced Authentication Options - This section provides information on Amazon S3 advanced authentication settings for endpoints. The basic authentication settings are required when using the advanced settings. -{{< expand "Click Here for Settings" "v" >}} -![CloudCredentialsAmzon3AdvancedAuthSettings](/images/SCALE/Credentials/CloudCredentialsAmzon3AdvancedAuthSettings.png "Amazon S3 Advanced Authentication Settings") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsAmzon3AdvancedAuthSettings.png" alt="Amazon S3 Advanced Authentication Settings" id="Amazon S3 Advanced Authentication Settings" >}} +{{< expand "Amazon S3 Advanced Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| | **Maximum Upload Ports** | Enter a value to define the maximum number of chunks for a multipart upload. Setting a maximum is necessary if a service does not support the 10,000 chunk AWS S3 specification. | -| **Endpoint URL** | Optional. When using AWS, you can leave the endpoint field empty to use the default endpoint for the region and automatically fetch available buckets, or enter an [S3 API endpoint URL](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html). Refer to the AWS Documentation for a list of [Simple Storage Service Website Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_website_region_endpoints%20%20target=). | -| **Region** | Optional. Enter an [AWS resources in a geographic area](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html). Leave empty to detect the correct public region for the bucket. Entering a private region name allows interacting with Amazon buckets created in that region. For example, enter *us-gov-east-1* to discover buckets created in the eastern [AWS GovCloud](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/whatis.html) region. | +| **Endpoint URL** | (Optional) When using AWS, you can leave the endpoint field empty to use the default endpoint for the region and automatically fetch available buckets, or enter an [S3 API endpoint URL](https://docs.aws.amazon.com/AmazonS3/latest/dev/WebsiteEndpoints.html). Refer to the AWS Documentation for a list of [Simple Storage Service Website Endpoints](https://docs.aws.amazon.com/general/latest/gr/rande.html#s3_website_region_endpoints%20%20target=). | +| **Region** | (Optional) Enter an [AWS resources in a geographic area](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html). Leave empty to detect the correct public region for the bucket. Entering a private region name allows interacting with Amazon buckets created in that region. For example, enter *us-gov-east-1* to discover buckets created in the eastern [AWS GovCloud](https://docs.aws.amazon.com/govcloud-us/latest/UserGuide/whatis.html) region. | | **Disable Endpoint Region** | Select to prevent automatic detection of the bucket region. Select only if your AWS provider does not support regions. | | **Use Signature Version 2** | Select to force using [Signature Version 2](https://docs.aws.amazon.com/general/latest/gr/signature-version-2.html) to sign API requests. Select only if your AWS provider does not support default version 4 signatures. | {{< /truetable >}} {{< /expand >}} -### BackBlaze B2 Authentication Settings - +### BackBlaze B2 Credential This section provides information on the BackBlaze B2 authentication settings. -{{< expand "Click Here for Settings" "v" >}} -![CloudCredentialsBackBlazeB2Authentication](/images/SCALE/Credentials/CloudCredentialsBackBlazeB2Authentication.png "BackBlaze B2 Authentication Settings") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsBackBlazeB2Authentication.png" alt="BackBlaze B2 Authentication Settings" id="BackBlaze B2 Authentication Settings" >}} +{{< expand "Backblaze B2 Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| @@ -114,85 +109,94 @@ This section provides information on the BackBlaze B2 authentication settings. {{< /truetable >}} {{< /expand >}} -### OAuth and Access Token Authentication Settings +### OAuth and Access Token Authentication Credentials +Several cloud storage providers use OAuth authentication and a required access token to authenticate the cloud storage account. +Providers using these methods are Box, Dropbox, Google Photo, pCloud, and Yandex. -Several cloud storage providers use OAuth authentication and a required access token to authenticate the cloud storage account. Providers that use these methods are Box, Dropbox, Google Photo, pCloud, and Yandex. -{{< expand "Click here for Settings" "v" >}} +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokenAuthentications.png" alt="OAuth and Access Token Authentications" id="OAuth and Access Token Authentication" >}} -![CloudCredentialsOAuthAccessTokeAuthentication](/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokeAuthentication.png "OAuth and Access Token Authentication") +{{< expand "OAuth and Access Token Authentication Settings" "v" >}} +Use **Login to Provider** to enter the account username and password. {{< truetable >}} | Setting | Description | |---------|-------------| | **OAuth Client ID** | Enter the public identifier for the cloud application. | | **OAuth Client Secret** | Enter the secret phrase known only to the cloud application and the authorization server. | -| **Token** | Enter a User Access Token for [Box](https://developer.box.com/). An [access token](https://developer.box.com/reference/) enables Box to verify a request belongs to an authorized session. Example token: T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl. | -| **Hostname** | pCloud only. Optional. Enter the host name to connect to. | +| **Token** | Enter a User Access Token for [Box](https://developer.box.com/). An [access token](https://developer.box.com/reference/) enables Box to verify a request belongs to an authorized session. Example token: *T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl*. | +| **Hostname** | (Optional) pCloud only. Enter the host name to connect to. | {{< /truetable >}} - -Use **Login to Provider** to enter the account username and password. {{< /expand >}} -### FTP and SMTP Authentication Settings - -FTP and SMTP cloud storage providers use host name, port, and user credentials to authenticate accounts. SMTP uses SSH hosts, port, and user credentials and also uses a private key. -{{< expand "Click Here for Settings" "v" >}} +### FTP and SFTP Credentials +FTP and SFTP cloud storage providers use host name, port, and user credentials to authenticate accounts. SMTP uses SSH hosts, port, and user credentials and also uses a private key. -![CloudCredentialsHostPortUserCredPrivateKeyAuth](/images/SCALE/Credentials/CloudCredentialsHostPortUserCredPrivateKeyAuth.png "Host, Port User Credentials Authentication") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsHostPortUserCredPrivateKeyAuth.png" alt="Host, Port User Credentials Authentication" id="Host, Port User Credentials Authentication" >}} +{{< expand "FTP and SFTP Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| -| **Host** | Enter the FTP host name or for SMTP the SSH host name to connect. For example, *ftp.example.com*. | -| **Port** | Enter the FTP or for SMTP, the SSH port number. Leave blank to use the default port **21** for FTP or **22** for SMTP. | -| **Username** | Enter a username on the FTP or for the SMTP host system the SSJ user name. This user must already exist on the host. | +| **Host** | Enter the FTP host name or for SFTP the SSH host name to connect. For example, *ftp.example.com*. | +| **Port** | Enter the FTP or for SFTPP, the SSH port number. Leave blank to use the default port **21** for FTP or **22** for SFTP. | +| **Username** | Enter a username on the FTP or for the SFTP host system the SSJ user name. This user must already exist on the host. | | **Password** | Enter the password for the user account. | -| **Private Key ID** | SNMP only. Import the private key from an existing SSH keypair or, if no keypairs exist on the system, select **Add** on the **SSH Keypairs** widget to open the **SSH Keypairs** screen. Enter a name, and then click **Generate New** to create a new SSH key for this credential. | +| **Private Key ID** | (SFTP only) Import the private key from an existing SSH keypair or, if no keypairs exist on the system, select **Add** on the **SSH Keypairs** widget to open the **SSH Keypairs** screen. Enter a name, and then click **Generate New** to create a new SSH key for this credential. | {{< /truetable >}} {{< /expand >}} -### Google Cloud Storage Authentication Settings +### Google Cloud Storage Credential +Google Cloud Storage authentication uses a Google [service account json key credential file](https://rclone.org/googlecloudstorage/#service-account-support) to authenticate the account. -Google Cloud Storage authentication uses a Google [service account json key credential file](https://rclone.org/googlecloudstorage/#service-account-support) generated by the [Google Cloud Platform Console](https://console.cloud.google.com/apis/credentials) to authenticate the account. Obtain the json file, download it to the system server and then upload it to the **Preview JSON Service Account Key** field. Use **Choose File** to browse to the file location on the server. +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsGoogleCloudAuth.png" alt="Google Cloud Storage Authentication" id="Google Cloud Storage Authentication" >}} -### Google Drive Authentication Settings +{{< expand "Google Cloud Storage Authentication Settings" "v" >}} +{{< truetable >}} +| Setting | Description | +|---------|-------------| +| **Service Account Key** | Use **Choose File** to browse to the file location on the server. Opens a file browser to select the Google service account key credential file generated by by the [Google Cloud Platform Console](https://console.cloud.google.com/apis/credentials) to authenticate the account. | +| **Preview JSON Service Account Key** | Shows the json file downloaded to the system server from Google Cloud Storage and uploaded with **Choose File**. | +{{< /truetable >}} +{{< /expand >}} -Google Drive uses OAuth authentication, a required access token, and a team drive ID to authenticate accounts. -{{< expand "Click Here for Settings" "v" >}} +### Google Drive Credential +Google Drive also uses OAuth authentication, a required access token, and a team drive ID to authenticate accounts. +Google Drive adds one additional authentication setting to the general OAuth settings. -![CloudCredentialsGoogleDriveAuthentication](/images/SCALE/DataProtection/CloudCredentialsGoogleDriveAuthentication.png "Google Drive Authentication") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsGoogleDriveAuthentication.png" alt="Google Drive Authentication" id="Google Drive Authentication" >}} +{{< expand "Google Drive Authentication Settings" "v" >}} +Use **Login to Provider** to enter the account username and password. {{< truetable >}} | Setting | Description | |---------|-------------| | **OAuth Client ID** | Enter the public identifier for the cloud application. | | **OAuth Client Secret** | Enter the secret phrase known only to the cloud application and the authorization server. | -| **Access Token** | Required. Token created with [Google Drive](https://developers.google.com/drive/api/v3/about-auth). Access Tokens expire periodically, so you must refresh them. | -| **Team Drive ID** | Optional. Only needed when connecting to a Team Drive, and is the top-level folder ID for the Team Drive. | +| **Access Token** | (Required) Token created with [Google Drive](https://developers.google.com/drive/api/v3/about-auth). Access Tokens expire periodically, so you must refresh them. | +| **Team Drive ID** | (Optional) Google Drive only when connecting to a team drive, and is the top-level folder ID for the team drive. | {{< /truetable >}} - -Use **Login to Provider** to enter the account username and password. {{< /expand >}} -### HTTP Authentication Settings +### HTTP Credential HTTP uses an HTTP host URL to authenticate account credentials. -### Hubic Authentication Settings +### Hubic Credential -Hubic uses an access token to authenticate the account. Enter the token generated by a [Hubic account](https://api.hubic.com/sandbox/) into the **Access Token** field. +Hubic uses an access token to authenticate the account. +Enter the token generated by a [Hubic account](https://api.hubic.com/sandbox/) into the **Access Token** field. -### Mega Authentication Settings +### Mega Credential Mega uses the username and password for the [MEGA user account](https://mega.nz/) to authenticate the account credentials. -### Microsoft Azure Blob Storage Authentication Settings - +### Microsoft Azure Blob Storage Credential Microsoft Azure Blob Storage uses the Microsoft Azure account name and account key to authenticate the account credentials. -{{< expand "Click Here for Settings" "v" >}} ![CloudCredentialsMSAzureBlogStorageAuth](/images/SCALE/Credentials/CloudCredentialsMSAzureBlogStorageAuth.png "Microsoft Azure Blob Storage Authentication") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsNoCredentials.png" alt="Cloud Credentials Widget No Credentials" id="Cloud Credentials Widget No Credentials" >}} +{{< expand "Microsoft Azure Blob Storage Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| @@ -202,31 +206,30 @@ Microsoft Azure Blob Storage uses the Microsoft Azure account name and account k {{< /truetable >}} {{< /expand >}} -### OpenStack Swift Authentication Settings - -OpenStack Swift uses several required settings to authenticate credential accounts. The **AuthVersion** setting selection changes setting options displayed in **[Advanced Options](#openstack-authentication-advanced-options)**. -{{< expand "Click Here for Settings" "v" >}} +### OpenStack Swift Credential +OpenStack Swift uses several required settings to authenticate credential accounts. +The **AuthVersion** setting selection changes setting options displayed in **[Advanced Options](#openstack-authentication-advanced-options)**. -![CloudCredentialsOpenStackAuthentication](/images/SCALE/Credentials/CloudCredentialsOpenStackAuthentication.png "OpenStack Swift Authentication") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsOpenStackAuthentication.png" alt="OpenStack Swift Authentication" id="OpenStack Swift Authentications" >}} +{{< expand "OpenStack Swift Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| -| **User Name** | Required. Enter the OpenStack user name (OS_USERNAME) from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | -| **API Key or Password** | Required. Enter the Openstack API key or password. This is the OS_PASSWORD from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | -| **Authentication URL** | Required. Enter the authentication URL for the server. This is the OS_AUTH_URL from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | +| **User Name** | (Required) Enter the OpenStack user name (OS_USERNAME) from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | +| **API Key or Password** | (Required) Enter the Openstack API key or password. This is the OS_PASSWORD from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | +| **Authentication URL** | (Required) Enter the authentication URL for the server. This is the OS_AUTH_URL from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | | **AuthVersion**| Select the authentication version from the dropdown list if your auth URL has no version ([rclone documentation](https://rclone.org/swift/#standard-options)). | {{< /truetable >}} {{< /expand >}} #### OpenStack Authentication Advanced Options +The **Authentication Advanced Options** screen shows different options based on the **AuthVersion** setting. +**Auto(vX)**, **v1**, and **v2** use the same advanced authentication settings. -The **AuthVersion** option selected changes the settings displayed in **Authentication Advanced Options**. **Auto(vX)**, **v1**, and **v2** use the same advanced authentication settings but **V3** displays additional settings. - -{{< expand "Auto(vx), V1 and V2" "v" >}} - -![CloudCredentialsOpenStackAuthAdvanced](/images/SCALE/Credentials/CloudCredentialsOpenStackAuthAdvanced.png "OpenStack Swift Authentication Advanced") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsOpenStackAuthAdvanced.png" alt="OpenStack Swift Authentication Advanced" id="OpenStack Swift Authentication Advanced" >}} +{{< expand "Auto(vx), V1 and V2 Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| @@ -239,39 +242,38 @@ The **AuthVersion** option selected changes the settings displayed in **Authenti {{< /truetable >}} {{< /expand >}} -{{< expand "V3" "v" >}} -When **v3** is the **AuthVersion** option settings **Authentication Advanced Options** displays additional settings. +{{< expand "V3 Authentication Settings" "v" >}} +Setting **AuthVersion** to **v3** shows additional authentication settings. -![CloudCredentialsOpenStackAuthAdvancedV3](/images/SCALE/Credentials/CloudCredentialsOpenStackAuthAdvancedV3.png "OpenStack Swift Authentication Advanced V3") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsOpenStackAuthAdvancedV3.png" alt="OpenStack Swift Authentication Advanced V3" id="OpenStack Swift Authentication Advanced V3" >}} {{< truetable >}} | Setting | Description | |---------|-------------| -| **User ID** | Optional. Enter the user ID to log in. To log into most swift systems leave this blank. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | -| **User Domain** | Optional. Enter the user domain. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | -| **Tenant Name** | Required. Enter the OS_TENANT_NAME from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | +| **User ID** | (Optional) Enter the user ID to log in. To log into most swift systems leave this blank. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | +| **User Domain** | (Optional) Enter the user domain. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | +| **Tenant Name** | (Required) Enter the OS_TENANT_NAME from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file). | | **Tenant ID** | Required for **v2** and **v3**. Enter the tenant ID. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | -| **Tenant Domain** | Optional. Enter the tenant domain. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | -| **Auth Token** | Optional. Enter the auth token from alternate authentication. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | -| **Region Name** | Optional. Enter the region name. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | -| **Storage URL** | Optional. Enter the storage URL. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | +| **Tenant Domain** | (Optional) Enter the tenant domain. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | +| **Auth Token** | (Optional) Enter the auth token from alternate authentication. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | +| **Region Name** | (Optional) Enter the region name. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | +| **Storage URL** | (Optional) Enter the storage URL. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | | **Endpoint Type** | Select service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). | {{< /truetable >}} {{< /expand >}} -### WebDAV Authentication Settings - -WebDAV uses the URL, service type and user credentials to authenticate the account credentials. -{{< expand "Chick Here for Settings" "v" >}} +### WebDAV Credential +WebDAV uses a URL, service type and user credentials to authenticate account cloud account credentials. -![CloudCredentialWebDAVAuthentication](/images/SCALE/Credentials/CloudCredentialWebDAVAuthentication.png "WebDAV Authentication Settings") +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialWebDAVAuthentication.png" alt="WebDAV Authentication Settings" id="WebDAV Authentication Settings" >}} +{{< expand "WebDAV Authentication Settings" "v" >}} {{< truetable >}} | Setting | Description | |---------|-------------| -| **URL** | Required. Enter the URL of the HTTP host to connect to. | -| **WebDAV Service** | Required. Select the name of the WebDAV site, service, or software used from the dropdown list. Options are **NEXTCLOUD**, **OWNCLOUD**, **SHAREPOINT**, or **OTHER**. | -| **Username** | Required. Enter the WebDAV account user name. | -| **Password** | Required. Enter the WebDAV account password. | +| **URL** | (Required) Enter the URL of the HTTP host to connect to. | +| **WebDAV Service** | (Required) Select the name of the WebDAV site, service, or software used from the dropdown list. Options are **NEXTCLOUD**, **OWNCLOUD**, **SHAREPOINT**, or **OTHER**. | +| **Username** | (Required) Enter the WebDAV account user name. | +| **Password** | (Required) Enter the WebDAV account password. | {{< /truetable >}} -{{< /expand >}} +{{< /expand >}} \ No newline at end of file diff --git a/static/images/SCALE/Credentials/CloudCredentialsGoogleCloudAuth.png b/static/images/SCALE/Credentials/CloudCredentialsGoogleCloudAuth.png new file mode 100644 index 0000000000000000000000000000000000000000..7747a018f62d12ebd1ed67726d626853fdb0c9c0 GIT binary patch literal 26882 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 literal 0 HcmV?d00001 diff --git a/static/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokeAuthentication.png b/static/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokenAuthentication.png similarity index 100% rename from static/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokeAuthentication.png rename to static/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokenAuthentication.png From 2848bc5e434e7dc5565eba1c6a39a3c10b270db6 Mon Sep 17 00:00:00 2001 From: MicJ Date: Thu, 22 Aug 2024 12:18:12 -0400 Subject: [PATCH 03/18] PD-1381 Optimize New Images --- .../Credentials/BackupCredentialsScreen.png | Bin 24268 -> 10391 bytes .../CloudCredentialsGoogleCloudAuth.png | Bin 26882 -> 17411 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/static/images/SCALE/Credentials/BackupCredentialsScreen.png b/static/images/SCALE/Credentials/BackupCredentialsScreen.png index d60fd6db35f73a22c1d9f8f62e96cedd630918ea..0e54b3339e249b4a5e79ffc98236af38c9ea957b 100644 GIT binary patch literal 10391 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 literal 24268 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

NeejFlnb5O&4fPeYw@0$YFkuX26m%}EQ zsk4U@nZeKG{7Os%mmSahwS<@DNn=VGRH%vq^{r=CX)l(APHvYW-l@1<1-0Fo9^u%8 zRmY+aV}t|4j;C`&MV$7jn8*M}H1EINL%xdd-FSQQ&SYtV>IW3m2z`7vS0z;T?q1Jp z(r5rzZLikD6p*S=V*e(ac3uzSx73z*Od-It!L`FX>BJAS4#FzREEh-VDR`k`4loPN zg1sp@p0sabr%!>55pgmLlq;FRH)OqCa1IS4mJb&A5QeB(b5k3sV&>TZY|Ehk_2V>z z{Kd*(O{^-zS%r#H(z8_@)A4%FVa5K5)q>&aLbmeAp>-E7FkcNVAf2L!c`e3rt8Qc~ zKA!UH$5%pWUJy&A??rPfP5s&Yveas82gzh{45CjcL@pE5BU$h|4Nga+$B*y ZzvRuF71Ah8{^uSPnrgbLWe;p${y(KB(k}o2 literal 26882 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 From b312e5f6c7bb4d3097e4ff182fbc66a0999ecc54 Mon Sep 17 00:00:00 2001 From: MicJ Date: Thu, 22 Aug 2024 16:06:06 -0400 Subject: [PATCH 04/18] PD-1381 Update TrueCloud Backup Task Content and Snippets This commit updates content in the UI ref and tutorial TrueCloudBackupTask.md and TrueCloudBackupTaskScreens.md articles. It updates current and creates new snippets to use in cloud sync task and TrueCloud backup task articles. --- .../BackupCredentials/AddCloudCredentials.md | 117 ++++++------- .../DataProtection/TrueCloudTasks.md | 164 +++--------------- .../CloudCredentialScreens.md | 7 +- .../BackupCredentials/SSHCredentialScreens.md | 38 ++-- .../Credentials/BackupCredentials/_index.md | 5 +- .../TrueCloudBackupTasksScreen.md | 45 +++-- static/includes/AddStorjCloudCredential.md | 27 +++ static/includes/CloudServiceProvidersSCALE.md | 2 - static/includes/CreateStorjiXAccount.md | 36 ++++ .../OAuthCloudCredentialSetupSCALE.md | 17 +- .../includes/SetUpStorjiXAccountS3Access.md | 57 ++++++ 11 files changed, 258 insertions(+), 257 deletions(-) create mode 100644 static/includes/AddStorjCloudCredential.md create mode 100644 static/includes/CreateStorjiXAccount.md create mode 100644 static/includes/SetUpStorjiXAccountS3Access.md diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md index e67259dcf0..5fded3cd51 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md @@ -15,7 +15,7 @@ keywords: - cloud backup and recovery --- -The **Cloud Credentials** widget on the **Backup Credentials** screen allows users to integrate TrueNAS with cloud storage providers. +The **Cloud Credentials** screen, accessed from the **Backup Credentials** screen allows users to integrate TrueNAS with cloud storage providers. {{< include file="/static/includes/CloudServiceProvidersSCALE.md" >}} @@ -27,36 +27,46 @@ Authentication methods for each provider could differ based on the provider secu You can add credentials for many of the supported cloud storage providers from the information on the [Cloud Credentials Screens]({{< relref "/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md" >}}). This article provides instructions for the more involved providers. -## Before You Begin - +## Adding a Cloud Credential We recommend users open another browser tab to open and log into the cloud storage provider account you intend to link with TrueNAS. -Some providers require additional information that they generate on the storage provider account page. -For example, saving an Amazon S3 credential on TrueNAS could require logging in to the S3 account and generating an access key pair found on the **Security Credentials > Access Keys** page. - -Have any authentication information your cloud storage provider requires on-hand to make the process easier. Authentication information could include but are not limited to user credentials, access tokens, and access and security keys. +Some TrueNAS providers credentials require entering additional information generated while creating the provider account. +For example, the Storj iX account produces an access and secret key that must be entered in the **Cloud Credential** screen to create the credential. -## Adding Cloud Credentials +Have the authentication information required by your cloud storage provider on-hand to make the process easier. +Authentication information can include but is not limited to user credentials, access tokens, and access and security keys. -{{< include file="/static/includes/AddCloudCredentialStep1.md" >}} +To add a cloud credential: -2. Select the cloud service from the **Provider** dropdown list. The provider required authentication option settings display. +1. Select the cloud service from the **Provider** dropdown list. The provider required authentication option settings display. For details on each provider authentication settings see [Cloud Credentials Screens]({{< relref "/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md" >}}). +2. Enter a name for the credential. + +3. Enter the required authentication credentials, such as access token, access key and/or secret keys, user credentials for the account into the appropriate fields. + 3. Click **Verify Credentials** to test the entered credentials and verify they work. 4. Click **Save**. -### Adding Storj Cloud Credentials +## Adding Storj Cloud Credentials +Storj iX is the default cloud storage provider in TrueNAS. + +{{< include file="/static/includes/AddStorjCloudCredential.md" >}} + +### Creating the Storj iX Account + +{{< include file="/static/includes/CreateStorjiXAccount.md" >}} -The process to set up the Storj-TrueNAS account, buckets, create the S3 access and download the credentials is documented fully in [Adding a Storj Cloud Sync Task]({{< relref "TrueCloudTasks.md" >}}) in the **Adding Storj Cloud Credentials** section. +### Adding Storj Account S3 Access -### Adding Amazon S3 Cloud Credentials +{{< include file="/static/includes/SetUpStorjiXAccountS3Access.md" >}} -If adding an Amazon S3 cloud credential, you can use the default authentication settings or use advanced settings if you want to include endpoint settings. -{{< expand "Click here for more information" "v" >}} -After entering a name and leaving **Amazon S3** as the **Provider** setting: +## Adding Amazon S3 Cloud Credentials +When adding an Amazon S3 cloud credential, you can either use the default authentication settings or advanced settings if you want to include endpoint settings. + +To add a cloud credential for Amazon S3, select **Amazon S3** in **Provider**, enter a name and then: 1. Open a web browser tab to [Amazon AWS](https://aws.amazon.com/). @@ -96,68 +106,56 @@ After entering a name and leaving **Amazon S3** as the **Provider** setting: 7. Click **Verify Credentials** to check your credentials for any issues. 8. Click **Save** -{{< /expand >}} - -### Adding Cloud Credentials that Authenticate with OAuth +## Adding Cloud Credentials that Authenticate with OAuth Cloud storage providers using OAuth as an authentication method are Box, Dropbox, Google Drive, Google Photo, pCloud and Yandex. -{{< expand "Click here for more information" "v" >}} -{{< include file="/static/includes/OAuthCloudCredentialSetupSCALE.md" >}} -{{< /expand >}} +Some provider like Google Drive and pCloud use additional settings to authenticate credentials. -### Adding BackBlaze B2 Cloud Credentials +{{< include file="/static/includes/OAuthCloudCredentialSetupSCALE.md" >}} +## Adding BackBlaze B2 Cloud Credentials BackBlaze B2 uses an application key and key ID to authenticate credentials. -{{< expand "Click here for more information" "v" >}} -From the **Cloud Credentials** widget, click **Add** and then: -1. Enter the name and select **BackBlaze B2** from the **Provider** dropdown list. +Open the **Cloud Credentials** screen, select **BackBlaze B2** im **Provider**, enter a name and then: -2. Log into the BackBlaze account, go to **App Keys** page and add a new application key. Copy and paste this into **Key ID**. +1. Log into the BackBlaze account, go to **App Keys** page and add a new application key. Copy and paste this into **Key ID**. -3. Generate a new application key on the BackBlaze B2 website. +2. Generate a new application key on the BackBlaze B2 website. From the **App Keys** page, add a new application key. Copy the application Key string **Application Key**. -4. Click **Verify Credentials**. - -5. Click **Save**. -{{< /expand >}} +3. Click **Verify Credentials**. -### Adding Google Cloud Storage Credentials +4. Click **Save**. +## Adding Google Cloud Storage Credentials Google Cloud Storage uses a service account json file to authenticate credentials. -{{< expand "Click here for more information" "v" >}} -From the **Cloud Credentials** widget, click **Add** and then: -1. Enter the name and select **Google Cloud Storage** from the **Provider** dropdown list. +Open the **Cloud Credentials** screen, select **Google Cloud Storage** in **Provider**, enter a name and then: -2. Go to your Google Cloud Storage website to download this file to the TrueNAS SCALE server. +1. Go to your Google Cloud Storage website to download this file to the TrueNAS SCALE server. The [Google Cloud Platform Console](https://console.cloud.google.com/apis/credentials) creates the file. -3. Upload the json file to **Preview JSON Service Account Key** using **Choose File** to browse the server to locate the downloaded file. +2. Click **Choose File** to browse the server to locate the downloaded filejson file and upload. The file populates **Preview JSON Service Account Key** For help uploading a Google Service Account credential file [click here](https://rclone.org/googlecloudstorage/#service-account-support). -4. Click **Verify Credentials**. +3. Click **Verify Credentials**. -5. Click **Save**. -{{< /expand >}} - -### Adding OpenStack Swift Cloud Credentials +4. Click **Save**. -OpenStack Swift authentication credentials change based on selections made in **AuthVersion**. All options use the user name, API key or password and authentication URL, and can use the optional endpoint settings. -{{< expand "Click here for more information" "v" >}} +## Adding OpenStack Swift Cloud Credentials +OpenStack Swift authentication credentials change based on selections made in **AuthVersion**. +All options use the user name, API key or password and authentication URL, and can use the optional endpoint settings. For more information on OpenStack Swift settings, see [rclone documentation](https://rclone.org/swift/#standard-options). -From the **Cloud Credentials** widget, click **Add** and then: - -1. Enter the name and select **OpenStack Swift** from the **Provider** dropdown list. +Open the **Cloud Credentials** screen, select **OpenStack Swift Cloud** in **Provider**, enter a name for the credential and then: -2. Enter your OpenStack OS_USERNAME from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file) in **User Name**. +1. Enter your OpenStack OS_USERNAME from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file) in **User Name**. -3. Enter the OS_PASSWORD from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file) in **API Key or Password**. - -4. (Optional) Select the version from the **AuthVersion**. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). +2. Enter the OS_PASSWORD from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file) in **API Key or Password**. +3. (Optional) Select the version from the **AuthVersion**. For more information see [rclone documentation](https://rclone.org/swift/#standard-options). + Select the desired option based on your use case. + {{< expand "Set Auth(vx) to V1 or V2" "v" >}} If set to **Auth(vX)**, **V1** or **V2**: a. (Required) Enter the OS_TENANT_NAME from an [OpenStack credentials file](https://rclone.org/swift/#configuration-from-an-openstack-credentials-file) in **Tenant Name**. @@ -171,7 +169,8 @@ From the **Cloud Credentials** widget, click **Add** and then: e. (Optional) Enter the URL in **Storage URL**. f. (Required) Select service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. - + {{< /expand >}} + {{< expand "Set Auth(vx) to V3" "v" >}} If set to **v3** the **Advanced Options** settings displayed change. a. (Optional) Enter the user ID to log into OpenStack. Leave blank to log into most Swift systems. @@ -189,19 +188,17 @@ From the **Cloud Credentials** widget, click **Add** and then: g. (Optional) Enter the URL in **Storage URL**. h. (Required) Select service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. + {{< /expand >}} -5. Click **Verify Credentials**. +4. Click **Verify Credentials**. -6. Click **Save**. -{{< /expand >}} +5. Click **Save**. ## Using Automatic Authentication - Some providers can automatically populate the required authentication strings by logging in to the account. -{{< expand "Click here for more information" "v" >}} + To automatically configure the credential, click **Login to Provider** and entering your account user name and password. ![AutomaticAuthenticationSCALE](/images/SCALE/Credentials/AutomaticAuthenticationSCALE.png "Cloud Automatic Authentication") -We recommend verifying the credential before saving it. -{{< /expand >}} +We recommend verifying the credential before saving it. \ No newline at end of file diff --git a/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md b/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md index 54b4305df3..2d57494fdd 100644 --- a/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md +++ b/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md @@ -14,20 +14,23 @@ aliases: - cloudsynctasks/addstorjcloudsynctask --- -TrueNAS can send, receive, or synchronize data with the cloud storage provider Storj. +TrueNAS can send, receive, or synchronize data with the cloud storage providers available in TrueNAS. + TrueCloud backup tasks allow for single-time transfers or recurring transfers on a schedule. They are an effective method to back up data to a remote location. +This article provides instructions on configuring a TrueCloud backup task using Storj, and covers setting up both the Storj iX account and SCALE credential. + +*TrueCloud backup tasks streamline functionality for Storj iX cloud backups and restoration. + {{< hint type=important >}} To take advantage of the lower-cost benefits of the TrueCloud backup service, you must create your Storj iX account using the link provided on the **Add Cloud Credentials** screen. You must also create and authorize the storage buckets on Storj for use by SCALE. -iXsystems is not responsible for any charges you incur using a third-party vendor with the TrueCloud backup feature. +iXsystems is not responsible for any charges incurred using a third-party vendor with the TrueCloud backup feature. {{< /hint >}} -This procedure provides instructions to set up both Storj and SCALE. - ## TrueCloud Backup Task Requirements You must have all system storage (pool and datasets or zvols) configured and ready to receive or send data. @@ -36,140 +39,28 @@ You must have all system storage (pool and datasets or zvols) configured and rea To create a TrueCloud Backup task for a TrueCloud transfer: -1. Create the SCALE [cloud credential](#adding-storj-cloud-credentials). +1. Create the SCALE [Storj cloud credential](#adding-storj-cloud-credentials). - Adding the cloud credential in SCALE includes using the link to create the Storj iX account, create a new bucket, and obtain the S3 authentication credentials needed to complete the process in SCALE. + Adding the Storj cloud credential in SCALE includes following the link to create the Storj iX account, a new bucket, and obtain the S3 authentication credentials needed to complete the process in SCALE. 2. Create the [TrueCloud Backup task](#setting-up-the-truecloud-backup-task) for one bucket. -### Adding Storj Cloud Credentials - -The instructions in this section cover adding the Storj iX account and configuring the cloud service credentials in SCALE and Storj. -The process includes going to Storj to create a new Storj iX account and returning to SCALE to enter the S3 credentials provided by Storj. - -Go to **Credentials > Backup Credentials** and click **Add** on the **Cloud Credentials** widget. -The **Cloud Credentials** screen opens with Storj displayed as the default provider in the **Provider** field. - -{{< trueimage src="/images/SCALE/Credentials/AddingStorjCloudCredential.png" alt="Adding Storj Cloud Credentials" id="Adding Storj Cloud Credentials" >}} - -1. Enter a descriptive name to identify the credential in the **Name** field. - -2. Click **Signup for account** to create your Storj iX account. This opens the Storj new account screen for TrueNAS. - - {{< hint type=important >}} - You must use this link to create your Storj account to take advantage of the benefits of the Storj iX pricing! - {{< /hint >}} - - After setting up your Storj iX account, [create your Storj bucket](#adding-the-storj-truenas-bucket) and the [Storj S3 access](#setting-up-s3-access-to-the-bucket) for the new bucket. - -3. Enter the authentication information provided by Storj in the **Access Key ID** and **Secret Access Key** fields. -4. Click **Verify Credentials** and wait for the system to verify the credentials. - - {{< trueimage src="/images/SCALE/Credentials/CloudCredentialsVerified.png" alt="Verify Cloud Credentials" id="Verify Cloud Credentials" >}} +### Adding Storj Cloud Credentials -5. Click **Save**. +{{< include file="/static/includes/AddStorjCloudCredential.md" >}} After completing this configuration form, you can set up the [TrueCloud Backup task](#setting-up-the-truecloud-backup-task). ### Creating the Storj iX Account -You can create your Storj iX cloud service account using two methods: - -* Go to the [TrueNAS Storj web page](https://www.truenas.com/ix-storj/) and click **Sign Up & Log in - iX-Storj**. -* Go to **Credentials > Backup Credentials** and click **Add**. - Select **Storj iX** as the **Provider** on the **Cloud Credentials** screen, then click **Sign up for account**. - -The [Storj Create your Storj account](https://us1.storj.io/signup?partner=ix-storj-1) web page opens. -Enter your information in the fields, select the **I agree to the Terms of Service and Privacy Policy**, and click the button at the bottom of the screen. -The Storj main dashboard opens. - -{{< trueimage src="/images/SCALE/DataProtection/StorjMainDashboard.png" alt="Storj Main Dashboard" id="Storj Main Dashboard" >}} - -### Adding the Storj iX Bucket - -Now you can add the storage bucket you want to use in your Storj iX account and SCALE TrueCloud Backup task. - -From the Storj main dashboard: - -1. Click **Browse** on the navigation panel on the left side of the screen to open the **Browse Buckets** screen. - Click **New Bucket** to open the **New Bucket** window. - - {{< trueimage src="/images/SCALE/DataProtection/StorjAddBucket.png" alt="Storj Browse Buckets Screen" id="Storj Browse Buckets Screen" >}} - -2. Enter a name in **Bucket Name** using lowercase alphanumeric characters, with no spaces between characters, then click **Create Bucket**. - Your new bucket displays on the **Browse Buckets** screen. - - {{< trueimage src="/images/SCALE/DataProtection/StorjCreateABucketScreen.png" alt="Storj New Bucket" id="Storj New Bucket" >}} - -3. Click on the new bucket to open the **Enter passphrase** window and configure encryption. - Enter a secure passphrase in **Encryption Passphrase**. +{{< include file="/static/includes/CreateStorjiXAccount.md" >}} - {{< trueimage src="/images/SCALE/DataProtection/StorjEncryptYourBucketScreen.png" alt="Storj Enter Passphrase" id="Storj Enter Passphrase" >}} +#### Setting up S3 Access to the Bucket -4. Click **Continue** to complete the process and open the **Browse Files** screen with your new bucket. +{{< include file="/static/includes/SetUpStorjiXAccountS3Access.md" >}} - {{< trueimage src="/images/SCALE/DataProtection/StorjBucketAdded.png" alt="Storj Browse Files" id="Storj Browse Files" >}} - -### Setting up S3 Access to the Bucket - -After creating your bucket, add S3 access for the new bucket(s) you want to use in your Storj iX account and the SCALE TrueCloud Backup task. - -1. Click **Access Keys** to open the **Access Keys** dashboard, then click **New Access Key**. - - {{< trueimage src="/images/SCALE/DataProtection/StorjAccessManagementScreen.png" alt="Storj Access Keys Screen" id="Storj Access Keys Screen" >}} - - The **New Access** window opens. - -2. Enter the name you want to use for this credential. - Select **S3 Credentials** for access type, then click **Next**. - - {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessWindow.png" alt="Storj New Access Key Window" id="Storj New Access Key Window" >}} - -3. Select the permissions you want to allow this access key. - Choose **Full Access** to allow permanent full permissions to all buckets and data then click **Create Access** or select **Advanced** then click **Next** to customize access configuration. - - {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectConfig.png" alt="Storj Access Permissions Window." id="Storj Access Permissions Window." >}} - - {{< hint type=note >}} - If you want to use the SCALE option to [add new buckets](#setting-up-the-truecloud-backup-task) in SCALE, set the access configuration to **Full Access**. - {{< /hint >}} - -4. (Optional) If configuring advanced access options: - - a. Select the permissions to allow. - Choose one or more of **Read**, **Write**, **List**, **Delete**, or choose **All Permissions**. - Click **Next**. - - {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectPermissions.png" alt="Storj Access Select Permissions" id="Storj Access Select Permissions" >}} - - b. Select the buckets to allow access to. - Click **All Buckets** or click **Select Buckets** and use the **Buckets** dropdown to select one or more bucket(s). - Click **Next**. - - {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectBuckets.png" alt="Storj Access Select Buckets." id="Storj Access Select Buckets." >}} - - c. Select an expiration date if you want to set the duration or length of time to allow this credential to exist. - You can select a preset period, click **Set Custom Expiration Date** to use the calendar to set the duration, or select **No expiration**. - Click **Next** to open the **Access Encryption** window. - - {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectDuration.png" alt="Storj Create Access Select Duration" id="Storj Create Access Select Duration" >}} - - d. Review access details and then click **Create Access**. - - {{< trueimage src="/images/SCALE/DataProtection/StorjS3ConfirmDetails.png" alt="Storj Create Access Confirm Details" id="Storj Create Access Confirm Details" >}} - -5. Use **Copy All** or **Download All** to obtain the access key, secret key, and endpoint. - Keep these in a safe place where you can back up the file. - - {{< trueimage src="/images/SCALE/DataProtection/StorjS3CredentialsGenerated.png" alt="Storj S3 Credentials Generated" id="Storj S3 Credentials Generated" >}} - - Click **Close**. - -This completes the process of setting up your Storj buckets and S3 access. -Enter these keys in the **Authentication** fields in TrueNAS SCALE on the **[Cloud Credentials](#adding-storj-cloud-credentials)** screen to complete setting up the SCALE cloud credential. - -### Setting Up the TrueCloud Backup Task +### Adding a Storj TrueCloud Backup Task To add the TrueCloud backup task, go to **Data Protection > TrueCloud Backup Tasks**: @@ -181,9 +72,9 @@ To add the TrueCloud backup task, go to **Data Protection > TrueCloud Backup Tas Click the arrow to the left of the name to expand it, then click on the name to select it. 3. Select the Storj credential on the **Credentials** dropdown list. - You can select **Add New** to create the Storj credential if you skipped the instructions above. + You can select **Add New** to create the Storj credential if you skipped the instructions above. - 4. Select the bucket you created in Storj from the **Bucket** dropdown list. +4. Select the bucket you created in Storj from the **Bucket** dropdown list. If you set the Storj S3 access to only apply to the [new bucket created in Storj](#adding-the-storj-truenas-bucket), you can only use that bucket, selecting **Add New** results in an error. If you set the Storj S3 **Bucket** access to **All**, you can select the new bucket you created in Storj or **Add New** to create a new Storj bucket. @@ -206,20 +97,20 @@ To add the TrueCloud backup task, go to **Data Protection > TrueCloud Backup Tas TrueNAS adds the task to the **TrueCloud Backup Tasks** widget with the state **N/A** until the task runs on schedule. To test the task, click ** Run Job** to start the task apart from the scheduled time. -The task displays the status **SUCCESS** when complete. +The task status changes to **SUCCESS** when complete. - {{< trueimage src="/images/SCALE/DataProtection/TrueCloudTaskSuccess.png" alt="TrueCloud Backup Task Complete" id="TrueCloud Backup Task Complete" >}} +{{< trueimage src="/images/SCALE/DataProtection/TrueCloudTaskSuccess.png" alt="TrueCloud Backup Task Complete" id="TrueCloud Backup Task Complete" >}} ### Using Advanced Options **Advanced Options** and **Advanced Remote Options** contain additional settings for advanced users. -Select **Take Snapshot** to take a snapshot before transferring data to Storj. -This option is only available for datasets that have no child datasets. +To take a snapshot before transferring data to Storj, select **Take Snapshot**. +This option is not available for datasets with child datasets. Advanced users can write scripts that run immediately before or after the TrueCloud backup task. Enter environment variables in either the **Pre-script** or **Post-script** fields. -The **Post-script** field only runs when the TrueCloud Backup task succeeds. +The **Post-script** field only runs when the TrueCloud backup task succeeds. Use **Exclude** to enter a list of files and directories to exclude from sync. Separate entries by pressing Enter. @@ -229,16 +120,15 @@ Use **Transfers** and **Bandwidth Limit** to prevent excess resource consumption ## Managing TrueCloud Tasks -On the **TrueCloud Backup Tasks** widget, locate an existing task and click ** Edit** to modify configuration details, ** Run Job** to start the task apart from the scheduled time, ** View Details** to go to the **TrueCloud Backup Tasks** screen with task selected, or ** Delete** to delete the selected task. +To edit an existing TrueCloud backup task, click ** Edit** to open the **Edit TrueCloud Backup Task** screen. After making changes, click **Save**. -Click **TrueCloud Backup Tasks ** on the widget title or ** View Details** on a task to go to the **TrueCloud Backup Tasks** Screen. +To run a scheduled task before the defined time, click ** Run Job** to start the task immediately. - {{< trueimage src="/images/SCALE/DataProtection/TrueCloudBackupTasksScreenComplete.png" alt="TrueCloud Backup Tasks Screen" id="TrueCloud Backup Tasks Screen" >}} +To delete a task, click ** Delete** for the task to delete. -Select an existing TrueCloud backup task to display Task details, including the **Schedule**, general configuration, and **Snapshots** widget. +See [TrueCloud Backup Tasks Screens]({{< relref "truecloudbackuptasksscreen.md #advanced-options-settings" >}}) for more information on TrueCloud Backup Task screens. ### Restoring Data from TrueCloud Snapshots - To restore data from a TrueCloud backup, locate an existing snapshot on the **Snapshots widget**. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudSnapshots.png" alt="Snapshots Widget" id="Snapshots Widget" >}} @@ -261,4 +151,4 @@ A **Delete Snapshot** dialog opens. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudDeleteSnapshot.png" alt="Delete Snapshot" id="Delete Snapshot" >}} -Click **Confirm** and then **Delete** to start the job. +Click **Confirm** and then **Delete** to start the job. \ No newline at end of file diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md index 8cdd7b5c09..1fa509e359 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/CloudCredentialScreens.md @@ -13,6 +13,8 @@ tags: --- +{{< include file="/static/includes/CloudServiceProvidersSCALE.md" >}} + ## Cloud Credentials Widget The **Cloud Credentials** widget displays a list of cloud storage credentials configured on the system. @@ -34,7 +36,6 @@ It shows settings to add or edit cloud credentials TrueNAS uses to integrate wit **Provider** shows a list of available providers. Select the name of a cloud provider to populate the configuration screen with credential settings for that provider. -{{< include file="/static/includes/CloudServiceProvidersSCALE.md" >}} **Verify Credentials** uses the credentials entered to verify access the cloud storage provider account. @@ -113,7 +114,7 @@ This section provides information on the BackBlaze B2 authentication settings. Several cloud storage providers use OAuth authentication and a required access token to authenticate the cloud storage account. Providers using these methods are Box, Dropbox, Google Photo, pCloud, and Yandex. -{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokenAuthentications.png" alt="OAuth and Access Token Authentications" id="OAuth and Access Token Authentication" >}} +{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsOAuthAccessTokenAuthentication.png" alt="OAuth and Access Token Authentications" id="OAuth and Access Token Authentication" >}} {{< expand "OAuth and Access Token Authentication Settings" "v" >}} Use **Login to Provider** to enter the account username and password. @@ -163,7 +164,7 @@ Google Cloud Storage authentication uses a Google [service account json key cred Google Drive also uses OAuth authentication, a required access token, and a team drive ID to authenticate accounts. Google Drive adds one additional authentication setting to the general OAuth settings. -{{< trueimage src="/images/SCALE/Credentials/CloudCredentialsGoogleDriveAuthentication.png" alt="Google Drive Authentication" id="Google Drive Authentication" >}} +{{< trueimage src="/images/SCALE/DataProtection/CloudCredentialsGoogleDriveAuthentication.png" alt="Google Drive Authentication" id="Google Drive Authentication" >}} {{< expand "Google Drive Authentication Settings" "v" >}} Use **Login to Provider** to enter the account username and password. diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md index f8e1c778cf..5cd8518849 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md @@ -23,12 +23,12 @@ The **SSH Connections** and **SSH Keypairs** widgets display a list of SSH conne The **SSH Connections** widget allows users to establish Secure Socket Shell (SSH) connections. The **SSH Keypairs** widget allows users to generate SSH keypairs required to authenticate the identity of a user or process that wants to access the system using SSH protocol. -**Add** button in the **SSH Connections** widget opens the **[SSH Connections](#ssh-connections-screens)** configuration window. +**Add** in the **SSH Connections** widget opens the **[SSH Connections](#ssh-connections-screens)** configuration window. The connection name on the widget is a link that opens the **SSH Connections** configuration screen already populated with the saved settings for the selected connection. ### SSH Connections Screens -The settings displayed on the **SSH Connections** configuration screens are the same whether you add a new connection or edit an existing connection. +The settings on the **SSH Connections** configuration screens are the same whether you add a new connection or edit an existing connection. #### Name and Method Settings @@ -37,30 +37,28 @@ The settings displayed on the **SSH Connections** configuration screens are the {{< truetable >}} | Name | Description | |------|-------------| -| **Name** | Required. Enter a unique name for this SSH connection. For example, use *ssh* and a server name or number like *sshsys1* or *sshtn121* where *sys1* or *tn121* are server designations. | -| **Setup Method** | Default is set to **Semi-automatic (TrueNAS only)**. Select **Semi-automatic (TrueNAS only)** to simplify setting up an SSH connection with another TrueNAS or FreeNAS system without logging into that system to transfer SSH keys. Select **Manual** to enter all settings when setting up an SSH connection with a non-TrueNAS server. Displays other setting options required to [manually configure an SSH connection](#authentication-settings---manual-method). Requires copying a public encryption key from the local system to the remote system. A manual setup allows a secure connection without a password prompt. | +| **Name** | (Required) Enter a unique name for this SSH connection. For example, use *ssh* and a server name or number like *sshsys1* or *sshtn121* where *sys1* or *tn121* are server designations. | +| **Setup Method** | Select the setup method to use from the dropdown list of options. Options are:

  • **Semi-automatic (TrueNAS only)** - Select to simplify setting up an SSH connection with another TrueNAS or FreeNAS system without logging into that system to transfer SSH keys. Default is set to **Semi-automatic (TrueNAS only)**.
  • **Manual** - Select to enter all settings when setting up an SSH connection with a non-TrueNAS server. Displays other setting options required to [manually configure an SSH connection](#authentication-settings---manual-method). Requires copying a public encryption key from the local system to the remote system. A manual setup allows a secure connection without a password prompt.
  • | {{< /truetable >}} -#### Authentication Settings - Semi-Automatic Method - -These authentication settings display when **Setup Method** is **Semi-automatic (TrueNAS only)**. +#### Authentication - Semi-Automatic Method Settings +These authentication settings show when **Setup Method** is **Semi-automatic (TrueNAS only)**. {{< trueimage src="/images/SCALE/Credentials/NewSSHConnectAuthentication.png" alt="Authentication Settings" id="Authentication Settings" >}} {{< truetable >}} | Name | Description | |------|-------------| -| **TrueNAS URL** | Enter the host name or IP address of the remote system. Use a valid URL scheme for the remote TrueNAS URL. IP address example of *https://10.231.3.76*. | -| **Admin Username** | Enter the user name for logging into the remote system. | -| **Admin Password** | Enter the user account password for logging into the remote system. | -| **One-Time Password (if necessary)** | One-Time Password if two-factor authentication is enabled. | -| **Username** | Username on the remote system used to login via SSH. | -| **Private Key** | Select a saved SSH keypair or you can import the private key from a previously created SSH keypair or select **Generate New** to create a new keypair to use for the connection to this remote system. | +| **TrueNAS URL** | (Required) Enter the host name or IP address of the remote system. Use a valid URL scheme for the remote TrueNAS URL. IP address example of *https://10.231.3.76*. | +| **Admin Username** | Enter the user name for logging into the remote system. Default is set to **root** but change this to the name of the system administrator for the remote system for this connection. | +| **Admin Password** | (Required) Enter the administrator user account password for logging into the remote system. | +| **One-Time Password (if necessary)** | One-time password if two-factor authentication is enabled. | +| **Username** | (Required) Username on the remote system used to login via SSH. | +| **Private Key** | (Required) Select a saved SSH keypair, import the private key from a previously created SSH keypair, or select **Generate New** to create a new keypair to use for the connection to this remote system. | {{< /truetable >}} -#### Authentication Settings - Manual Method - -These authentication settings display when **Setup Method** is **Manual**. You must copy a public encryption key from the local system to the remote system. +#### Authentication - Manual Method Settings +These authentication settings show when **Setup Method** is **Manual**. You must copy a public encryption key from the local system to the remote system. A manual setup allows a secure connection without a password prompt. {{< trueimage src="/images/SCALE/Credentials/NewSSHConnectAuthenticationManual.png" alt="Manual Authentication Settings" id="Manual Authentication Settings" >}} @@ -68,10 +66,10 @@ A manual setup allows a secure connection without a password prompt. {{< truetable >}} | Name | Description | |------|-------------| -| **Host** | Enter the host name or IP address of the remote system. A valid URL scheme is required. An IP address example is *https://10.231.3.76*. | -| **Port** | Enter the port number on the remote system to use for the SSH connection. | -| **Username** | Enter the user name for logging into the remote system. | -| **Private Key** | Select a saved SSH keypair or select **Generate New** to create a new keypair to use for the connection to this remote system. | +| **Host** | (Required) Enter the host name or IP address of the remote system. A valid URL scheme is required. An IP address example is *https://10.231.3.76*. | +| **Port** | (Required) Enter the port number on the remote system to use for the SSH connection. | +| **Username** | (Required) Enter the user name for logging into the remote system. | +| **Private Key** | (Required) Select a saved SSH keypair or select **Generate New** to create a new keypair to use for the connection to this remote system. | | **Remote Host Key** | Enter the remote system SSH key for this system to authenticate the connection. Click **Discover Remote Host Key** after properly configuring all other fields to query the remote system and automatically populate this field. | | **Discover Remote Host Key** | Click to connect to the remote system and attempt to copy the key string to the related TrueNAS field. | {{< /truetable >}} diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md index a3b68bf88a..73293a2330 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md @@ -15,7 +15,10 @@ Users can set up backup credentials with cloud and SSH clients to back up data i {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} -Click **Add** on the widget for the type of credential to add and open that configuration screen. +The **Backup Credentials** screen displays the **Cloud Credentials**, **SSH Connections** and **SSH Keypairs** widgets. + +Click **Add** on the widget for the type of credential to add to open that configuration screen. +
    ## Contents diff --git a/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md b/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md index c649121f8e..6fb87256fe 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md +++ b/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md @@ -45,6 +45,7 @@ Click on the state oval to open the **Logs** dialog for that task. ## TrueCloud Backup Tasks Screen The **TrueCloud Backup Tasks** screen lists all tasks configured on the system. +Click **TrueCloud Backup Tasks ** on the widget title or ** View Details** on a task to go to the **TrueCloud Backup Tasks** screen. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudBackupTasksScreenComplete.png" alt="TrueCloud Backup Tasks Screen" id="TrueCloud Backup Tasks Screen" >}} @@ -61,7 +62,6 @@ Buttons for these task options perform the same functions as the icons on the wi Select any task to see details on the configured task, such as the schedule, path to the dataset or directories, snapshots and other options for that task. ### Snapshots Widget - The **Snapshots** widget lists existing TrueCloud snapshots for the selected backup task. It contains options to restore from or delete an existing snapshot. @@ -72,14 +72,13 @@ It contains options to restore from or delete an existing snapshot. delete **Delete** opens a confirmation dialog before the system deletes the snapshot. ### Restore from Snapshot Screen - The **Restore from Snapshot** screen displays the date and time of the selected snapshot. It contains **Remote** and **Local** options to configure the TrueCloud snapshot restoration. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudRestore.png" alt="Restore from Snapshot" id="Restore from Snapshot" >}} #### Remote Settings -Configure remote settings to include all data in the backup or exclude some data from the restoration +**Remote Settings** specify all data in the backup or exclude some data from a restoration. Additional settings display depending on the **Include/Exclude** selection. {{< truetable >}} @@ -92,7 +91,7 @@ Additional settings display depending on the **Include/Exclude** selection. | **Select paths to exclude** | Exclude only certain paths from the data to restore. | | **Excluded Paths** | Displays when **Select paths to exclude** is selected. Enter or select files and directories to exclude from the backup. Use the checkboxes to select multiple paths or separate multiple entries with a comma. | | **Exclude by pattern** | Exclude files and directories matching defined glob patterns. | -| **Pattern** | Displays when **Exclude by pattern** is selected +| **Pattern** | Displays when **Exclude by pattern** is selected. | {{< /truetable >}} #### Local Settings @@ -105,24 +104,21 @@ Be cautious with setting the restore target to avoid overwriting existing files. Click **Save** to restore data from the snapshot. -## Add TrueCloud Backup Task Screen - -The **Add TrueCloud Backup Task** screen contains options to configure a new backup task. -The **Edit TrueCloud Backup Task** screen contains the same settings for an existing task. -Settings are grouped into the Local, Remote, Task Settings, and Control, as well as Advanced and Advanced Remote Options for advanced users. +## Add and Edit TrueCloud Backup Task Screen +The **Add TrueCloud Backup Task** and **Edit TrueCloud Backup Task** screens contain options to configure a new backup task. The edit screen opens populated with the existing task settings. +Settings are grouped into the **Local**, **Remote**, **Task** Settings, and **Control**. **Advanced** and **Advanced Remote Options** are for use by advanced users. {{< trueimage src="/images/SCALE/DataProtection/AddTrueCloudTaskBasicOptions.png" alt="Add TrueCloud Backup Task - Basic Options" id="Add TrueCloud Backup Task - Basic Options" >}} ### Local Settings -**Local** settings allow selecting the dataset or directory to use in the task. -Selecting the dataset populates the **Source Path** field. +**Local** settings allow selecting the dataset or directory to use in the task. Selecting the dataset populates the **Source Path** field. {{< include file="/static/includes/FileExplorerFolderIcons.md" >}} {{< truetable >}} | Settings | Description | |----------|-------------| -| **Source Path** | Enter or click the arrow_right arrow to the left of **/mnt** folder to expand and show datasets and directories within that folder. Locate the dataset or directory location to send to Storj for TrueCloud backup. Click the arrow_right arrow to the left of **/mnt** folder again to collapse the directory tree. | +| **Source Path** | Use to specify the path to the dataset or directory to send to the cloud backup provider used in the task. Enter or click the arrow_right arrow to the left of **/mnt** folder to expand and show datasets and directories within that folder. Locate the dataset or directory location to send to Storj for TrueCloud backup. Click the arrow_right arrow to the left of **/mnt** folder again to collapse the directory tree. | {{< /truetable >}} ### Remote Settings @@ -131,20 +127,20 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< truetable >}} | Settings | Description | |----------|-------------| -| **Credential** | Select an exiting Storj iX credential from the dropdown list. TrueNAS automatically validates the selected credential.
    Select **Add New** to open the **Cloud Credentials** screen. This is the same configuration screen as when you click **Add** on the **Credentials > Backup Credentials** screen. | -| **Bucket** | Select the pre-defined Storj bucket to use. | -| **Folder** | Enter or click the arrow_right arrow to the left of the folder icon and at each dataset or directory to reach the storage location to use for this task.
    Enter `/name`, where *name* is a folder that does not exist, to create a new folder in the Storj bucket. | +| **Credential** | Select an exiting cloud storage provider credential, such as Storj iX from the dropdown list. TrueNAS automatically validates the selected credential.
    Select **Add New** to open the [**Cloud Credentials**]({{< relref "CloudCredentialScreen.md" >}}) screen. This is the same configuration screen as when you click **Add** on the **Credentials > Backup Credentials** screen. | +| **Bucket** | Shows after selecting the cloud provider in the **Credential** field. Select the pre-defined bucket to use if the provider uses buckets. For example, Amazon S3 and Storj use buckets. | +| **Folder** | Use to specify the dataset or directory to receive the backed up data. Enter the path or click the arrow_right arrow to the left of the folder icon and at each dataset or directory to reach the storage location to use for this task.
    Enter `/name`, where *name* is a folder that does not exist, to create a new folder in the Storj bucket. | {{< /truetable >}} ### Task Settings -**Task Settings** specify the task name, snapshot retention policy, and password. +**Task Settings** specifies the task name, snapshot retention policy, and password. {{< truetable >}} | Settings | Description | |----------|-------------| -| **Name** | Enter a name for the TrueCloud Backup Task. | +| **Name** | Enter a name for the TrueCloud backup task. | | **Keep Last** | Enter a number of past snapshot copies to retain before removing older snapshots. | -| **Password** | Enter a password for the backup repository. Record this password in a secure location. It is needed to recreate the task using the same bucket/folder, such as in a new TrueNAS install or system, or to restore data from the existing snapshots in another TrueNAS system. | +| **Password** | Enter a password for the backup repository. Record this password in a secure location. Required to recreate the task using the same bucket/folder, such as in a new TrueNAS install or system, or to restore data from the existing snapshots in another TrueNAS system. | {{< /truetable >}} ### Control Settings @@ -154,7 +150,7 @@ The **Remote** settings specify the TrueCloud credential and destination storage | Settings | Description | |----------|-------------| | **Schedule** | Select a schedule preset or choose **Custom** to open the advanced scheduler. | -| **Enabled** | Select to enable this TrueCloud task. Leave clear to disable the task without deleting it and keep the configuration available without allowing the specified schedule to run the task. You can use the toggle in the **Enable** column on the **TrueCloud Backup Tasks** widget to enable or disable the task. | +| **Enabled** | Select to enable this TrueCloud task. Leave clear to disable the task without deleting it and keep the configuration available without allowing the specified schedule to run the task. The toggle in the **Enable** column on the **TrueCloud Backup Tasks** widget enables/disables the task. | {{< /truetable >}} {{< expand "Advanced Scheduler" "v" >}} @@ -162,24 +158,25 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< /expand >}} ### Advanced Options Settings -**Advanced Options** settings are for advanced users. +**Advanced Options** settings are intended for use by advanced users. {{< trueimage src="/images/SCALE/DataProtection/AddTrueCloudTaskAdvancedOptions.png" alt="Add TrueCloud Backup Task - Advanced Options" id="Add TrueCloud Backup Task - Advanced Options" >}} {{< truetable >}} | Settings | Description | |----------|-------------| -| **Take Snapshot** | Select to take a snapshot before transferring data to Storj. This option is only available for datasets that have no child datasets. | -| **Pre-Script** | For advanced users. Enter a script to execute before running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | -| **Post-Script** | For advanced user. Enter a script to execute after running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | +| **Take Snapshot** | Select to take a snapshot before transferring data to Storj or the cloud storage provider specified. This option is not available to datasets with child datasets. | +| **Pre-Script** | For advanced users only. Enter a script to execute before running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | +| **Post-Script** | For advanced users only. Enter a script to execute after running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | | **Exclude** | Enter a list of files and directories to exclude from the backup. Separate entries by pressing Enter.
    Examples of proper syntax to exclude files/directories are:
  • `photos` excludes a file named *photos*
  • `/photos`> excludes a file named *photos* from root directory (but not subdirectories)
  • `photos/` excludes a directory named *photos*
  • `/photos/` excludes a directory named *photos* from root directory (but not subdirectories).
  • See [rclone filtering](https://rclone.org/filtering/) for more details about the `--exclude` option. | {{< /truetable >}} ### Advanced Remote Options +*Advanced Remote Options** settings are intended for use by advanced users. {{< truetable >}} | Settings | Description | |----------|-------------| | **Transfers** | Enter the number of simultaneous file transfers. Enter a number based on the available bandwidth and destination system performance. See [rclone --transfers](https://rclone.org/docs/#transfers-n). | | **Bandwidth limit** | Enter a single bandwidth limit or bandwidth limit schedule in rclone format. Separate entries by pressing . Example: *08:00,512 12:00,10MB 13:00,512 18:00,30MB 23:00,off*. You can specify units with the beginning letter **b**, **k** (default), **M**, or **G**. See [rclone --bwlimit](https://rclone.org/docs/#bwlimit-bandwidth-spec). | -{{< /truetable >}} +{{< /truetable >}} \ No newline at end of file diff --git a/static/includes/AddStorjCloudCredential.md b/static/includes/AddStorjCloudCredential.md new file mode 100644 index 0000000000..32c21d8188 --- /dev/null +++ b/static/includes/AddStorjCloudCredential.md @@ -0,0 +1,27 @@ + + +The instructions in this section cover adding the Storj iX account and configuring the cloud service credentials in SCALE and Storj. +The process includes going to Storj to create a new Storj iX account and returning to SCALE to enter the S3 credentials provided by Storj. + +Go to **Credentials > Backup Credentials** and click **Add** on the **Cloud Credentials** widget. +The **Cloud Credentials** screen opens with Storj displayed as the default provider in the **Provider** field. + +{{< trueimage src="/images/SCALE/Credentials/AddingStorjCloudCredential.png" alt="Adding Storj Cloud Credentials" id="Adding Storj Cloud Credentials" >}} + +1. Enter a descriptive name to identify the credential in the **Name** field. + +2. Click **Signup for account** to create your Storj iX account. This opens the Storj new account screen for TrueNAS. + + {{< hint type=important >}} + You must use this link to create your Storj account to take advantage of the benefits of the Storj iX pricing! + {{< /hint >}} + + After setting up your Storj iX account, [create your Storj bucket](#adding-the-storj-truenas-bucket) and the [Storj S3 access](#setting-up-s3-access-to-the-bucket) for the new bucket. + +3. Enter the authentication information provided by Storj in the **Access Key ID** and **Secret Access Key** fields. + +4. Click **Verify Credentials** and wait for the system to verify the credentials. + + {{< trueimage src="/images/SCALE/Credentials/CloudCredentialsVerified.png" alt="Verify Cloud Credentials" id="Verify Cloud Credentials" >}} + +5. Click **Save**. diff --git a/static/includes/CloudServiceProvidersSCALE.md b/static/includes/CloudServiceProvidersSCALE.md index 7fa8471961..f1d6c61a5b 100644 --- a/static/includes/CloudServiceProvidersSCALE.md +++ b/static/includes/CloudServiceProvidersSCALE.md @@ -24,5 +24,3 @@ These providers are supported for Cloud Sync tasks in TrueNAS SCALE: * [WebDAV](http://www.webdav.org/) * [Yandex](https://cloud.yandex.com/en/) {{< /columns >}} - -*[TrueCloud Backup Tasks]({{< relref "TrueCloudTasks.md" >}}) streamline functionality for Storj iX cloud backups and restoration. diff --git a/static/includes/CreateStorjiXAccount.md b/static/includes/CreateStorjiXAccount.md new file mode 100644 index 0000000000..22ca75a4fb --- /dev/null +++ b/static/includes/CreateStorjiXAccount.md @@ -0,0 +1,36 @@ + + +You can create your Storj iX cloud service account using two methods: + +* Go to the [TrueNAS Storj web page](https://www.truenas.com/ix-storj/) and click **Sign Up & Log in - iX-Storj**. +* Go to **Credentials > Backup Credentials** and click **Add**. + Select **Storj iX** as the **Provider** on the **Cloud Credentials** screen, then click **Sign up for account**. + +The [Storj Create your Storj account](https://us1.storj.io/signup?partner=ix-storj-1) web page opens. +Enter your information in the fields, select the **I agree to the Terms of Service and Privacy Policy**, and click the button at the bottom of the screen. +The Storj main dashboard opens. + +{{< trueimage src="/images/SCALE/DataProtection/StorjMainDashboard.png" alt="Storj Main Dashboard" id="Storj Main Dashboard" >}} + +Now you can add the storage bucket you want to use in your Storj iX account and SCALE TrueCloud Backup task. + +From the Storj main dashboard: + +1. Click **Browse** on the navigation panel on the left side of the screen to open the **Browse Buckets** screen. + Click **New Bucket** to open the **New Bucket** window. + + {{< trueimage src="/images/SCALE/DataProtection/StorjAddBucket.png" alt="Storj Browse Buckets Screen" id="Storj Browse Buckets Screen" >}} + +2. Enter a name in **Bucket Name** using lowercase alphanumeric characters, with no spaces between characters, then click **Create Bucket**. + Your new bucket displays on the **Browse Buckets** screen. + + {{< trueimage src="/images/SCALE/DataProtection/StorjCreateABucketScreen.png" alt="Storj New Bucket" id="Storj New Bucket" >}} + +3. Click on the new bucket to open the **Enter passphrase** window and configure encryption. + Enter a secure passphrase in **Encryption Passphrase**. + + {{< trueimage src="/images/SCALE/DataProtection/StorjEncryptYourBucketScreen.png" alt="Storj Enter Passphrase" id="Storj Enter Passphrase" >}} + +4. Click **Continue** to complete the process and open the **Browse Files** screen with your new bucket. + + {{< trueimage src="/images/SCALE/DataProtection/StorjBucketAdded.png" alt="Storj Browse Files" id="Storj Browse Files" >}} \ No newline at end of file diff --git a/static/includes/OAuthCloudCredentialSetupSCALE.md b/static/includes/OAuthCloudCredentialSetupSCALE.md index b657008538..5e72534c1d 100644 --- a/static/includes/OAuthCloudCredentialSetupSCALE.md +++ b/static/includes/OAuthCloudCredentialSetupSCALE.md @@ -1,23 +1,20 @@ -After logging into the provider with the OAuth credentials, the provider provides the access token. -Google Drive and pCloud use one more setting to authenticate credentials. +Open the **Cloud Credentials** screen, select the name of the cloud storage provider on the **Provider** dropdown list, enter a name for the credential and then: -1. Enter the name and select the cloud storage provider from the **Provider** dropdown list. +1. Enter the provider account email in **OAuth Client ID** and the password for that user account in **OAuth Client Secret**. -2. Enter the provider account email in **OAuth Client ID** and the password for that user account in **OAuth Client Secret**. - -3. Click **Log In To Provider**. The **Authentication** window opens. Click **Proceed** to open the OAuth credential account sign in window. +2. Click **Log In To Provider**. The **Authentication** window opens. Click **Proceed** to open the OAuth credential account sign in window. Yandex displays a cookies message you must accept before you can enter credentials. Enter the provider account user name and password to verify the credentials. -4. (Optional) Enter the value for any additional authentication method. +3. (Optional) Enter the value for any additional authentication method. For pCloud, enter the pCloud host name for the host you connect to in **Hostname**. For Google Drive when connecting to **Team Drive**, enter the Google Drive top-level folder ID. -5. Enter the access token from the provider if not populated by the provider after OAuth authentication. Obtaining the access token varies by provider. +4. Enter the access token from the provider if not populated by the provider after OAuth authentication. Obtaining the access token varies by provider. {{< truetable >}} | Provider | Access Token | @@ -30,6 +27,6 @@ Google Drive and pCloud use one more setting to authenticate credentials. | Yandex | Create the Yandex access token [here](https://yandex.com/dev/direct/doc/dg-v4/concepts/auth-token.html). | {{< /truetable >}} -6. Click **Verify Credentials** to make sure you can connect with the entered credentials. +5. Click **Verify Credentials** to make sure you can connect with the entered credentials. -7. Click **Save**. \ No newline at end of file +6. Click **Save**. \ No newline at end of file diff --git a/static/includes/SetUpStorjiXAccountS3Access.md b/static/includes/SetUpStorjiXAccountS3Access.md new file mode 100644 index 0000000000..6973f67005 --- /dev/null +++ b/static/includes/SetUpStorjiXAccountS3Access.md @@ -0,0 +1,57 @@ + + +After creating your bucket, add S3 access for the new bucket(s) you want to use in your Storj iX account and the SCALE TrueCloud Backup task. + +1. Click **Access Keys** to open the **Access Keys** dashboard, then click **New Access Key**. + + {{< trueimage src="/images/SCALE/DataProtection/StorjAccessManagementScreen.png" alt="Storj Access Keys Screen" id="Storj Access Keys Screen" >}} + + The **New Access** window opens. + +2. Enter the name you want to use for this credential. + Select **S3 Credentials** for access type, then click **Next**. + + {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessWindow.png" alt="Storj New Access Key Window" id="Storj New Access Key Window" >}} + +3. Select the permissions you want to allow this access key. + Choose **Full Access** to allow permanent full permissions to all buckets and data then click **Create Access** or select **Advanced** then click **Next** to customize access configuration. + + {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectConfig.png" alt="Storj Access Permissions Window." id="Storj Access Permissions Window." >}} + + {{< hint type=note >}} + If you want to use the SCALE option to [add new buckets](#setting-up-the-truecloud-backup-task) in SCALE, set the access configuration to **Full Access**. + {{< /hint >}} + +4. (Optional) If configuring advanced access options: + + a. Select the permissions to allow. + Choose one or more of **Read**, **Write**, **List**, **Delete**, or choose **All Permissions**. + Click **Next**. + + {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectPermissions.png" alt="Storj Access Select Permissions" id="Storj Access Select Permissions" >}} + + b. Select the buckets to allow access to. + Click **All Buckets** or click **Select Buckets** and use the **Buckets** dropdown to select one or more bucket(s). + Click **Next**. + + {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectBuckets.png" alt="Storj Access Select Buckets." id="Storj Access Select Buckets." >}} + + c. Select an expiration date if you want to set the duration or length of time to allow this credential to exist. + You can select a preset period, click **Set Custom Expiration Date** to use the calendar to set the duration, or select **No expiration**. + Click **Next** to open the **Access Encryption** window. + + {{< trueimage src="/images/SCALE/DataProtection/StorjCreateAccessSelectDuration.png" alt="Storj Create Access Select Duration" id="Storj Create Access Select Duration" >}} + + d. Review access details and then click **Create Access**. + + {{< trueimage src="/images/SCALE/DataProtection/StorjS3ConfirmDetails.png" alt="Storj Create Access Confirm Details" id="Storj Create Access Confirm Details" >}} + +5. Use **Copy All** or **Download All** to obtain the access key, secret key, and endpoint. + Keep these in a safe place where you can back up the file. + + {{< trueimage src="/images/SCALE/DataProtection/StorjS3CredentialsGenerated.png" alt="Storj S3 Credentials Generated" id="Storj S3 Credentials Generated" >}} + +6. Click **Close**. + +This completes the process of setting up Storj buckets and S3 access. +Enter these keys in the **Authentication** fields in TrueNAS SCALE on the **[Cloud Credentials](#adding-storj-cloud-credentials)** screen to complete setting up the SCALE cloud credential. \ No newline at end of file From 59e64002bba193cbcbd44476dd4bf13e9f69c349 Mon Sep 17 00:00:00 2001 From: MicJ Date: Fri, 23 Aug 2024 08:56:27 -0400 Subject: [PATCH 05/18] PD-1381 Update TrueCloud Backup Tasks Screen Content This commit makes content and style/grammatical changes to the UI Ref article content. It also removes syntax examples that appeared to have errors based on the information in the linked document (likely typos/copy/paste errors, and that looked like style emphasis code errors. --- .../TrueCloudBackupTasksScreen.md | 99 ++++++++++--------- 1 file changed, 55 insertions(+), 44 deletions(-) diff --git a/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md b/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md index 6fb87256fe..fd8c6751f2 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md +++ b/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md @@ -12,8 +12,9 @@ keywords: - data backup and recovery --- -The **TrueCloud Backup Tasks** widget on the **Data Protection** screen shows configured TrueCloud tasks, and provides access to configuration screens to add single-time or scheduled recurring transfers between TrueNAS SCALE and a Storj Ix cloud storage account. -TrueCloud tasks are an effective method to back up data to a remote location, restore snapshots, or to perform cloud-storage-migration. +The **TrueCloud Backup Tasks** widget on the **Data Protection** screen shows configured TrueCloud tasks, and provides access to configuration screens to add or scheduled recurring transfers between TrueNAS SCALE and a cloud storage provider account like Storj iX. + +TrueCloud backup tasks are an effective method to back up data to a remote location, restore snapshots, or to perform cloud-storage-migration. ## TrueCloud Backup Tasks Widget The **TrueCloud Backup Tasks** widget shows a list of tasks configured on the system. @@ -22,44 +23,50 @@ The **TrueCloud Backup Tasks** widget shows a list of tasks configured on the sy The widget shows **No records have been added yet** until a TrueCloud task is added. -Click on the widget header to open the [**TrueCloud Backup Tasks**](#truecloud-backup-tasks-screen) screen that lists all tasks configured on the system. +The widget header opens the [**TrueCloud Backup Tasks**](#truecloud-backup-tasks-screen) screen that lists all TrueCloud backup tasks configured on the system. **Add** on the widget and the **TrueCloud Backup Tasks** screen opens the **[Add TrueCloud Backup Task Screen](#add-truecloud-backup-task-screen)**. -Each task includes four icons for various functions: +Each task on the widget shows four icons for various functions: + +* edit **Edit** opens the **[Edit TrueCloud Backup Task](#edit-truecloud-backup-task-screen)** screen populated with with the settings for that task. + +* **Run Now** starts and runs the backup task outside of the scheduled time. -* The edit **Edit** icon opens the **[Edit TrueCloud Backup Task](#edit-truecloud-backup-task-screen)** screen populated with with the settings for that task. +* ** View Details** opens the [**TrueCloud Backup Tasks**](#truecloud-backup-tasks-screen) screen that lists backup tasks configured on the system. Click on a tasks to see details for the selected task. -* The **Run Now** icon starts the backup task, running it outside of the scheduled time. +* delete **Delete** opens a confirmation dialog before the system deletes the task. -* The ** View Details** icon opens the [**TrueCloud Backup Tasks**](#truecloud-backup-tasks-screen) Screen with details for the selected task visible. +**State** shows the status of the previous or current task. Possible status indications are: -* The delete **Delete** icon opens a confirmation dialog before the system deletes the task. +* **SUCCESS** for completed tasks. +* **FAILED** if the task fails to complete. +* **RUNNING** for tasks in progress. +8 **N/A** for scheduled tasks before they run. -**State** displays the status of the previous or current task as **SUCCESS** for completed tasks, **FAILED** if the task fails to complete, and **RUNNING** for tasks in progress. -Tasks that have not been run yet display **N/A**. -Click on the state oval to open the **Logs** dialog for that task. +### TrueCloud Logs Dialog +The state oval opens the **Logs** dialog for that task. **Download Logs** saves a copy of the current task logs. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudLogs.png" alt="TrueCloud Logs Dialog" id="TrueCloud Logs Dialog" >}} ## TrueCloud Backup Tasks Screen The **TrueCloud Backup Tasks** screen lists all tasks configured on the system. -Click **TrueCloud Backup Tasks ** on the widget title or ** View Details** on a task to go to the **TrueCloud Backup Tasks** screen. +The **TrueCloud Backup Tasks ** on the widget title or ** View Details** on a task opens the **TrueCloud Backup Tasks** screen. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudBackupTasksScreenComplete.png" alt="TrueCloud Backup Tasks Screen" id="TrueCloud Backup Tasks Screen" >}} -Buttons for these task options perform the same functions as the icons on the widget: +Task options perform the same functions as the icons on the widget: * edit **Edit** opens the **[Edit TrueCloud Backup Task](#edit-truecloud-backup-task-screen)** screen populated with with the settings for that task. -* **Run Now** starts the backup task, running it outside of the scheduled time. +* **Run Now** starts and runs the backup task outside of the scheduled time. * delete **Delete** opens a confirmation dialog before the system deletes the task. {{}} -Select any task to see details on the configured task, such as the schedule, path to the dataset or directories, snapshots and other options for that task. +Select any task to see details for the configured task, such as the schedule, path to the dataset or directories, snapshots, and other task options. ### Snapshots Widget The **Snapshots** widget lists existing TrueCloud snapshots for the selected backup task. @@ -67,46 +74,50 @@ It contains options to restore from or delete an existing snapshot. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudSnapshots.png" alt="Snapshots Widget" id="Snapshots Widget" >}} -** Restore** opens the **Restore from Snapshot** screen. +** Restore** opens the [**Restore from Snapshot**](#restore-from-snapshot-screen) screen. delete **Delete** opens a confirmation dialog before the system deletes the snapshot. ### Restore from Snapshot Screen -The **Restore from Snapshot** screen displays the date and time of the selected snapshot. -It contains **Remote** and **Local** options to configure the TrueCloud snapshot restoration. +The **Restore from Snapshot** screen shows the date and time of the selected snapshot. +It shows **Remote** and **Local** configuration options to restore the TrueCloud snapshot. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudRestore.png" alt="Restore from Snapshot" id="Restore from Snapshot" >}} #### Remote Settings **Remote Settings** specify all data in the backup or exclude some data from a restoration. -Additional settings display depending on the **Include/Exclude** selection. +Additional settings show depending on the **Include/Exclude** selection. {{< truetable >}} | Settings | Description | |----------|-------------| -| **Include Everything** | Restore all backed up data from the remote snapshot to the selected local path. | -| **Include from subfolder** | Restore data from a subfolder within the backed up data. | -| **Subfolder** | Displays when **Include from subfolder** is selected. Enter or browse to the subfolder within the snapshot to restore data from. | -| **Included Paths** | Displays when **Include from subfolder** is selected. Select files and directories to include from the backup. Leave empty to include everything in the selected subfolder. | -| **Select paths to exclude** | Exclude only certain paths from the data to restore. | -| **Excluded Paths** | Displays when **Select paths to exclude** is selected. Enter or select files and directories to exclude from the backup. Use the checkboxes to select multiple paths or separate multiple entries with a comma. | -| **Exclude by pattern** | Exclude files and directories matching defined glob patterns. | -| **Pattern** | Displays when **Exclude by pattern** is selected. | +| **Include Everything** | Select to restore all backed up data from the remote snapshot to the selected local path. | +| **Include from subfolder** | Select to restore data from a subfolder within the backed up data. | +| **Subfolder** | Shows when **Include from subfolder** is selected. Enter or browse to the subfolder within the snapshot to restore data from. | +| **Included Paths** | Shows when **Include from subfolder** is selected. Select files and directories to include from the backup. Leave empty to include everything in the selected subfolder. | +| **Select paths to exclude** | Select to exclude only certain paths from the data to restore. | +| **Excluded Paths** | Shows when **Select paths to exclude** is selected. Enter or select files and directories to exclude from the backup. Select as many checkboxes as you want to select multiple paths or separate multiple entries with a comma. | +| **Exclude by pattern** | Select to exclude files and directories matching defined glob patterns. | +| **Pattern** | Shows when **Exclude by pattern** is selected. | {{< /truetable >}} #### Local Settings -Use **Target** to select the local directory where files are restored. +Use **Local** settings to select the target mount point on the current (local) system where files are restored. Be cautious with setting the restore target to avoid overwriting existing files. +**Target** enter the path to the dataset or directory or browse to the location to populate the field with the local directory where files are restored. + {{< include file="/static/includes/FileExplorerFolderIcons.md" >}} ** Create Dataset** opens a dialog to name and create a new dataset at the selected target. -Click **Save** to restore data from the snapshot. +**Save** starts restoring data from the snapshot. ## Add and Edit TrueCloud Backup Task Screen -The **Add TrueCloud Backup Task** and **Edit TrueCloud Backup Task** screens contain options to configure a new backup task. The edit screen opens populated with the existing task settings. -Settings are grouped into the **Local**, **Remote**, **Task** Settings, and **Control**. **Advanced** and **Advanced Remote Options** are for use by advanced users. +The **Add TrueCloud Backup Task** and **Edit TrueCloud Backup Task** screens contain options to configure a new backup task. +The edit screen opens populated with the existing task settings. +Each screen shows the **Local**, **Remote**, **Task Settings**, and **Control** basic settings. +The **Advanced** and **Advanced Remote Options** are for use by advanced users. {{< trueimage src="/images/SCALE/DataProtection/AddTrueCloudTaskBasicOptions.png" alt="Add TrueCloud Backup Task - Basic Options" id="Add TrueCloud Backup Task - Basic Options" >}} @@ -118,7 +129,7 @@ Settings are grouped into the **Local**, **Remote**, **Task** Settings, and **Co {{< truetable >}} | Settings | Description | |----------|-------------| -| **Source Path** | Use to specify the path to the dataset or directory to send to the cloud backup provider used in the task. Enter or click the arrow_right arrow to the left of **/mnt** folder to expand and show datasets and directories within that folder. Locate the dataset or directory location to send to Storj for TrueCloud backup. Click the arrow_right arrow to the left of **/mnt** folder again to collapse the directory tree. | +| **Source Path** | Enter or browse to the path of the dataset or directory with the data to send to the cloud backup provider used in the task. Click the arrow_right arrow to the left of **/mnt** folder to expand and show datasets and directories within that folder. This is the dataset or directory location with the data the TrueCloud backup task sends to the cloud storage provider. Click the arrow_right arrow to the left of **/mnt** folder again to collapse the directory tree. | {{< /truetable >}} ### Remote Settings @@ -127,13 +138,13 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< truetable >}} | Settings | Description | |----------|-------------| -| **Credential** | Select an exiting cloud storage provider credential, such as Storj iX from the dropdown list. TrueNAS automatically validates the selected credential.
    Select **Add New** to open the [**Cloud Credentials**]({{< relref "CloudCredentialScreen.md" >}}) screen. This is the same configuration screen as when you click **Add** on the **Credentials > Backup Credentials** screen. | -| **Bucket** | Shows after selecting the cloud provider in the **Credential** field. Select the pre-defined bucket to use if the provider uses buckets. For example, Amazon S3 and Storj use buckets. | -| **Folder** | Use to specify the dataset or directory to receive the backed up data. Enter the path or click the arrow_right arrow to the left of the folder icon and at each dataset or directory to reach the storage location to use for this task.
    Enter `/name`, where *name* is a folder that does not exist, to create a new folder in the Storj bucket. | +| **Credential** | Select an exiting cloud storage provider credential, such as Storj iX from the dropdown list (default option). TrueNAS automatically validates the selected credential.
    Select **Add New** to open the [**Cloud Credentials**]({{< relref "CloudCredentialScreens.md" >}}) screen. This is same configuration screen opens when you click **Add** on the **Credentials > Backup Credentials** screen. | +| **Bucket** | Shows after selecting a cloud provider that uses buckets in the **Credential** field. Select a pre-defined bucket configured in the provider web UI. For example, Amazon S3 and Storj use buckets. | +| **Folder** | Enter or browse to the dataset or directory to receive the backed up data. Click the arrow_right arrow to the left of the folder icon and at each dataset or directory to reach the storage location to use for this task.
    Enter /name, where *name* is a folder that does not exist, to create a new folder in the bucket. | {{< /truetable >}} ### Task Settings -**Task Settings** specifies the task name, snapshot retention policy, and password. +**Task Settings** specify the task name, snapshot retention policy, and password for the backup repository. {{< truetable >}} | Settings | Description | @@ -144,13 +155,13 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< /truetable >}} ### Control Settings -**Control** settings establish a schedule for when the backup task occurs. +**Control** settings establish a schedule for when to run the backup task. {{< truetable >}} | Settings | Description | |----------|-------------| | **Schedule** | Select a schedule preset or choose **Custom** to open the advanced scheduler. | -| **Enabled** | Select to enable this TrueCloud task. Leave clear to disable the task without deleting it and keep the configuration available without allowing the specified schedule to run the task. The toggle in the **Enable** column on the **TrueCloud Backup Tasks** widget enables/disables the task. | +| **Enabled** | Select to enable the TrueCloud task. Leave clear to disable the task without deleting it and keep the configuration available without allowing the specified schedule to run the task. The toggle in the **Enable** column on the **TrueCloud Backup Tasks** widget enables/disables the task. | {{< /truetable >}} {{< expand "Advanced Scheduler" "v" >}} @@ -165,18 +176,18 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< truetable >}} | Settings | Description | |----------|-------------| -| **Take Snapshot** | Select to take a snapshot before transferring data to Storj or the cloud storage provider specified. This option is not available to datasets with child datasets. | -| **Pre-Script** | For advanced users only. Enter a script to execute before running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | -| **Post-Script** | For advanced users only. Enter a script to execute after running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | -| **Exclude** | Enter a list of files and directories to exclude from the backup. Separate entries by pressing Enter.
    Examples of proper syntax to exclude files/directories are:
  • `photos` excludes a file named *photos*
  • `/photos`> excludes a file named *photos* from root directory (but not subdirectories)
  • `photos/` excludes a directory named *photos*
  • `/photos/` excludes a directory named *photos* from root directory (but not subdirectories).
  • See [rclone filtering](https://rclone.org/filtering/) for more details about the `--exclude` option. | +| **Take Snapshot** | Select to take a snapshot before transferring data to the specified cloud provider like Storj. This option is not available to datasets with child datasets. | +| **Pre-Script** | (For advanced users only) Enter a script to execute before running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | +| **Post-Script** | (For advanced users only) Enter a script to execute after running the task. See the [Managing TrueCloud Backup Tasks tutorial]({{< relref "TrueCloudTasks.md #using-advanced-options" >}}) for more information. | +| **Exclude** | Enter a list of files and directories to exclude from the backup. Separate entries by pressing Enter. See [rclone filtering](https://rclone.org/filtering/) for more details about the `--exclude` option and proper syntax. | {{< /truetable >}} ### Advanced Remote Options -*Advanced Remote Options** settings are intended for use by advanced users. +**Advanced Remote Options** settings are intended for use by advanced users. {{< truetable >}} | Settings | Description | |----------|-------------| -| **Transfers** | Enter the number of simultaneous file transfers. Enter a number based on the available bandwidth and destination system performance. See [rclone --transfers](https://rclone.org/docs/#transfers-n). | +| **Transfers** | Enter the number of simultaneous file transfers to allow. Base thenumber on the available bandwidth and destination system performance. See [rclone --transfers](https://rclone.org/docs/#transfers-n). | | **Bandwidth limit** | Enter a single bandwidth limit or bandwidth limit schedule in rclone format. Separate entries by pressing . Example: *08:00,512 12:00,10MB 13:00,512 18:00,30MB 23:00,off*. You can specify units with the beginning letter **b**, **k** (default), **M**, or **G**. See [rclone --bwlimit](https://rclone.org/docs/#bwlimit-bandwidth-spec). | {{< /truetable >}} \ No newline at end of file From 17639672eee8a3b86cd1734c3938a0a77dffe943 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 09:55:37 -0400 Subject: [PATCH 06/18] Update SetUpBackupScale.md --- .../GettingStarted/Configure/SetUpBackupScale.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md b/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md index fe1b9f29f2..a095a619e7 100644 --- a/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md +++ b/content/SCALE/GettingStarted/Configure/SetUpBackupScale.md @@ -25,7 +25,7 @@ You should also: TrueNAS provides several options to set up a data storage backup method including using either a cloud sync provider and scheduled task, or configuring a replication task. ## Backing Up the System Configuration -First thing after you set up TrueNAS is to back up your system configuration by downloading the system configuration file. +The first thing you should do after you set up TrueNAS is back up your system configuration by downloading the system configuration file. {{< include file="/static/includes/DownloadSystemConfigFileSCALE.md" >}} @@ -49,7 +49,7 @@ TrueNAS has several options that allow you to back up data: * [Replication tasks](#using-replication) * [Rsync tasks]({{< relref "RsyncTasksSCALE.md" >}}) -Both TrueCloud backup and cloud sync tasks require setting up a cloud service provider account and adding the credentials in TrueNAS before configuring and schedule the tasks. +Both TrueCloud backup and cloud sync tasks require setting up a cloud service provider account and adding the credentials in TrueNAS before configuring and scheduling the tasks. Replication requires setting up SSH credentials before configuring and scheduling the task. Rsync tasks can be configured with SSH credentials or set up to use a module. @@ -63,11 +63,11 @@ These providers can charge fees for data transfer and storage, so please review Cloud sync and TrueCloud backup tasks can be configured to send, receive, or synchronize data with a cloud storage provider. -The simplest way to set up a TrueCloud backup task is using an Storj iX account. +The simplest way to set up a TrueCloud backup task is using a Storj iX account. See [Managing TrueCloud Backup Tasks]({{< relref "TrueCloudTasks.md" >}}) for a full tutorial. {{< expand "TrueCloud Backup Quickstart with a Storj Account" "v" >}} -TrueNAS allows you to create a Storj cloud credential in TrueNAS, and set up a Storj account, from **Backup Task** widget on the main **Dashboard**, the **Add TrueCloud Backup Task** screen, or from the **Add Cloud Credentials** screen accessed from on the **Credentials > Backup Credentials** screens. +TrueNAS allows you to create a Storj cloud credential in TrueNAS, and set up a Storj account, from the **Backup Task** widget on the main **Dashboard**, the **Add TrueCloud Backup Task** screen, or from the **Add Cloud Credentials** screen accessed from on the **Credentials > Backup Credentials** screens. To create the TrueCloud backup task using Storj: @@ -80,7 +80,7 @@ To create the TrueCloud backup task using Storj: Click **Signup for account** to open the **Storj + iX** browser tab. Register an account, select a plan, and activate the Storj iX account. After creating the Storj iX account, log into the Storj portal to create a new bucket and new S3 access credentials ([details]({{< relref "TrueCloudTasks.md#adding-storj-cloud-credentials" >}})). - Download the **Access Key** and **Secret Key** provided while creating the new S3 credentials, copy and paste each string into the TrueNAS **Access Key ID** and **Secret Access Key** fields, respectively. + Download the **Access Key** and **Secret Key** provided while creating the new S3 credentials. Copy and paste each string into the TrueNAS **Access Key ID** and **Secret Access Key** fields, respectively. Click **Save**. @@ -106,20 +106,20 @@ Snapshot technology typically uses less storage than full file backups and has m To create a simple replication task with the TrueNAS replication wizard: Replication needs an existing [periodic snapshot task]({{< relref "PeriodicSnapshotTasksSCALE.md" >}})** to run before the replication task runs or the replication task fails. -You can define this before configuring the replication task or select the replication wizard **Replicate Custom Snapshots** option have TrueNAS automatically to create the task before running the replication task. +You can define this before configuring the replication task or select the replication wizard **Replicate Custom Snapshots** option to have TrueNAS automatically create the task before running the replication task. 1. Create a periodic snapshot task using the or use the replication wizard **Replicate Custom Snapshots** replication option. If scheduling a task, SCALE creates the periodic snapshot task when it runs the replication task according to the scheduled time. 2. Create the replication task. - Go to **Data Protection**, click **Add** on the **Replication Tasks** widget to open the **Replication Task Wizard** configuration screen. + Go to **Data Protection**, and click **Add** on the **Replication Tasks** widget to open the **Replication Task Wizard** configuration screen. Select both the **Source Location** and **Destination Location** using the dropdown list options. You can back up your data on the same system or a different system. If you select **A different system** you must have an SSH connection. Have your destination and source information ready. - Set the **Source** and **Destination** paths, either enter the full path to the data you want to back up or click on the caret to the left of **mnt** and at the pool and dataset levels to expand the options. Click on the dataset or directory to narrow backup down to that level. + Set the **Source** and **Destination** paths, either enter the full path to the data you want to back up or click on the caret to the left of **mnt** and at the pool and dataset levels to expand the options. Click on the dataset or directory to narrow the backup down to that level. The task name populates from the values in **Source** and **Destination**. From 5740cc21fcd1ba2e349e5dbff930d9bda078135b Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 09:58:53 -0400 Subject: [PATCH 07/18] Update AddCloudCredentials.md --- .../BackupCredentials/AddCloudCredentials.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md index 5fded3cd51..5cb75d6c97 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddCloudCredentials.md @@ -33,7 +33,7 @@ We recommend users open another browser tab to open and log into the cloud stora Some TrueNAS providers credentials require entering additional information generated while creating the provider account. For example, the Storj iX account produces an access and secret key that must be entered in the **Cloud Credential** screen to create the credential. -Have the authentication information required by your cloud storage provider on-hand to make the process easier. +Have the authentication information required by your cloud storage provider on hand to make the process easier. Authentication information can include but is not limited to user credentials, access tokens, and access and security keys. To add a cloud credential: @@ -44,7 +44,7 @@ To add a cloud credential: 2. Enter a name for the credential. -3. Enter the required authentication credentials, such as access token, access key and/or secret keys, user credentials for the account into the appropriate fields. +3. Enter the required authentication credentials, such as access token, access key and/or secret keys, and user credentials for the account into the appropriate fields. 3. Click **Verify Credentials** to test the entered credentials and verify they work. @@ -80,7 +80,7 @@ To add a cloud credential for Amazon S3, select **Amazon S3** in **Provider**, e 4. Enter or copy/paste the Amazon Web Services alphanumeric password that is between 8 and 40 characters into **Secret Access Key** 5. (Optional) Enter a value to define the maximum number of chunks for a multipart upload in **Maximum Upload Ports**. - Setting a maximum is necessary if a service does not support the 10,000 chunk AWS S3 specification. + Setting a maximum is necessary if a service does not support the 10,000-chunk AWS S3 specification. 6. (Optional) Select **Advanced Settings** to display the endpoint settings. @@ -92,7 +92,7 @@ To add a cloud credential for Amazon S3, select **Amazon S3** in **Provider**, e b. Enter an [AWS resources in a geographic area](https://docs.aws.amazon.com/general/latest/gr/rande-manage.html) in **Region**. To detect the correct public region for the selected bucket leave the field blank. - Entering a private region name allows interacting with Amazon buckets created in that region. + Entering a private region name allows interaction with Amazon buckets created in that region. c. (Optional) Configure a custom endpoint URL. @@ -108,17 +108,17 @@ To add a cloud credential for Amazon S3, select **Amazon S3** in **Provider**, e 8. Click **Save** ## Adding Cloud Credentials that Authenticate with OAuth -Cloud storage providers using OAuth as an authentication method are Box, Dropbox, Google Drive, Google Photo, pCloud and Yandex. -Some provider like Google Drive and pCloud use additional settings to authenticate credentials. +Cloud storage providers using OAuth as an authentication method are Box, Dropbox, Google Drive, Google Photos, pCloud, and Yandex. +Some providers like Google Drive and pCloud use additional settings to authenticate credentials. {{< include file="/static/includes/OAuthCloudCredentialSetupSCALE.md" >}} ## Adding BackBlaze B2 Cloud Credentials BackBlaze B2 uses an application key and key ID to authenticate credentials. -Open the **Cloud Credentials** screen, select **BackBlaze B2** im **Provider**, enter a name and then: +Open the **Cloud Credentials** screen, select **BackBlaze B2** in **Provider**, enter a name and then: -1. Log into the BackBlaze account, go to **App Keys** page and add a new application key. Copy and paste this into **Key ID**. +1. Log into the BackBlaze account, go to the **App Keys** page, and add a new application key. Copy and paste this into **Key ID**. 2. Generate a new application key on the BackBlaze B2 website. From the **App Keys** page, add a new application key. Copy the application Key string **Application Key**. @@ -128,14 +128,14 @@ Open the **Cloud Credentials** screen, select **BackBlaze B2** im **Provider**, 4. Click **Save**. ## Adding Google Cloud Storage Credentials -Google Cloud Storage uses a service account json file to authenticate credentials. +Google Cloud Storage uses a service account JSON file to authenticate credentials. Open the **Cloud Credentials** screen, select **Google Cloud Storage** in **Provider**, enter a name and then: 1. Go to your Google Cloud Storage website to download this file to the TrueNAS SCALE server. The [Google Cloud Platform Console](https://console.cloud.google.com/apis/credentials) creates the file. -2. Click **Choose File** to browse the server to locate the downloaded filejson file and upload. The file populates **Preview JSON Service Account Key** +2. Click **Choose File** to browse the server to locate the downloaded JSON file and upload it. The file populates **Preview JSON Service Account Key** For help uploading a Google Service Account credential file [click here](https://rclone.org/googlecloudstorage/#service-account-support). 3. Click **Verify Credentials**. @@ -144,7 +144,7 @@ Open the **Cloud Credentials** screen, select **Google Cloud Storage** in **Prov ## Adding OpenStack Swift Cloud Credentials OpenStack Swift authentication credentials change based on selections made in **AuthVersion**. -All options use the user name, API key or password and authentication URL, and can use the optional endpoint settings. +All options use the user name, API key or password, and authentication URL, and can use the optional endpoint settings. For more information on OpenStack Swift settings, see [rclone documentation](https://rclone.org/swift/#standard-options). Open the **Cloud Credentials** screen, select **OpenStack Swift Cloud** in **Provider**, enter a name for the credential and then: @@ -168,7 +168,7 @@ Open the **Cloud Credentials** screen, select **OpenStack Swift Cloud** in **Pro e. (Optional) Enter the URL in **Storage URL**. - f. (Required) Select service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. + f. (Required) Select the service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. {{< /expand >}} {{< expand "Set Auth(vx) to V3" "v" >}} If set to **v3** the **Advanced Options** settings displayed change. @@ -187,7 +187,7 @@ Open the **Cloud Credentials** screen, select **OpenStack Swift Cloud** in **Pro g. (Optional) Enter the URL in **Storage URL**. - h. (Required) Select service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. + h. (Required) Select the service catalog option from the **Endpoint Type** dropdown. Options are **Public**, **Internal** and **Admin**. **Public** is recommended. {{< /expand >}} 4. Click **Verify Credentials**. @@ -197,8 +197,8 @@ Open the **Cloud Credentials** screen, select **OpenStack Swift Cloud** in **Pro ## Using Automatic Authentication Some providers can automatically populate the required authentication strings by logging in to the account. -To automatically configure the credential, click **Login to Provider** and entering your account user name and password. +To automatically configure the credential, click **Login to Provider** and enter your account user name and password. ![AutomaticAuthenticationSCALE](/images/SCALE/Credentials/AutomaticAuthenticationSCALE.png "Cloud Automatic Authentication") -We recommend verifying the credential before saving it. \ No newline at end of file +We recommend verifying the credential before saving it. From ae91441bcd28d2b21e0a696c0668e173e0a0d975 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:05:32 -0400 Subject: [PATCH 08/18] Update AddSSHConnectionKeyPair.md --- .../BackupCredentials/AddSSHConnectionKeyPair.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md index 05ae958f64..38cac6eb70 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md @@ -31,7 +31,7 @@ Click **Add** on the **SSH Connections** widget. This procedure uses the semi-automatic setup method for creating an SSH connection with another TrueNAS system. {{< expand "Click here for more information" "v" >}} **Semi-automatic** simplifies setting up an SSH connection with another TrueNAS system without logging in to that system to transfer SSH keys. -This requires an SSH keypair on the local system and administrator account credentials for the remote TrueNAS. +This requires an SSH key pair on the local system and administrator account credentials for the remote TrueNAS. You must configure the remote system to allow root access with SSH. You can generate the keypair as part of the semiautomatic configuration or a manually created one using **SSH Keypairs**. @@ -52,7 +52,7 @@ Using the **SSH Connections** configuration screen: b. Enter an admin user name, which is the username on the remote system entered to log in via the web UI to set up the connection. Or, leave **Admin Username** set to the default **root** user and enter the user password in **Admin Password**. - c. If two-factor authentication is enabled, enter the one-time password in **One-Time Password (if neccessary)**. + c. If two-factor authentication is enabled, enter the one-time password in **One-Time Password (if necessary)**. d. Enter a **Username**, which is the user name on the remote system to log in via SSH. @@ -96,7 +96,7 @@ Using the **SSH Connections** configuration screen: d. Click **Discover Remote Host Key** after properly configuring all other fields to query the remote system and automatically populate the **Remote Host Key** field. -4. (Optional) Enter the number of seconds you want SCALE wait for the remote TrueNAS system to connect in **Connect Timeout**. +4. (Optional) Enter the number of seconds you want SCALE to wait for the remote TrueNAS system to connect in **Connect Timeout**. {{< trueimage src="/images/SCALE/Credentials/NewSSHConnectMoreOptions.png" alt="Manual More Options" id="Manual More Options" >}} @@ -112,9 +112,9 @@ This procedure covers adding a public SSH key to the admin account on the TrueNA {{< expand "Click here for more information" "v" >}} 1. Copy the SSH public key text or download it to a text file: - Log into the TrueNAS system that generated the SSH keypair and go to **Credentials > Backup Credentials**. + Log into the TrueNAS system that generated the SSH key pair and go to **Credentials > Backup Credentials**. - Click on the name of the keypair on the **SSH Keypairs** widget to open the keypair for the SSH connection. + Click on the name of the key pair on the **SSH Keypairs** widget to open the key pair for the SSH connection. Copy the text of the public SSH key or download the public key as a text file. @@ -155,7 +155,7 @@ TrueNAS does not support encrypted keypairs or keypairs with passphrases. TrueNAS automatically generates keypairs as needed when creating new **SSH Connections** or **Replication** tasks. -To manually create a new keypair: +To manually create a new key pair: 1. Click **Add** on the **SSH Keypairs** widget. 2. Click **Generate New** on the **SSH Keypairs** screen. 3. Give the new keypair a unique name and click **Save**. From 5480494be7277de70330cf20679f2b89eee21a93 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:07:08 -0400 Subject: [PATCH 09/18] Update TrueCloudTasks.md --- .../SCALETutorials/DataProtection/TrueCloudTasks.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md b/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md index 2d57494fdd..611bff7077 100644 --- a/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md +++ b/content/SCALE/SCALETutorials/DataProtection/TrueCloudTasks.md @@ -1,6 +1,6 @@ --- title: "Managing TrueCloud Backup Tasks" -description: "Provides instructions on setting up a TrueCloud backup task and configuring an Storj iX account to work with TrueNAS." +description: "Provides instructions on setting up a TrueCloud backup task and configuring a Storj iX account to work with TrueNAS." weight: 5 tags: - TrueCloud @@ -19,7 +19,7 @@ TrueNAS can send, receive, or synchronize data with the cloud storage providers TrueCloud backup tasks allow for single-time transfers or recurring transfers on a schedule. They are an effective method to back up data to a remote location. -This article provides instructions on configuring a TrueCloud backup task using Storj, and covers setting up both the Storj iX account and SCALE credential. +This article provides instructions on configuring a TrueCloud backup task using Storj and covers setting up both the Storj iX account and SCALE credential. *TrueCloud backup tasks streamline functionality for Storj iX cloud backups and restoration. @@ -41,7 +41,7 @@ To create a TrueCloud Backup task for a TrueCloud transfer: 1. Create the SCALE [Storj cloud credential](#adding-storj-cloud-credentials). - Adding the Storj cloud credential in SCALE includes following the link to create the Storj iX account, a new bucket, and obtain the S3 authentication credentials needed to complete the process in SCALE. + Adding the Storj cloud credential in SCALE includes following the link to create the Storj iX account, creating a new bucket, and obtaining the S3 authentication credentials needed to complete the process in SCALE. 2. Create the [TrueCloud Backup task](#setting-up-the-truecloud-backup-task) for one bucket. @@ -88,7 +88,7 @@ To add the TrueCloud backup task, go to **Data Protection > TrueCloud Backup Tas 7. Enter a password for the backup repository. Record this password in a secure location. - It is needed to recreate the task using the same bucket/folder, such as in a new TrueNAS install or system, or to restore data from the existing snapshots in another TrueNAS system. + You need the password to recreate the task using the same bucket/folder, such as in a new TrueNAS install or system, or to restore data from the existing snapshots in another TrueNAS system. 8. Set the task schedule for when to run this task. @@ -151,4 +151,4 @@ A **Delete Snapshot** dialog opens. {{< trueimage src="/images/SCALE/DataProtection/TrueCloudDeleteSnapshot.png" alt="Delete Snapshot" id="Delete Snapshot" >}} -Click **Confirm** and then **Delete** to start the job. \ No newline at end of file +Click **Confirm** and then **Delete** to start the job. From 169a137f9606ac78ccd19e170c79a1e6c86ea59a Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:08:34 -0400 Subject: [PATCH 10/18] Update SSHCredentialScreens.md --- .../BackupCredentials/SSHCredentialScreens.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md index 5cd8518849..3501854190 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md @@ -50,10 +50,10 @@ These authentication settings show when **Setup Method** is **Semi-automatic (Tr | Name | Description | |------|-------------| | **TrueNAS URL** | (Required) Enter the host name or IP address of the remote system. Use a valid URL scheme for the remote TrueNAS URL. IP address example of *https://10.231.3.76*. | -| **Admin Username** | Enter the user name for logging into the remote system. Default is set to **root** but change this to the name of the system administrator for the remote system for this connection. | +| **Admin Username** | Enter the user name for logging into the remote system. The default is set to **root** but change this to the name of the system administrator for the remote system for this connection. | | **Admin Password** | (Required) Enter the administrator user account password for logging into the remote system. | | **One-Time Password (if necessary)** | One-time password if two-factor authentication is enabled. | -| **Username** | (Required) Username on the remote system used to login via SSH. | +| **Username** | (Required) Username on the remote system used to log in via SSH. | | **Private Key** | (Required) Select a saved SSH keypair, import the private key from a previously created SSH keypair, or select **Generate New** to create a new keypair to use for the connection to this remote system. | {{< /truetable >}} @@ -81,14 +81,14 @@ A manual setup allows a secure connection without a password prompt. {{< truetable >}} | Name | Description | |------|-------------| -| **Connect Timeout** | Enter time (in seconds) before the system stops attempting to establish a connection with the remote system. | +| **Connect Timeout** | Enter the time (in seconds) before the system stops attempting to establish a connection with the remote system. | {{< /truetable >}} **Save** automatically opens a connection to the remote TrueNAS and exchanges SSH keys. ### SSH Keypairs Widget -The **SSH Keypairs** widget on the **Backup Credentials** screen lists SSH keypairs added to the TrueNAS SCALE system. +The **SSH Keypairs** widget on the **Backup Credentials** screen lists SSH key pairs added to the TrueNAS SCALE system. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsSSHKeypairsWidget.png" alt="SSH Keypairs Widgit" id="SSH Keypairs Widgit" >}} @@ -96,21 +96,21 @@ The name of the keypair listed on the widget is a link that opens the **[SSH Key The download icon, and the more_vert at the bottom of the **SSH Keypairs** configuration screen, download the public and private key strings as text files for later use. -The delete delete icon opens the a delete dialog. Click **Confirm** and then **Delete** to remove the stored keypairs from the system. +The delete delete icon opens the delete dialog. Click **Confirm** and then **Delete** to remove the stored keypairs from the system. #### SSH Keypairs Screen -The **SSH Keypairs** configuration screen displays the same settings for both add and edit options. Click **Add** to open a new configuration form, or click on an existing keypair to open the configuration screen populated with the settings for the selected keypair. +The **SSH Keypairs** configuration screen displays the same settings for both add and edit options. Click **Add** to open a new configuration form, or click on an existing keypair to open the configuration screen populated with the settings for the selected key pair. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsSSHKeypairsAdd.png" alt="SSH Keypairs Settings" id="SSH Keypairs Settings" >}} {{< truetable >}} | Name | Description | |------|-------------| -| **Name** | Required. Enter a unique name for this SSH keypair. Automatically generated keypairs are named after the object that generated the keypair with **key** appended to the name. | -|**Generate Keypair** | Click to have TrueNAS SCALE automatically generate a new keypair and populate the **Private Key** and **Public Keys** fields with these values. | +| **Name** | Required. Enter a unique name for this SSH key pair. Automatically generated key pairs are named after the object that generated the keypair with **key** appended to the name. | +|**Generate Keypair** | Click to have TrueNAS SCALE automatically generate a new key pair and populate the **Private Key** and **Public Keys** fields with these values. | | **Private Key** | See **Authentication** in [SSH/Authentication](https://man7.org/linux/man-pages/man1/ssh.1.html). | | **Public Key** | See **Authentication** in [SSH/Authentication](https://man7.org/linux/man-pages/man1/ssh.1.html) | {{< /truetable >}} -**Save** adds the keypair to the widget and activates the with options to **Download Private Key** and **Download Public key**. +**Save** adds the key pair to the widget and activates the with options to **Download Private Key** and **Download Public key**. From 29e3e08949cfd0f40d3bc7efeec7c2046739c369 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:08:53 -0400 Subject: [PATCH 11/18] Update _index.md --- .../SCALEUIReference/Credentials/BackupCredentials/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md index 73293a2330..7c4c0af9a6 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md @@ -15,7 +15,7 @@ Users can set up backup credentials with cloud and SSH clients to back up data i {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} -The **Backup Credentials** screen displays the **Cloud Credentials**, **SSH Connections** and **SSH Keypairs** widgets. +The **Backup Credentials** screen displays the **Cloud Credentials**, **SSH Connections**, and **SSH Keypairs** widgets. Click **Add** on the widget for the type of credential to add to open that configuration screen. From 381e4b21110ff0ffb859f0e3dc8758ceffde243f Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:13:12 -0400 Subject: [PATCH 12/18] Update TrueCloudBackupTasksScreen.md --- .../TrueCloudBackupTasksScreen.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md b/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md index fd8c6751f2..545e7be13d 100644 --- a/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md +++ b/content/SCALE/SCALEUIReference/DataProtection/TrueCloudBackupTasksScreen.md @@ -12,9 +12,9 @@ keywords: - data backup and recovery --- -The **TrueCloud Backup Tasks** widget on the **Data Protection** screen shows configured TrueCloud tasks, and provides access to configuration screens to add or scheduled recurring transfers between TrueNAS SCALE and a cloud storage provider account like Storj iX. +The **TrueCloud Backup Tasks** widget on the **Data Protection** screen shows configured TrueCloud tasks, and provides access to configuration screens to add or schedule recurring transfers between TrueNAS SCALE and a cloud storage provider account like Storj iX. -TrueCloud backup tasks are an effective method to back up data to a remote location, restore snapshots, or to perform cloud-storage-migration. +TrueCloud backup tasks are an effective method to back up data to a remote location, restore snapshots, or perform cloud-storage-migration. ## TrueCloud Backup Tasks Widget The **TrueCloud Backup Tasks** widget shows a list of tasks configured on the system. @@ -33,7 +33,7 @@ Each task on the widget shows four icons for various functions: * **Run Now** starts and runs the backup task outside of the scheduled time. -* ** View Details** opens the [**TrueCloud Backup Tasks**](#truecloud-backup-tasks-screen) screen that lists backup tasks configured on the system. Click on a tasks to see details for the selected task. +* ** View Details** opens the [**TrueCloud Backup Tasks**](#truecloud-backup-tasks-screen) screen that lists backup tasks configured on the system. Click on a task to see details for the selected task. * delete **Delete** opens a confirmation dialog before the system deletes the task. @@ -91,8 +91,8 @@ Additional settings show depending on the **Include/Exclude** selection. {{< truetable >}} | Settings | Description | |----------|-------------| -| **Include Everything** | Select to restore all backed up data from the remote snapshot to the selected local path. | -| **Include from subfolder** | Select to restore data from a subfolder within the backed up data. | +| **Include Everything** | Select to restore all backed-up data from the remote snapshot to the selected local path. | +| **Include from subfolder** | Select to restore data from a subfolder within the backed-up data. | | **Subfolder** | Shows when **Include from subfolder** is selected. Enter or browse to the subfolder within the snapshot to restore data from. | | **Included Paths** | Shows when **Include from subfolder** is selected. Select files and directories to include from the backup. Leave empty to include everything in the selected subfolder. | | **Select paths to exclude** | Select to exclude only certain paths from the data to restore. | @@ -129,7 +129,7 @@ The **Advanced** and **Advanced Remote Options** are for use by advanced users. {{< truetable >}} | Settings | Description | |----------|-------------| -| **Source Path** | Enter or browse to the path of the dataset or directory with the data to send to the cloud backup provider used in the task. Click the arrow_right arrow to the left of **/mnt** folder to expand and show datasets and directories within that folder. This is the dataset or directory location with the data the TrueCloud backup task sends to the cloud storage provider. Click the arrow_right arrow to the left of **/mnt** folder again to collapse the directory tree. | +| **Source Path** | Enter or browse to the path of the dataset or directory with the data to send to the cloud backup provider used in the task. Click the arrow_right arrow to the left of the **/mnt** folder to expand and show datasets and directories within that folder. This is the dataset or directory location with the data the TrueCloud backup task sends to the cloud storage provider. Click the arrow_right arrow to the left of the **/mnt** folder again to collapse the directory tree. | {{< /truetable >}} ### Remote Settings @@ -138,9 +138,9 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< truetable >}} | Settings | Description | |----------|-------------| -| **Credential** | Select an exiting cloud storage provider credential, such as Storj iX from the dropdown list (default option). TrueNAS automatically validates the selected credential.
    Select **Add New** to open the [**Cloud Credentials**]({{< relref "CloudCredentialScreens.md" >}}) screen. This is same configuration screen opens when you click **Add** on the **Credentials > Backup Credentials** screen. | +| **Credential** | Select an existing cloud storage provider credential, such as Storj iX from the dropdown list (default option). TrueNAS automatically validates the selected credential.
    Select **Add New** to open the [**Cloud Credentials**]({{< relref "CloudCredentialScreens.md" >}}) screen. This is the same configuration screen that opens when you click **Add** on the **Credentials > Backup Credentials** screen. | | **Bucket** | Shows after selecting a cloud provider that uses buckets in the **Credential** field. Select a pre-defined bucket configured in the provider web UI. For example, Amazon S3 and Storj use buckets. | -| **Folder** | Enter or browse to the dataset or directory to receive the backed up data. Click the arrow_right arrow to the left of the folder icon and at each dataset or directory to reach the storage location to use for this task.
    Enter /name, where *name* is a folder that does not exist, to create a new folder in the bucket. | +| **Folder** | Enter or browse to the dataset or directory to receive the backed-up data. Click the arrow_right arrow to the left of the folder icon and at each dataset or directory to reach the storage location to use for this task.
    Enter /name, where *name* is a folder that does not exist, to create a new folder in the bucket. | {{< /truetable >}} ### Task Settings @@ -188,6 +188,6 @@ The **Remote** settings specify the TrueCloud credential and destination storage {{< truetable >}} | Settings | Description | |----------|-------------| -| **Transfers** | Enter the number of simultaneous file transfers to allow. Base thenumber on the available bandwidth and destination system performance. See [rclone --transfers](https://rclone.org/docs/#transfers-n). | +| **Transfers** | Enter the number of simultaneous file transfers to allow. Base the number on the available bandwidth and destination system performance. See [rclone --transfers](https://rclone.org/docs/#transfers-n). | | **Bandwidth limit** | Enter a single bandwidth limit or bandwidth limit schedule in rclone format. Separate entries by pressing . Example: *08:00,512 12:00,10MB 13:00,512 18:00,30MB 23:00,off*. You can specify units with the beginning letter **b**, **k** (default), **M**, or **G**. See [rclone --bwlimit](https://rclone.org/docs/#bwlimit-bandwidth-spec). | -{{< /truetable >}} \ No newline at end of file +{{< /truetable >}} From 6e402016c88efa0b27cfb21e5f4d397876f06372 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:15:36 -0400 Subject: [PATCH 13/18] Update OAuthCloudCredentialSetupSCALE.md --- static/includes/OAuthCloudCredentialSetupSCALE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/static/includes/OAuthCloudCredentialSetupSCALE.md b/static/includes/OAuthCloudCredentialSetupSCALE.md index 5e72534c1d..2c734b1bae 100644 --- a/static/includes/OAuthCloudCredentialSetupSCALE.md +++ b/static/includes/OAuthCloudCredentialSetupSCALE.md @@ -1,10 +1,10 @@ -Open the **Cloud Credentials** screen, select the name of the cloud storage provider on the **Provider** dropdown list, enter a name for the credential and then: +Open the **Cloud Credentials** screen, select the name of the cloud storage provider on the **Provider** dropdown list, enter a name for the credential, and then: 1. Enter the provider account email in **OAuth Client ID** and the password for that user account in **OAuth Client Secret**. -2. Click **Log In To Provider**. The **Authentication** window opens. Click **Proceed** to open the OAuth credential account sign in window. +2. Click **Log In To Provider**. The **Authentication** window opens. Click **Proceed** to open the OAuth credential account sign-in window. Yandex displays a cookies message you must accept before you can enter credentials. @@ -19,7 +19,7 @@ Open the **Cloud Credentials** screen, select the name of the cloud storage prov {{< truetable >}} | Provider | Access Token | |----------|--------------| - | Box | For more information the user access token for Box [click here](https://developer.box.com/). An [access token](https://developer.box.com/reference/) enables Box to verify a request belongs to an authorized session. Example token: T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl. | + | Box | For more information on the user access token for Box [click here](https://developer.box.com/). An [access token](https://developer.box.com/reference/) enables Box to verify a request belongs to an authorized session. Example token: T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl. | | Dropbox | Create an access [token](https://dropbox.tech/developers/generate-an-access-token-for-your-own-account) from the [Dropbox account](https://www.dropbox.com/). | | Google Drive | The authentication process creates the token for [Google Drive](https://developers.google.com/drive/api/v3/about-auth) and populates the **Access Token** field automatically. Access tokens expire periodically, so you must refresh them. | | Google Photo | Does not use an access token. | @@ -29,4 +29,4 @@ Open the **Cloud Credentials** screen, select the name of the cloud storage prov 5. Click **Verify Credentials** to make sure you can connect with the entered credentials. -6. Click **Save**. \ No newline at end of file +6. Click **Save**. From 76372c9642116f5944a56f92c1ebbdfccf298710 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:19:59 -0400 Subject: [PATCH 14/18] Update AddSSHConnectionKeyPair.md --- .../Credentials/BackupCredentials/AddSSHConnectionKeyPair.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md index 38cac6eb70..4eccd23766 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md @@ -11,6 +11,7 @@ keywords: - enterprise data storage - nas data storage - cloud backup and recovery +- key pair --- The **SSH Connections** and **SSH Keypairs** widgets on the **Backup Credentials** screen display a list of SSH connections and keypairs configured on the system. From 4692816f2c555bbf8363957e48bbc36175b7a47b Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:21:42 -0400 Subject: [PATCH 15/18] Update SSHCredentialScreens.md --- .../BackupCredentials/SSHCredentialScreens.md | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md index 3501854190..4412c469ad 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/SSHCredentialScreens.md @@ -8,6 +8,8 @@ alias: tags: - ssh - credentials + - key pair + - key pairs --- The **Backup Credentials** screen displays the **SSH Connections** and **SSH Keypairs** widgets. @@ -16,12 +18,12 @@ You must also configure and activate the [SSH Service]({{< relref "sshservicescr ## SSH Connection and Keypairs Widgets -The **SSH Connections** and **SSH Keypairs** widgets display a list of SSH connections and keypairs configured on the system. +The **SSH Connections** and **SSH Keypairs** widgets display a list of SSH connections and key pairs configured on the system. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}} The **SSH Connections** widget allows users to establish Secure Socket Shell (SSH) connections. -The **SSH Keypairs** widget allows users to generate SSH keypairs required to authenticate the identity of a user or process that wants to access the system using SSH protocol. +The **SSH Keypairs** widget allows users to generate SSH key pairs required to authenticate the identity of a user or process that wants to access the system using SSH protocol. **Add** in the **SSH Connections** widget opens the **[SSH Connections](#ssh-connections-screens)** configuration window. The connection name on the widget is a link that opens the **SSH Connections** configuration screen already populated with the saved settings for the selected connection. @@ -38,7 +40,7 @@ The settings on the **SSH Connections** configuration screens are the same wheth | Name | Description | |------|-------------| | **Name** | (Required) Enter a unique name for this SSH connection. For example, use *ssh* and a server name or number like *sshsys1* or *sshtn121* where *sys1* or *tn121* are server designations. | -| **Setup Method** | Select the setup method to use from the dropdown list of options. Options are:
  • **Semi-automatic (TrueNAS only)** - Select to simplify setting up an SSH connection with another TrueNAS or FreeNAS system without logging into that system to transfer SSH keys. Default is set to **Semi-automatic (TrueNAS only)**.
  • **Manual** - Select to enter all settings when setting up an SSH connection with a non-TrueNAS server. Displays other setting options required to [manually configure an SSH connection](#authentication-settings---manual-method). Requires copying a public encryption key from the local system to the remote system. A manual setup allows a secure connection without a password prompt.
  • | +| **Setup Method** | Select the setup method to use from the dropdown list of options. Options are:
  • **Semi-automatic (TrueNAS only)** - Select to simplify setting up an SSH connection with another TrueNAS or FreeNAS system without logging into that system to transfer SSH keys. The default is set to **Semi-automatic (TrueNAS only)**.
  • **Manual** - Select to enter all settings when setting up an SSH connection with a non-TrueNAS server. Displays other setting options required to [manually configure an SSH connection](#authentication-settings---manual-method). Requires copying a public encryption key from the local system to the remote system. A manual setup allows a secure connection without a password prompt.
  • | {{< /truetable >}} #### Authentication - Semi-Automatic Method Settings @@ -54,7 +56,7 @@ These authentication settings show when **Setup Method** is **Semi-automatic (Tr | **Admin Password** | (Required) Enter the administrator user account password for logging into the remote system. | | **One-Time Password (if necessary)** | One-time password if two-factor authentication is enabled. | | **Username** | (Required) Username on the remote system used to log in via SSH. | -| **Private Key** | (Required) Select a saved SSH keypair, import the private key from a previously created SSH keypair, or select **Generate New** to create a new keypair to use for the connection to this remote system. | +| **Private Key** | (Required) Select a saved SSH key pair, import the private key from a previously created SSH key pair, or select **Generate New** to create a new key pair to use for the connection to this remote system. | {{< /truetable >}} #### Authentication - Manual Method Settings @@ -69,7 +71,7 @@ A manual setup allows a secure connection without a password prompt. | **Host** | (Required) Enter the host name or IP address of the remote system. A valid URL scheme is required. An IP address example is *https://10.231.3.76*. | | **Port** | (Required) Enter the port number on the remote system to use for the SSH connection. | | **Username** | (Required) Enter the user name for logging into the remote system. | -| **Private Key** | (Required) Select a saved SSH keypair or select **Generate New** to create a new keypair to use for the connection to this remote system. | +| **Private Key** | (Required) Select a saved SSH key pair or select **Generate New** to create a new key pair to use for the connection to this remote system. | | **Remote Host Key** | Enter the remote system SSH key for this system to authenticate the connection. Click **Discover Remote Host Key** after properly configuring all other fields to query the remote system and automatically populate this field. | | **Discover Remote Host Key** | Click to connect to the remote system and attempt to copy the key string to the related TrueNAS field. | {{< /truetable >}} @@ -92,22 +94,22 @@ The **SSH Keypairs** widget on the **Backup Credentials** screen lists SSH key p {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsSSHKeypairsWidget.png" alt="SSH Keypairs Widgit" id="SSH Keypairs Widgit" >}} -The name of the keypair listed on the widget is a link that opens the **[SSH Keypairs](#ssh-keypairs-screen)** configuration screen. +The name of the key pair listed on the widget is a link that opens the **[SSH Keypairs](#ssh-keypairs-screen)** configuration screen. The download icon, and the more_vert at the bottom of the **SSH Keypairs** configuration screen, download the public and private key strings as text files for later use. -The delete delete icon opens the delete dialog. Click **Confirm** and then **Delete** to remove the stored keypairs from the system. +The delete delete icon opens the delete dialog. Click **Confirm** and then **Delete** to remove the stored key pairs from the system. #### SSH Keypairs Screen -The **SSH Keypairs** configuration screen displays the same settings for both add and edit options. Click **Add** to open a new configuration form, or click on an existing keypair to open the configuration screen populated with the settings for the selected key pair. +The **SSH Keypairs** configuration screen displays the same settings for both add and edit options. Click **Add** to open a new configuration form, or click on an existing key pair to open the configuration screen populated with the settings for the selected key pair. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsSSHKeypairsAdd.png" alt="SSH Keypairs Settings" id="SSH Keypairs Settings" >}} {{< truetable >}} | Name | Description | |------|-------------| -| **Name** | Required. Enter a unique name for this SSH key pair. Automatically generated key pairs are named after the object that generated the keypair with **key** appended to the name. | +| **Name** | Required. Enter a unique name for this SSH key pair. Automatically generated key pairs are named after the object that generated the key pair with **key** appended to the name. | |**Generate Keypair** | Click to have TrueNAS SCALE automatically generate a new key pair and populate the **Private Key** and **Public Keys** fields with these values. | | **Private Key** | See **Authentication** in [SSH/Authentication](https://man7.org/linux/man-pages/man1/ssh.1.html). | | **Public Key** | See **Authentication** in [SSH/Authentication](https://man7.org/linux/man-pages/man1/ssh.1.html) | From 6f2a0e061df71cdee9dc3596bd21ea73551648f8 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:22:58 -0400 Subject: [PATCH 16/18] Update AddSSHConnectionKeyPair.md --- .../BackupCredentials/AddSSHConnectionKeyPair.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md index 4eccd23766..1eea517bd6 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md @@ -1,6 +1,6 @@ --- title: "Adding SSH Credentials" -description: "Provides information on adding SSH connections, generating SSH keypairs, and adding the SSH public key to the root user." +description: "Provides information on adding SSH connections, generating SSH key pairs, and adding the SSH public key to the root user." weight: 20 alias: tags: @@ -12,9 +12,10 @@ keywords: - nas data storage - cloud backup and recovery - key pair +- key pairs --- -The **SSH Connections** and **SSH Keypairs** widgets on the **Backup Credentials** screen display a list of SSH connections and keypairs configured on the system. +The **SSH Connections** and **SSH Keypairs** widgets on the **Backup Credentials** screen display a list of SSH connections and key pairs configured on the system. Using these widgets, users can establish Secure Socket Shell (SSH) connections. You must also configure and activate the [SSH Service]({{< relref "sshservicescale.md" >}}) to allow SSH access. @@ -150,16 +151,16 @@ If the remote NAS is not a TrueNAS system, refer to the documentation for that s ## Generating SSH Keypairs -TrueNAS generates and stores [RSA-encrypted](https://tools.ietf.org/html/rfc8017) SSH public and private keypairs on the **SSH Keypairs** widget found on the **Credentials > Backup Credentials** screen. +TrueNAS generates and stores [RSA-encrypted](https://tools.ietf.org/html/rfc8017) SSH public and private key pairs on the **SSH Keypairs** widget found on the **Credentials > Backup Credentials** screen. Keypairs are generally used when configuring **SSH Connections** or SFTP **Cloud Credentials**. -TrueNAS does not support encrypted keypairs or keypairs with passphrases. +TrueNAS does not support encrypted key pairs or key pairs with passphrases. -TrueNAS automatically generates keypairs as needed when creating new **SSH Connections** or **Replication** tasks. +TrueNAS automatically generates key pairs as needed when creating new **SSH Connections** or **Replication** tasks. To manually create a new key pair: 1. Click **Add** on the **SSH Keypairs** widget. 2. Click **Generate New** on the **SSH Keypairs** screen. -3. Give the new keypair a unique name and click **Save**. +3. Give the new key pair a unique name and click **Save**. The keypair displays on the **SSH Keypairs** widget. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsSSHKeypairsAdd.png" alt="SSH Keypairs Form" id="SSH Keypairs Form" >}} From 7a795d372acdbeccdc4d3ebbd38990fc5edfb02a Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:24:21 -0400 Subject: [PATCH 17/18] Update AddSSHConnectionKeyPair.md --- .../BackupCredentials/AddSSHConnectionKeyPair.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md index 1eea517bd6..aa4f4addd5 100644 --- a/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md +++ b/content/SCALE/SCALETutorials/Credentials/BackupCredentials/AddSSHConnectionKeyPair.md @@ -35,7 +35,7 @@ This procedure uses the semi-automatic setup method for creating an SSH connecti **Semi-automatic** simplifies setting up an SSH connection with another TrueNAS system without logging in to that system to transfer SSH keys. This requires an SSH key pair on the local system and administrator account credentials for the remote TrueNAS. You must configure the remote system to allow root access with SSH. -You can generate the keypair as part of the semiautomatic configuration or a manually created one using **SSH Keypairs**. +You can generate the key pair as part of the semiautomatic configuration or a manually created one using **SSH Keypairs**. Using the **SSH Connections** configuration screen: @@ -58,7 +58,7 @@ Using the **SSH Connections** configuration screen: d. Enter a **Username**, which is the user name on the remote system to log in via SSH. - e. Enter or import the private key from a previously created SSH keypair, or create a new one using the **SSH Keypair** widget. + e. Enter or import the private key from a previously created SSH key pair, or create a new one using the **SSH Keypair** widget. 4. (Optional) Enter the number of seconds you want to have SCALE wait for the remote TrueNAS system to connect in **Connect Timeout**. @@ -94,7 +94,7 @@ Using the **SSH Connections** configuration screen: c. Enter a user name for logging into the remote system in **Username**. - c. Select the private key from the SSH keypair that you use to transfer the public key on the remote NAS from the **Private Key** dropdown. + c. Select the private key from the SSH key pair that you use to transfer the public key on the remote NAS from the **Private Key** dropdown. d. Click **Discover Remote Host Key** after properly configuring all other fields to query the remote system and automatically populate the **Remote Host Key** field. @@ -139,7 +139,7 @@ This procedure covers adding a public SSH key to the admin account on the TrueNA 3. Click **Save**. -If you need to generate a new SSH keypair: +If you need to generate a new SSH key pair: 1. Go to **Credentials > Backup Credentials**. 2. Click **Add** on the **SSH Keypairs** widget and select **Generate New**. @@ -152,7 +152,7 @@ If the remote NAS is not a TrueNAS system, refer to the documentation for that s ## Generating SSH Keypairs TrueNAS generates and stores [RSA-encrypted](https://tools.ietf.org/html/rfc8017) SSH public and private key pairs on the **SSH Keypairs** widget found on the **Credentials > Backup Credentials** screen. -Keypairs are generally used when configuring **SSH Connections** or SFTP **Cloud Credentials**. +Key pairs are generally used when configuring **SSH Connections** or SFTP **Cloud Credentials**. TrueNAS does not support encrypted key pairs or key pairs with passphrases. TrueNAS automatically generates key pairs as needed when creating new **SSH Connections** or **Replication** tasks. @@ -161,7 +161,7 @@ To manually create a new key pair: 1. Click **Add** on the **SSH Keypairs** widget. 2. Click **Generate New** on the **SSH Keypairs** screen. 3. Give the new key pair a unique name and click **Save**. - The keypair displays on the **SSH Keypairs** widget. + The key pair displays on the **SSH Keypairs** widget. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsSSHKeypairsAdd.png" alt="SSH Keypairs Form" id="SSH Keypairs Form" >}} From 9ea79bace09c9e354541790681765e92b5e0e998 Mon Sep 17 00:00:00 2001 From: tonyriv3 <75626853+tonyriv3@users.noreply.github.com> Date: Fri, 23 Aug 2024 10:25:46 -0400 Subject: [PATCH 18/18] Update _index.md --- .../SCALEUIReference/Credentials/BackupCredentials/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md index 7c4c0af9a6..ca52270d7a 100644 --- a/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md +++ b/content/SCALE/SCALEUIReference/Credentials/BackupCredentials/_index.md @@ -10,7 +10,7 @@ tags: related: false --- -TrueNAS stores cloud backup services credentials, SSH connections, and SSH keypairs configured using the widgets on the **Backup Credentials** screen. +TrueNAS stores cloud backup services credentials, SSH connections, and SSH key pairs configured using the widgets on the **Backup Credentials** screen. Users can set up backup credentials with cloud and SSH clients to back up data in case of drive failure. {{< trueimage src="/images/SCALE/Credentials/BackupCredentialsScreen.png" alt="Backup Credentials Screen" id="Backup Credentials Screen" >}}