You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在IIS部署的ASP.NET MVC(C#)应用中配置LibGit2Sharp SSH认证?

IIS环境下ASP.NET MVC使用LibGit2Sharp配置SSH认证(GitHub)

核心配置步骤

1. 为IIS虚拟用户生成SSH密钥对

应用池使用的myorg-webapp是虚拟用户,默认无专属用户目录,需先创建并生成密钥:

  • 创建用户目录:
    mkdir C:\Users\myorg-webapp
    
  • 生成SSH密钥(以ed25519为例,无密码):
    ssh-keygen -t ed25519 -f C:\Users\myorg-webapp\.ssh\id_ed25519 -N ""
    
  • 将生成的id_ed25519.pub内容添加到GitHub账户的SSH密钥列表中。

2. 在代码中配置LibGit2Sharp的SSH认证回调

指定密钥绝对路径(避免IIS工作目录导致的路径问题),示例代码:

using LibGit2Sharp;
using LibGit2Sharp.Handlers;

string repoPath = @"C:\path\to\your\local\repo";
string privateKeyPath = @"C:\Users\myorg-webapp\.ssh\id_ed25519";

// 拉取配置
var pullOptions = new PullOptions();
pullOptions.FetchOptions = new FetchOptions
{
    CredentialsProvider = (_, _, _) => new SshUserKeyCredentials
    {
        Username = "git", // GitHub SSH固定用户名
        Passphrase = "", // 密钥有密码则填写,否则留空
        PrivateKeyPath = privateKeyPath
    }
};

// 推送配置
var pushOptions = new PushOptions
{
    CredentialsProvider = pullOptions.FetchOptions.CredentialsProvider
};

// 执行拉取/推送
using (var repo = new Repository(repoPath))
{
    Commands.Pull(repo, new Signature("YourName", "your@email.com", DateTimeOffset.Now), pullOptions);
    repo.Network.Push(repo.Branches["main"], pushOptions);
}

3. 设置密钥文件权限(关键)

SSH要求密钥文件仅所有者可读,需给myorg-webapp用户配置权限:

  • 右键C:\Users\myorg-webapp\.ssh文件夹 → 属性 → 安全 → 编辑 → 添加用户IIS AppPool\myorg-webapp,授予读取和执行、读取权限。
  • 用命令设置密钥文件的严格权限:
    icacls "C:\Users\myorg-webapp\.ssh\id_ed25519" /inheritance:r /grant "IIS AppPool\myorg-webapp:(R)"
    

4. 验证SSH连接(可选)

用PsExec以应用池用户身份验证GitHub SSH连通性:

psexec -i -u "IIS AppPool\myorg-webapp" ssh -T git@github.com

返回Hi [YourGitHubUsername]! You've successfully authenticated, but GitHub does not provide shell access.即为认证成功。

内容的提问来源于stack exchange,提问作者Martin_W

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 23:28:09