When installing dependencies with npm, if you need to access private Git repositories using SSH keys, there are several methods to specify which SSH key to use.
Method 1: Using SSH Configuration File
The most common and recommended approach is to configure the SSH config file to specify which key to use. The SSH configuration file is typically located in the .ssh directory under the user's home directory (i.e., ~/.ssh/config). You can set specific SSH keys for particular hosts in this file.
For instance, if your private repository is hosted on GitHub, add the following configuration to ~/.ssh/config:
sshHost github.com HostName github.com User git IdentityFile ~/.ssh/your_private_key
The IdentityFile specifies the private key file that npm should use. The advantage is that this configuration applies automatically to any SSH-based service, not just npm.
Method 2: Using Environment Variables
Another approach is to set the GIT_SSH_COMMAND environment variable. This variable allows you to specify the SSH command used by git, including the key. For example:
bashexport GIT_SSH_COMMAND="ssh -i ~/.ssh/your_private_key"
Set this environment variable in the command line before running npm commands. The advantage is its flexibility and ease of temporary changes; the disadvantage is that it only affects the current shell session.
Method 3: Modifying npm Configuration
Another less common method is to directly specify the SSH command via npm configuration:
bashnpm config set script-shell "ssh -i ~/.ssh/your_private_key"
This affects the shell script used by npm at runtime, causing it to use the specified SSH key.
Example
Suppose you have a private npm module hosted in a private GitHub repository that requires a specific SSH key for installation. You can set it up as per Method 1:
-
First, confirm the path to your private key file, such as
~/.ssh/npm_repo_key. -
Edit the
~/.ssh/configfile and add the following configuration:sshHost github.com HostName github.com User git IdentityFile ~/.ssh/npm_repo_key -
Then run
npm installin your project, and SSH will automatically authenticate using the specified key.
With these methods, you can flexibly control which SSH key npm uses when installing private dependencies. This is very helpful for maintaining project security and managing multiple SSH keys.