Release Notes
1.1.0
Added
- Added support for configurable delimiters, including custom values with validation.
- Added support for remove quotes from the CSV file.
Changed
- Updated loggers and tooltips.
1.0.1
Fixed
- Fixed plugin validation with respect to CSV path.
- Fixed Sanity Step level validation.
1.0.0
Added
- Initial release.
This document explains how to configure the Linux File Share EDM plugin v1.1.0 with the Exact Data Match plugin of the Netskope Cloud Exchange platform. Use this integration to pull CSV files from a Linux server and generate Exact Data Match (EDM) hashes according to the defined plugin configurations.
Prerequisites
To complete the configuration, you need:
- A Netskope tenant (or multiple, for example, production and development/test instances).
- A Netskope Cloud Exchange tenant with the Tenant plugin and Exact Data Match plugin already configured.
- A Linux server with the SSH service enabled to pull the CSV file.
Linux File Share EDM Plugin Support
This plugin fetches CSV files from a Linux server via SFTP protocol and generates Exact Data Match (EDM) hashes according to the defined plugin configurations. The plugin supports advanced data sanitization, normalization, and hash generation capabilities to ensure data quality and security compliance.
| Feature | Support |
|---|---|
| Pull | Yes |
| Push | No |
Linux Server Permissions
| Permission Type | Requirement |
|---|---|
| SSH Access | Required |
| File Read Permissions | Required |
| SFTP Protocol | Required |
Required Permissions
These permissions are needed for the plugin configuration:
- SSH user must have read permissions for the specified CSV file.
- Network connectivity to the Linux server on the configured port (default: 22).
- Sufficient disk space on Cloud Exchange for temporary file processing.
API Details
List of Libraries Used
This plugin uses Python libraries to establish secure connections to Linux servers and transfer CSV files via SFTP protocol.
Library: Paramiko – SSH2 protocol library for Python
Usage: Paramiko is a pure-Python implementation of the SSHv2 protocol, providing both client and server functionality. The plugin uses Paramiko to create secure SFTP connections, authenticate with the Linux server, and transfer CSV files securely. Paramiko provides comprehensive SSH functionality including authentication, channel management, and file transfer capabilities.
Create SSH Client Connection
import paramiko
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_client.connect(
hostname=self.server_ip,
port=self.port,
username=self.username,
password=self.password,
timeout=30)
Create an SFTP Client
sftp_client = ssh_client.open_sftp()
Download a CSV File from a Linux Server
sftp_client.get(
remotepath=self.csv_file_path,
localpath=local_file_path
)
Check File Existence and Permissions
try:
file_stat = sftp_client.stat(self.csv_file_path)
file_size = file_stat.st_size
file_permissions = file_stat.st_mode
except FileNotFoundError:
# Handle file not found error pass
Close Connections
sftp_client.close()
ssh_client.close()
Performance Matrix
Here is the performance reading conducted for fetching and sanitizing ~1M Rows (25 columns, per column ~50 characters long string, 1.3 GB size, Avg Column Uniqueness: ~96%, Avg Row Uniqueness: ~96%) CSV file on a Large CE instance with these specifications:
| Description | Specification |
|---|---|
| Stack details | Size: Large RAM: 32 GB CPU: 16 Cores |
| CSV data fetched from Linux File Share Without Sanitization | ~7.5K rows/sec |
Workflow
- Get your Linux server credentials and file paths
- Configure the Linux File Share EDM Plugin
- Configure sharing between Linux File Share EDM Plugin and Tenant
- Validate the Linux File Share EDM Plugin
Watch a Video
Click play to watch a video.
Get Your SFTP Shared File Path from Linux Server
-
Most SFTP setups are controlled via the SSH config file:
sudo vi /etc/ssh/sshd_config
-
Look for entries like:
Subsystem sftp internal-sftp
and especially:
Match User <username> ChrootDirectory /path/to/sftp/root ForceCommand internal-sftp -
The value of
ChrootDirectoryis the SFTP root (shared path) for that user. -
If no
ChrootDirectoryis set, then SFTP typically defaults to the user’s home directory:echo $HOME
OR
grep <username> /etc/passwd
-
Example output:
testuser:x:1001:1001::/home/testuser:/bin/bash
-
Here, /home/testuser is the SFTP accessible path.
Configure the Linux File Share EDM Plugin
-
In Cloud Exchange, go to Settings > Plugin Store.
-
Search for and select the Linux File Share v1.1.0 (EDM) plugin.

-
Enter the Basic Information:
- Configuration Name: Enter a name appropriate for your integration.
The configuration name you provide will be used to give the name to the generated hash file to share with the Netskope Tenant. Be aware that if you later delete this configuration and create a new one with the same name, the hash file may already exist in the Netskope Tenant. In such cases, attempting to push the hash file to the tenant will result in an error, as the file with the same name already exists. Consider using a unique name to avoid this issue.- Sync Interval: Adjust Sync Interval as per your requirement. (Default: 12 hours)

-
Click Next and enter the Configuration Parameters:
- Server IP/Hostname: IP address/Hostname of the Linux server.
- Username: Username of the Linux Machine.
- Password: Password for the provided username.
- Port: Port number to connect to the SSH service on the Linux machine.
- CSV File Path: Path of the CSV file to be pulled from the server.
- Delimiter: Single character delimiter used in the CSV/TXT file (e.g. comma, pipe, semicolon).
- Remove Quotes: Mark as checked if your CSV encloses fields in double quotes, especially when values contain commas. Quoted fields will be parsed as single columns. Improper quote placement may cause rows to be skipped.
By default, quotes are treated as literal text. Enable Remove Quotes toggle if your CSV uses double quotes to encapsulate fields that contain commas (like"123 ABC Street, Suite 100"). This ensures the field is treated as a single column. Note that this mode requires strict CSV formatting. If a field starts with a quote, any character, including a space, following the closing quote but preceding the comma (like"Word",) will cause the row to be skipped. -
Click Next and enter the Hash Generation and Sanitization Parameters:
- Select the appropriate options for sanitization and hash generation operations:
- Sanitization (Name Column): Sanitize the content by checking the Name Column checkbox. (Default: Unchecked). The Sanitization Process performs the following actions:
- One character: The cell will be marked as invalid if it contains only one character.
- Digits: Cells containing digits will be marked as invalid.
- Stopwords: Cells that match a stopword from the list will be marked as invalid (This works only if the Remove stopwords checkbox is checked).
- Non-alphanumeric characters: Remove all special characters to validate the cell.
- Hash Generation is divided into two parts:
- Normalization: Select the value from dropdown to normalize the data value. (Default: None)
- Create Dictionary: Select value from dropdown to create dictionary of unique values for selected field that can be used in DLP rule in netskope tenant. (Default: None)
- Sanitization (Name Column): Sanitize the content by checking the Name Column checkbox. (Default: Unchecked). The Sanitization Process performs the following actions:
- Remove Stopwords: Mark as checked if you want to remove certain stopwords as part of the sanitization process.(Default:Unchecked) Ensure that Name Column is checked for the applicable field to reflect the changes.

Note
- Use the Normalization parameter to normalize the fetched results. For example, a number such as 123-45-6789 or 123 45 6789 will be treated as 123456789. Number normalizations ignore characters such as dots, dashes and spaces. A string normalization ignores the case sensitivity of the letters.
- Use the Create Dictionary option only when necessary, as this operation is resource-intensive and may impact system performance. Choose this option thoughtfully for optimal efficiency.
- Select the appropriate options for sanitization and hash generation operations:
-
Click Next. Preview the sanitization sample output by clicking Preview Good File or Preview Bad File.
If you are using the plugin with sanitization On, then the performance may be differ due to extra processing. -
Proceed without sanitization: Uncheck this option to proceed with sanitization. (Default: Checked)
All the data will be under consideration for hash generation if this option is Unchecked; otherwise, only the Good File content will be part of the hash generation. -
Click Save. You will be redirected to Exact Data Match > Plugins page where you can see your configured plugin.

Configure an EDM Sharing Configuration for Linux File Share
A sharing configuration is used to share the generated EDM hashes with the destination platform. To share EDM hashes with your Netskope Tenant, create a sharing configuration using these steps:
-
Go to Exact Data Match > Sharing and click Add Sharing Configuration.

-
Configure the sharing parameters:
- Source Configuration: Select the configured Linux File Share EDM plugin.
- Destination Configuration: Select a destination where EDM Hash will be shared.
- Target: The value is automatically set according to the selected Destination Configuration.

- Click Save.
Validate the Linux File Share EDM Plugin
Validate in Cloud Exchange
To validate the pulling of the configured plugin in Cloud Exchange, go to Settings > Logging and search for the Linux File Share EDM plugin logs.
You can verify the plugin operation from the logs available at Logging in Cloud Exchange:
EDM Linux File Share [Linux File Share Config]: Successfully connected to Linux server 192.168.1.100.

The status values are as follows:
- Scheduled: Indicates that the sharing has been configured, and the pull and push operations are waiting in the queue for processing.
- Generating Hash: Indicates that the hash generation process has started. This stage includes fetching > validating > sanitization (if enabled) > generating hash.
- Uploading Hash: Indicates that uploading the hash to the destination configuration has started.
- Upload Completed: Indicates that hashes are uploaded to the destination configuration.
- Checking Apply Status: Checking the apply status of hashes to the destination configuration.
- Apply In Progress: The hash process has started and is in progress on the destination.
- Completed: Indicates that the hash file has been pushed successfully to the destination configuration.
- Failed: Indicates that the final result of the action has failed to execute. The actions are Generating Hash/Uploading Hash/Checking Apply Status.
Shared EDM hashes can be verified from the logs available at Logging in Cloud Exchange:

Validate on the Netskope Tenant
Troubleshooting the Linux File Share EDM Plugin
Unable to configure the Linux File Share EDM Plugin
If you are unable to configure the Linux File Share EDM plugin, it could be due to one of the following reasons:
- Incorrect SSH credentials provided.
- The user doesn’t have permission to read the CSV file.
- Incorrect hostname/server IP address.
- SSH port is disabled or blocked on the Linux server.
- Network connectivity issues between Cloud Exchange and Linux server.
What to do:
- Verify SSH credentials are correct:
ssh username@server_ip -p port_number - Check file permissions on the Linux server:
ls -la /path/to/your/csv/file.csv - Ensure the SSH service is running:
sudo systemctl status ssh - Verify network connectivity:
telnet server_ip port_number
CSV file not found or access denied
If you receive errors about file not found or access denied:
What to do:
- Verify the CSV file path is correct and the file exists.
- Ensure the SSH user has read permissions for the file.
- Check if the file is not locked by another process.
Hash generation fails or takes too long
If hash generation fails or performance is poor:
What to do:
- Check available disk space on Cloud Exchange (ensure at least 2x CSV file size).
- Reduce CSV file size or split into smaller files.
- Disable sanitization if not required to improve performance.
- Monitor system resources during processing.
Known Behaviors
- Sanitization can reduce processing speed by approximately 65% but improves data quality.
- Dictionary creation is resource-intensive and should only be used when necessary.
- The plugin creates temporary files during processing that are automatically cleaned up.
- SSH connection timeouts may occur with very large files; consider increasing timeout values.
- Memory usage scales with CSV file size; monitor system resources during large file processing.
Limitations
-
Each Netskope tenant has a limit of handling up to 5 staging files. If this maximum limit is reached, you may encounter the following error while sharing hashes:
EDM Netskope Exact Data Match [EDM Netskope] Received exit code 400, Error occurred while uploading edm hashes of configuration Linux EDM to the configuration EDM Netskope.
-
To resolve this error, you have to delete the existing files from staging.




