问题

因故需要在win系统上调试分析一个C++问题,在使用CLion配置Toolchains选择WSL时遇到了困扰,虽然使用password和Key-Pair可以建立连接, 但想用OpenSSH config and authentication agent却不得其法。

clion toolchain ssh cofig

在排除了Win10自带的openssh客户端、mingw openssh客户端、git-for-windows捆绑的openssh之后,还是翻了下jar包。

解决方法

两种方法:

  1. 在SystemProperties.getUserHome()/.ssh/config文件中,将密钥文件写上

    • 这个文件可以从其他系统的ssh_config复制过来,把Host和IdentityFile取消注释使其成效
  2. 使用 Pageant 开启 ssh-agent 服务,这个程序可以在putty中找到

    • 注意Add key时,可能私钥要从 OpenSSH private key 格式转成 PuTTY private key 格式,可以用PUTTYGEN.exe搞定

历程

com.intellij.ssh.impl.SshConnection 中找到 getSshSession 方法,可以得知 Clion Toolchains WSL 建立 ssh 连接的时候使用了 jsch , 并使用 IdentityRepositoryFactory 创建 localIdentityRepository、RemoteIdentityRepository, 其中后者对于 Windows 选择使用 PageantConnector

private final Connector a() {
    long var1 = a ^ 124129341420651L;

    LOG.debug("Creating authentication agent connector");

    if (SystemInfo.isWindows) {
        try {
            return (Connector)(new PageantConnector());
        } catch (AgentProxyException var5) {
            this.sshAgentProxyCreationFailed = true;
            this.a("Pageant", var5);
            this.a("Pageant", var5.getMessage());
        }
    } else {
        String var3 = System.getenv("SSH_AUTH_SOCK");
        CharSequence var4 = (CharSequence)var3;
        if (var4 == null || var4.length() == 0) {
            this.sshAgentProxyCreationFailed = true;
            LOG.info("SSH_AUTH_SOCK environment variable is not defined");
            this.a("ssh-agent", "SSH_AUTH_SOCK environment variable is not defined");
            return null;
        }

        LOG.debug("UNIX-domain socket " + var3
            + " defined in environment variable SSH_AUTH_SOCK will be used to connect to "
            + "authentication agent");

        try {
            return (Connector)(new SSHAgentConnector(
                        (USocketFactory)(new JNAUSocketFactory()), var3)
                    );
        } catch (AgentProxyException var6) {
            this.sshAgentProxyCreationFailed = true;
            this.a("ssh-agent", var6);
            this.a("ssh-agent", var6.getMessage());
        }
    }

    return null;
}

Related Posts


Published

WSL

Category

toolchains

Tags

Contact