> ## Documentation Index
> Fetch the complete documentation index at: https://www.1password.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# SSH client compatibility

export const Image = ({src, darkSrc, alt, width, border, height, round}) => {
  const classNames = ["mint-mx-4"];
  if (border) {
    classNames.push("mint-rounded-sm");
  }
  if (round) {
    classNames.push("mint-rounded-lg");
  }
  const style = {};
  if (width) style.width = typeof width === "number" ? `${width}px` : width;
  if (height) style.height = typeof height === "number" ? `${height}px` : height;
  return darkSrc ? <>
      <img src={src} alt={alt} className={[...classNames, "dark:hidden"].join(" ")} style={Object.keys(style).length > 0 ? style : undefined} />
      <img src={darkSrc} alt={alt} className={[...classNames, "hidden dark:block"].join(" ")} style={Object.keys(style).length > 0 ? style : undefined} onError={e => {
    e.target.src = src;
  }} />
    </> : <img src={src} alt={alt} className={classNames.join(" ")} style={Object.keys(style).length > 0 ? style : undefined} />;
};

The 1Password SSH agent has been tested for compatibility with a number of different clients that use SSH and Git.

export const IconGood = () => <Icon icon="check" color="var(--op-status-success)" iconType="solid" />;

export const IconBad = () => <Icon icon="times" color="var(--op-status-error)" iconType="solid" />;

export const IconWarning = () => <Icon icon="warning" color="var(--op-status-warning)" iconType="solid" />;

export const IconTip = () => <Icon icon="lightbulb" color="var(--op-status-warning)" iconType="solid" />;

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    | Name                                  | SSH Capability | Compatible with 1Password |
    | ------------------------------------- | -------------- | ------------------------- |
    | **[Cyberduck](#cyberduck)**           | SFTP           | <IconGood /> Yes          |
    | **[DataGrip](#datagrip)**             | SSH tunneling  | <IconGood /> Yes          |
    | **[FileZilla](#filezilla)**           | SFTP           | <IconGood /> Yes          |
    | **[Fork](#fork)**                     | Git            | <IconGood />	Yes          |
    | **[ForkLift](#forklift)**             | SFTP           | <IconGood /> Yes          |
    | **[git CLI](#git-cli)**               | Git            | <IconGood />	Yes          |
    | **[Gitfox](#gitfox)**                 | Git            | <IconGood />	Yes          |
    | **[GitHub Desktop](#github-desktop)** | Git            | <IconGood /> Yes          |
    | **[GitKraken](#gitkraken)**           | Git            | <IconGood />	Yes          |
    | **GitUp**                             | Git            | <IconGood />	Yes          |
    | **[JetBrains IDEs](#jetbrains-ide)**  | Git            | <IconGood /> Yes          |
    | **[Nova](#nova)**                     | Git            | <IconGood />	Yes          |
    | **[OpenSSH](#openssh)**               | SSH, SFTP      | <IconGood />	Yes          |
    | **[Postico](#postico)**               | SSH tunneling  | <IconBad /> No            |
    | **[Sequel Ace](#sequel-ace)**         | SSH tunneling  | <IconBad /> No            |
    | **[Sourcetree](#sourcetree)**         | Git            | <IconGood />	Yes          |
    | **[Sublime Merge](#sublime-merge)**   | Git            | <IconGood />	Yes          |
    | **[TablePlus](#tableplus)**           | SSH tunneling  | <IconGood /> Yes          |
    | **[Termius](#termius)**               | SSH            | <IconBad /> No            |
    | **[Tower](#tower)**                   | Git            | <IconGood />	Yes          |
    | **[Transmit](#transmit)**             | SFTP           | <IconGood /> Yes          |
    | **[Visual Studio Code](#vs-code)**    | Git            | <IconGood /> Yes          |
    | **[Xcode](#xcode)**                   | Git            | <IconBad /> No            |
  </Tab>

  <Tab title="Windows">
    | Name                                          | SSH Capability | Compatible with 1Password |
    | --------------------------------------------- | -------------- | ------------------------- |
    | **[Celestial Software](#celestial-software)** | SSH, SFTP      | <IconGood /> Yes          |
    | **[Cyberduck](#cyberduck)**                   | SFTP           | <IconGood /> Yes          |
    | **[FileZilla](#filezilla)**                   | SFTP           | <IconBad /> No            |
    | **[Fork](#fork)**                             | Git            | <IconGood /> Yes          |
    | **[Git for Windows](#git-for-windows)**       | Git            | <IconGood /> Yes          |
    | **[GitHub Desktop](#github-desktop)**         | Git            | <IconGood /> Yes          |
    | **[GitKraken](#gitkraken)**                   | Git            | <IconGood /> Yes          |
    | **[JetBrains IDEs](#jetbrains-ide)**          | Git            | <IconGood /> Yes          |
    | **[Microsoft OpenSSH](#openssh)**             | SSH, SFTP      | <IconGood /> Yes          |
    | **[Pageant](#pageant)**                       | SSH            | <IconBad /> No            |
    | **[PuTTY](#putty)**                           | SSH            | <IconBad /> No            |
    | **[Sourcetree](#sourcetree)**                 | Git            | <IconGood /> Yes          |
    | **[Sublime Merge](#sublime-merge)**           | Git            | <IconGood /> Yes          |
    | **[Termius](#termius)**                       | SSH            | <IconBad /> No            |
    | **[Tower](#tower)**                           | Git            | <IconGood /> Yes          |
    | **[Visual Studio Code](#vs-code)**            | Git            | <IconGood /> Yes          |
  </Tab>

  <Tab title="Linux">
    | Name                                 | SSH Capability | Compatible with 1Password |
    | ------------------------------------ | -------------- | ------------------------- |
    | **[DataGrip](#datagrip)**            | SSH tunneling  | <IconGood /> Yes          |
    | **[git CLI](#git-cli)**              | Git            | <IconGood />	Yes          |
    | **[GitKraken](#gitkraken)**          | Git            | <IconGood />	Yes          |
    | **[JetBrains IDEs](#jetbrains-ide)** | Git            | <IconGood /> Yes          |
    | **[OpenSSH](#openssh)**              | SSH, SFTP      | <IconGood />	Yes          |
    | **[Sublime Merge](#sublime-merge)**  | Git            | <IconGood />	Yes          |
    | **[Termius](#termius)**              | SSH            | <IconBad /> No            |
    | **[Visual Studio Code](#vs-code)**   | Git            | <IconGood /> Yes          |
  </Tab>
</Tabs>

export const SupportEntry = ({children, icon, prefixText, noPrefix, authSock, identityAgent, identityFile, commitSigning, gitBinarySetting, jetbrainsSocketCaveat, macAppStore, windowsPipe, windowsPipeWithGitconfig, pageantOnly, anySSHAgent}) => {
  const text = () => {
    if (authSock) {
      return <>{prefixText} agent configuration with <a href="#ssh-auth-sock"><code>SSH_AUTH_SOCK</code></a>.</>;
    }
    if (windowsPipe) {
      return <>{prefixText} using the agent over the OpenSSH pipe (<code>\\.\pipe\openssh-ssh-agent</code>).</>;
    }
    if (windowsPipeWithGitconfig) {
      return <>{prefixText} using the agent over the OpenSSH pipe with the <a href="/ssh/get-started/#step-4-configure-your-ssh-or-git-client"><code>.gitconfig</code> file set up properly</a>.</>;
    }
    if (identityAgent) {
      return <>{prefixText} agent configuration with <a href="#identity-agent"><code>IdentityAgent</code></a>.</>;
    }
    if (identityFile) {
      return <>{prefixText} setting public keys as <a href="#identity-file"><code>IdentityFile</code></a>.</>;
    }
    if (commitSigning) {
      return <>{prefixText} <a href="/ssh/git-commit-signing/">signing Git commits</a> with SSH keys.</>;
    }
    if (gitBinarySetting) {
      return <>You may need to switch the Git binary in the preferences.</>;
    }
    if (jetbrainsSocketCaveat) {
      return <>If you're seeing errors around the socket path, go to <code>Advanced Settings</code> {">"} <code>SSH</code> and set <code>Configuration files parser</code> to <code>OpenSSH</code>.</>;
    }
    if (macAppStore) {
      return <>{prefixText} the Mac App Store version.</>;
    }
    if (pageantOnly) {
      return <>No support for SSH agents over the OpenSSH pipe, only works with <a href="#pageant">Pageant</a>.</>;
    }
    if (anySSHAgent) {
      return <>{prefixText} any SSH agent. Uses a built-in key management system.</>;
    }
    if (noPrefix) {
      return <>{children}</>;
    }
    return <>{prefixText} {children}</>;
  };
  return <li style={{
    listStyleType: 'none',
    marginLeft: 0
  }}>{icon} {text.apply()}</li>;
};

export const Support = ({...props}) => {
  return <SupportEntry icon={<IconGood />} prefixText="Support for" {...props} />;
};

export const NoSupport = ({...props}) => {
  return <SupportEntry icon={<IconBad />} prefixText="No support for" {...props} />;
};

export const Warning = ({...props}) => {
  return <SupportEntry icon={<IconWarning />} prefixText="" {...props} />;
};

export const Tip = ({...props}) => {
  return <SupportEntry icon={<IconTip />} prefixText="" {...props} />;
};

export const TODO = ({...props}) => {
  return <></>;
};

***

## Working with SSH clients

### Agent configuration with `IdentityAgent`

On Mac and Linux, most SSH and Git clients check your `~/.ssh/config` file for the `IdentityAgent` setting for the corresponding host.
The clients then use the configured agent socket path to handle SSH authentication.

This option gives you the most flexibility, like the ability to configure [multiple agents side by side](/ssh/agent/advanced/#gradual-migration).
However, not every SSH client adheres to every value in the SSH config file.
In the list below, you can see whether or not your SSH client supports configuration with `IdentityAgent`.

### Agent configuration with `SSH_AUTH_SOCK`

On Mac and Linux, you can also configure the agent socket path using the `SSH_AUTH_SOCK` environment variable.

There are more SSH clients that support `SSH_AUTH_SOCK` than `IdentityAgent`.
For clients that support both, `IdentityAgent` usually takes precedence over `SSH_AUTH_SOCK`.

Follow the steps for your operating system to configure `SSH_AUTH_SOCK` for your SSH client:

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    #### Configure `SSH_AUTH_SOCK` for the terminal

    To configure `SSH_AUTH_SOCK` for the terminal, run:

    ```
    export SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock
    ```

    Any command you run within that same shell will use the 1Password SSH agent.

    To pass `SSH_AUTH_SOCK` to a GUI application, you can use the `open` command to launch the application:

    ```shell theme={null}
    export SSH_AUTH_SOCK=~/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock
    open -a /Applications/<your SSH client>.app
    ```

    #### Configure `SSH_AUTH_SOCK` globally for every client

    If you want to persist and automatically configure the `SSH_AUTH_SOCK` environment variable for every client without launching them from the terminal, run the following snippet to create a launch agent:

    ```shell theme={null}
    mkdir -p ~/Library/LaunchAgents
    cat << EOF > ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
      <key>Label</key>
      <string>com.1password.SSH_AUTH_SOCK</string>
      <key>ProgramArguments</key>
      <array>
        <string>/bin/sh</string>
        <string>-c</string>
        <string>/bin/ln -sf $HOME/Library/Group\ Containers/2BUA8C4S2C.com.1password/t/agent.sock \$SSH_AUTH_SOCK</string>
      </array>
      <key>RunAtLoad</key>
      <true/>
    </dict>
    </plist>
    EOF
    launchctl load -w ~/Library/LaunchAgents/com.1password.SSH_AUTH_SOCK.plist
    ```
  </Tab>

  <Tab title="Linux">
    #### Configure `SSH_AUTH_SOCK` for the terminal

    To configure `SSH_AUTH_SOCK` for the terminal, run:

    ```
    export SSH_AUTH_SOCK=~/.1password/agent.sock
    ```

    Any command you run within that same shell will use the 1Password SSH agent.

    #### Configure `SSH_AUTH_SOCK` globally for every client

    If you want to persist and automatically configure the `SSH_AUTH_SOCK` environment variable for every client without launching them from the terminal, run the following snippet to create a login script in `/etc/profile.d/`:

    ```shell theme={null}
    echo "export SSH_AUTH_SOCK=~/.1password/agent.sock" | sudo tee /etc/profile.d/1password-ssh-auth-sock.sh
    ```

    If your system launches the GNOME keyring SSH agent automatically, you can disable that by running the following command:

    ```shell theme={null}
    mkdir -p ~/.config/autostart \
      && cp /etc/xdg/autostart/gnome-keyring-ssh.desktop ~/.config/autostart/gnome-keyring-ssh.desktop \
      && echo "Hidden=true" >> ~/.config/autostart/gnome-keyring-ssh.desktop
    ```

    If you choose not to do this, the GNOME setting (`/run/user/1000/keyring/ssh`) may take precedence over the 1Password setting, depending on your operating system.
  </Tab>
</Tabs>

### Using Git autofetch

Some Git clients are configured by default to periodically perform a `git fetch` in the background. This can result in authorization prompts popping up unexpectedly, so 1Password helps to suppress prompts if the application or window where the request came from isn't in the foreground.

<CardGroup cols={2}>
  <div>
    <p>If a prompt has been suppressed, you'll see an indicator dot on the 1Password icon in your device's menu bar, taskbar, or system tray.</p>

    <p>To access the prompt, select the 1Password icon, then select **SSH request waiting**. The authorization prompt will be brought to the foreground, where you can approve or deny the request.</p>

    <p>If you'd rather not be prompted when your applications automatically fetch changes, even when the prompts are suppressed, you can turn off the autofetch settings in your Git client and instead only fetch or pull on demand.</p>
  </div>

  <div>
    <Image border round alt="Turn on the settings in 1Password to make sure the agent keeps running" src="/static/img/ssh/suppressed-prompt-notification.png" />
  </div>
</CardGroup>

### Setting public keys as `IdentityFile`

If an SSH client supports setting public keys as `IdentityFile`, you can use that to [match hosts to a specific key in 1Password](/ssh/agent/advanced/#match-key-with-host).
In the list below, you can see if that's the case for your preferred SSH client.

***

## OpenSSH

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    #### `ssh`, `sftp`, `scp`

    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support>workflows with jump hosts (<code>-J</code>, <code>ProxyJump</code>, <code>ProxyCommand</code>).</Support>
    <Support>workflows that use agent forwarding (<code>ForwardAgent</code>).</Support>

    <br />

    #### `ssh-add`

    <Support authSock />

    <Support>listing identities (<code>-l</code> and <code>-L</code>).</Support>

    <NoSupport identityAgent />

    <NoSupport>locking and unlocking (<code>-x</code> and <code>-X</code>).</NoSupport>
    <NoSupport>adding and deleting identities (<code>ssh-add path/to/key</code>, <code>-d</code>, and <code>-D</code>).</NoSupport>
  </Tab>

  <Tab title="Windows">
    #### `ssh`, `sftp`, `scp`

    <Support windowsPipe />

    <Support identityFile />

    <br />

    #### `ssh-add`

    <Support windowsPipe />

    <Support>listing identities (<code>-l</code> and <code>-L</code>).</Support>

    <NoSupport identityAgent />

    <NoSupport>locking and unlocking (<code>-x</code> and <code>-X</code>).</NoSupport>
    <NoSupport>adding and deleting identities (<code>ssh-add path/to/key</code>, <code>-d</code>, and <code>-D</code>).</NoSupport>
  </Tab>

  <Tab title="Linux">
    #### `ssh`, `sftp`, `scp`

    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support>workflows with jump hosts (<code>-J</code>, <code>ProxyJump</code>, <code>ProxyCommand</code>).</Support>
    <Support>workflows that use agent forwarding (<code>ForwardAgent</code>).</Support>

    <br />

    #### `ssh-add`

    <Support authSock />

    <Support>listing identities (<code>-l</code> and <code>-L</code>).</Support>

    <NoSupport identityAgent />

    <NoSupport>locking and unlocking (<code>-x</code> and <code>-X</code>).</NoSupport>
    <NoSupport>adding and deleting identities (<code>ssh-add path/to/key</code>, <code>-d</code>, and <code>-D</code>).</NoSupport>
  </Tab>
</Tabs>

## Celestial Software

<Tabs>
  <Tab title="Windows">
    <Support windowsPipe />

    <Support identityFile />
  </Tab>
</Tabs>

## Cyberduck

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <NoSupport macAppStore />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipe />

    <Support identityFile />
  </Tab>
</Tabs>

## DataGrip

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <NoSupport identityFile />

    <Tip jetbrainsSocketCaveat />
  </Tab>

  <Tab title="Linux">
    <Support authSock />

    <Support identityAgent />

    <NoSupport identityFile />

    <Tip jetbrainsSocketCaveat />
  </Tab>
</Tabs>

## FileZilla

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <NoSupport identityAgent />

    <NoSupport identityFile />
  </Tab>

  <Tab title="Windows">
    <NoSupport pageantOnly />
  </Tab>
</Tabs>

## Fork

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />

    <Tip gitBinarySetting />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipeWithGitconfig />

    <Support identityFile />

    <Support commitSigning />

    <Tip gitBinarySetting />
  </Tab>
</Tabs>

## ForkLift

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />
  </Tab>
</Tabs>

## `git` CLI

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Windows">
    For Git compatibility on Windows, see [Git for Windows](#git-for-windows).
  </Tab>

  <Tab title="Linux">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>
</Tabs>

## Git for Windows

<Tabs>
  <Tab title="Windows">
    <Support windowsPipeWithGitconfig />

    <Support identityFile />

    <Support commitSigning />

    <Support>PowerShell and <code>cmd</code>.</Support>
    <Tip>For WSL, workarounds exist to forward socket connections using <code>npiperelay</code> and <code>socat</code>.</Tip>
  </Tab>
</Tabs>

## Gitfox

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <TODO commitSigning />

    <NoSupport macAppStore />
  </Tab>
</Tabs>

## GitHub Desktop

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipe />

    <Support identityFile />

    <Support commitSigning />

    <TODO>using it when GitHub account is connected/logged in.</TODO>
  </Tab>
</Tabs>

## GitKraken

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <NoSupport identityAgent />

    <NoSupport identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipeWithGitconfig />

    <TODO identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Linux">
    <Support authSock />

    <NoSupport identityAgent />

    <NoSupport identityFile />

    <Support commitSigning />
  </Tab>
</Tabs>

<h2 id="jetbrains-ide">
  JetBrains IDEs
</h2>

*IntelliJ IDEA, WebStorm, GoLand, CLion, PhpStorm, RubyMine, AppCode.*

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />

    <Tip jetbrainsSocketCaveat />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipeWithGitconfig />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Linux">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />

    <Tip jetbrainsSocketCaveat />
  </Tab>
</Tabs>

## Nova

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <NoSupport identityFile />

    <NoSupport commitSigning />
  </Tab>
</Tabs>

## Pageant

<Tabs groupId="operating-systems">
  <Tab title="Windows">
    <NoSupport>using the agent from Pageant.</NoSupport>
    <Tip>Workarounds and open-source tools exist to forward Pageant requests to the OpenSSH agent pipe.</Tip>
  </Tab>
</Tabs>

## Postico

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <NoSupport anySSHAgent />

    <Tip>As a workaround, you can set up the SSH tunnel from your terminal and then configure Postico to connect over <code>localhost</code>.</Tip>
  </Tab>
</Tabs>

## PuTTY

<Tabs groupId="operating-systems">
  <Tab title="Windows">
    <NoSupport pageantOnly />
  </Tab>
</Tabs>

## Sequel Ace

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <NoSupport anySSHAgent />

    <Tip>As a workaround, you can set up the SSH tunnel from your terminal and then configure Sequel Ace to connect over <code>localhost</code>.</Tip>
  </Tab>
</Tabs>

## Sourcetree

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipeWithGitconfig />

    <Support identityFile />

    <Support commitSigning />

    <Tip gitBinarySetting />
  </Tab>
</Tabs>

## Sublime Merge

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipeWithGitconfig />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Linux">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>
</Tabs>

## TablePlus

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <NoSupport identityAgent />

    <NoSupport identityFile />
  </Tab>

  {/* <Tab title="Linux">

    <Support authSock />
    <NoSupport identityAgent />
    <NoSupport identityFile />

    </Tab> */}
</Tabs>

## Termius

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <NoSupport anySSHAgent />
  </Tab>

  <Tab title="Windows">
    <NoSupport anySSHAgent />
  </Tab>

  <Tab title="Linux">
    <NoSupport anySSHAgent />
  </Tab>
</Tabs>

## Tower

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />

    <Tip gitBinarySetting />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipe />

    <Support identityFile />

    <Support commitSigning />

    <Tip gitBinarySetting />

    <TODO>using it when GitHub account is connected/logged in.</TODO>
  </Tab>
</Tabs>

## Transmit

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <NoSupport identityFile />

    <NoSupport macAppStore />
  </Tab>
</Tabs>

<h2 id="vs-code">
  Visual Studio Code
</h2>

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Windows">
    <Support windowsPipe />

    <Support identityFile />

    <Support commitSigning />
  </Tab>

  <Tab title="Linux">
    <Support authSock />

    <Support identityAgent />

    <Support identityFile />

    <Support commitSigning />
  </Tab>
</Tabs>

## Xcode

<Tabs groupId="operating-systems">
  <Tab title="Mac">
    <NoSupport anySSHAgent />
  </Tab>
</Tabs>

## Learn more

* [Autofill public keys](/ssh/public-key-autofill/)
* [Manage SSH keys](/ssh/manage-keys/#generate-an-ssh-key)
* [Sign Git commits](/ssh/git-commit-signing)
* [Workflow: Secure your SSH & Git workflows](/get-started/secure-ssh-git-workflows)
