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

使用SAS GITFN_CLONE/GIT_CLONE通过GitHub部署密钥认证失败求助

解决方案

问题根源

SAS 9.4M7自带的Git版本(0.27)过于老旧,不支持Ed25519、ECDSA这类现代SSH密钥算法,且SAS内置Git函数的密钥处理逻辑和系统原生Git不一致,导致密钥认证失败。而系统原生Git能正常工作,是因为它调用的是系统自带的SSH客户端和较新的Git版本。

解决方法

方法1:让SAS调用系统原生SSH客户端

在SAS代码开头添加环境变量配置,强制SAS的Git函数使用系统的SSH(而非SAS自带的):

/* 指向CentOS7默认的系统SSH路径 */
%let SYSRC=%sysfunc(putenv(GIT_SSH=/usr/bin/ssh));

%let dirOut = %sysfunc(pathname(work))/package;
data _null_;
  rc=GIT_CLONE(
    "git@github.com:allanbowe/sasjscore.git",
    "&dirOut"
  );
  put rc=;
run;

方法2:替换SAS内置的Git二进制

  1. 先备份SAS自带的Git文件:
cp /opt/sas94/SASFoundation/9.4/bin/sasexe/git /opt/sas94/SASFoundation/9.4/bin/sasexe/git.bak
  1. 将系统原生Git复制到SAS的Git路径(若CentOS7默认Git版本较低,先通过yum升级Git至2.20以上):
cp /usr/bin/git /opt/sas94/SASFoundation/9.4/bin/sasexe/git
chmod 755 /opt/sas94/SASFoundation/9.4/bin/sasexe/git

方法3:直接调用系统Git命令(最稳妥)

绕开SAS内置的Git函数,直接用system命令调用系统原生Git:

%let dirOut = %sysfunc(pathname(work))/package;
data _null_;
  cmd = catx(' ', 'git clone git@github.com:allanbowe/sasjscore.git', "&dirOut");
  rc=system(cmd);
  put "返回码:" rc= "执行命令:" cmd=;
run;

前置检查

确保SAS运行用户sasjssrv的.ssh目录和密钥权限正确:

chmod 700 /home/sasjssrv/.ssh
chmod 600 /home/sasjssrv/.ssh/id_ed25519  # 替换为你的密钥文件名
chmod 644 /home/sasjssrv/.ssh/id_ed25519.pub

也可在SAS里测试SSH连通性,确认认证正常:

data _null_;
  rc=system('ssh -T git@github.com');
  put "SSH测试返回码:" rc=;
run;

返回码为0则表示认证成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:51:06