我在一个学术环境中工作,我们提供各种 ssh 可访问的计算资源。我们还提供git存储库托管,我们需要 ssh 来对存储库进行读/写访问。
我们针对 OS X 和 Linux 用户的说明相对简单,最重要的是,与 OS X 和大多数现代 Linux 发行版保持一致,OpenSSH都是开箱即用的,更重要的ssh-agent是,预配置为在任何桌面运行时运行会话处于活动状态。我们通常鼓励人们为他们的密钥分配密码,因此没有身份验证代理的生活很快就会变得烦人。
目前,我们为 Windows 用户提供的解决方案总体上更加分散且更加复杂。过去人们一直在使用PuTTY,但这需要额外的步骤来生成与 OpenSSH 兼容的密钥。这也使得使用git命令行工具变得更加困难——尽管不是,我意识到,不可能——使用命令行工具,当与 ssh 可访问的存储库交互时,它最适合与 OpenSSH 一起使用。
我们只想让人们安装msysgit,但我们正在寻找一种集成ssh-agent到 Windows 桌面环境的好方法。最常见的解决方案是通过 中的条目启动代理.bashrc,但这充其量看起来很笨拙,这意味着我们必须指导大部分非技术用户完成.bashrc在 Windows 下编辑他们的过程。
另一个复杂之处是它WinSCP通常用作文件传输工具——当然这不会与ssh-agent. 它将pagent与 PuTTY 人员交谈,但pagent不说话,ssh-agent因此无法从命令行工作。
其他人做了什么来为不同平台上的用户提供一致的环境?您是否刚刚举手并决定为 Windows 用户维护一组单独的文档?
更新
我发现有两个程序充当 OpenSSH 和 pagent 之间的垫片。你有任何的经验夏利或SSH-PAGENT?
我在 Linux 服务器上有一个用户帐户(x86_64-unknown-linux-gnu根据this)。它显然在$PATH( yum, apt-get, pkg, pkg-add, emerge, pacman) 中没有包管理器,并且它没有cc. (编辑顺便说一下,这是一个共享的主机服务器。因此,技术支持人员只是以下脚本时,我试着问他们的意见。他们也想追加销售我自己的VPS包,我并不需要或想要)
我想安装git到~/bin. 我没有必要这样做,但它肯定会让我的生活更轻松。但是,我在网上找到的有关安装 git 的所有说明都与以下任一内容有关:
cc)Linux 不是我的本机操作系统,所以我对如何进行有点不知所措。我需要做什么?有没有地方可以下载预编译的二进制文件并查看它们是否有效?
我注意到https://github.com/apache/ant说“从 git://git.apache.org/ant.git 镜像”(带有链接),我也想这样做。
https://exyr.org/2011/git-mirrors/似乎是对一般技术(基本上是一个 cron 工作)的好文章,但我遇到了一些奇怪的错误,我没有看到“镜像来自” https://github.com/pdurbin/openscholar(目的地)。我希望镜像的来源是https://github.com/openscholar/openscholar
这是我看到的(修剪后的)输出:
murphy:~ pdurbin$ cd /tmp
murphy:tmp pdurbin$ git clone --mirror https://github.com/openscholar/openscholar.git
Cloning into bare repository 'openscholar.git'...
remote: Counting objects: 167069, done.
remote: Compressing objects: 100% (51806/51806), done.
remote: Total 167069 (delta 112936), reused 166304 (delta 112255)
Receiving objects: 100% (167069/167069), 82.77 MiB | 650 KiB/s, done.
Resolving deltas: 100% (112936/112936), done.
murphy:tmp pdurbin$ cd openscholar.git
murphy:openscholar.git pdurbin$ git remote add github git@github.com:pdurbin/openscholar.git
murphy:openscholar.git pdurbin$ git fetch -q && …Run Code Online (Sandbox Code Playgroud) 我在 Ubuntu 13.04 机器上使用 nginx 服务器无法让 git-http-backend 工作。之前在 Debian 7 上试过,但结果相似。基本上我遵循了http://weininger.net/configuration-of-nginx-for-gitweb-and-git-http-backend/但忽略了与 gitweb 相关的任何内容。
我做了以下事情:
使用以下命令安装 nginx、git、git-core 和 fcgiwrap:
apt-get install git git-core nginx fcgiwrap
Run Code Online (Sandbox Code Playgroud)
在 /var/git/test.git 上创建了一个裸仓库,并将其添加到 www-data:
mkdir -p /var/git/test.git
cd /var/git/test.git
git init --bare
git update-server-info
chown -R www-data:www-data /var/git
Run Code Online (Sandbox Code Playgroud)
将 /etc/nginx/sites-enabled/default 替换为
server {
listen 80;
server_name localhost;
location / {
root /var/git;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend;
fastcgi_param PATH_INFO $uri;
fastcgi_param GIT_PROJECT_ROOT /var/git;
fastcgi_param GIT_HTTP_EXPORT_ALL "";
include /etc/nginx/fastcgi_params;
}
}
Run Code Online (Sandbox Code Playgroud)
做的时候
GIT_CURL_VERBOSE=1 git clone …Run Code Online (Sandbox Code Playgroud) 我有一个使用 Gitlab 和 OpenVPN 设置的 Ubuntu 12.04 服务器作为我们的 git 和 vpn 服务器。
目前我已经在防火墙中打开了端口 1194 以打开 OpenVPN 并让用户通过 rsa 证书和 google auth 密钥进行身份验证。
我还没有为 SSH 流量打开防火墙,因为我不希望 SSH 完全暴露给 WAN。但是,我们需要能够在不连接到 vpn 的情况下进行推拉。
如何只为有限的 git 用户打开对 WAN 的 ssh 访问,同时允许管理员从 LAN 访问服务器?
我怀疑我应该在 sshd_config 文件中寻找使用匹配组的方向。正如在这个问题中看到的:“我如何设置 OpenSSH 每用户身份验证方法? ”,有人有这方面的经验吗?
编辑:
我最初接受了使用 access.conf 来限制登录访问的答案。但是后来的答案表明,可以通过 match 指令或使用 username@hostaddress 语法在 sshd.conf 中实现相同的目的。
起初我觉得把它放在 sshd 中更直观,而且对于其他管理员来说可能更容易维护和理解。与 sshd.conf 相比,使用 access.conf 有什么强大的优势吗?
如果我要对这里提到的选项的直观程度进行范围划分,我会说: 1. sshd.conf 2. access.conf 3. IpTables
你同意?
执行远程 PowerShell 脚本时出现错误。在我的本地机器上,我正在运行一个 PowerShell 脚本,该脚本Invoke-Command用于cd进入远程 Amazon Windows Server 实例上的目录,然后Invoke-Command执行位于该服务器实例上的脚本。服务器上的脚本正在尝试从 GitHub git clone 存储库。我可以在服务器脚本中成功执行诸如“ls”甚至“git --version”之类的操作。但是git clone,git pull等会导致以下错误:
克隆到 'MyRepo'... + CategoryInfo : NotSpecified: (克隆到 'MyRepo'...:String) [], RemoteException +fullyQualifiedErrorId : NativeCommandError
这是我第一次使用 PowerShell 或 Windows Server。任何人都可以就这个问题提供一些指导。
客户端脚本:
$s = new-pssession -computername $server -credential $user
invoke-command -session $s -scriptblock { cd C:\Repos; ls }
invoke-command -session $s -scriptblock { param ($repo, $branch) & '.\clone.ps1' -repository $repo -branch $branch} -ArgumentList $repository, $branch
exit-pssession
Run Code Online (Sandbox Code Playgroud)
服务器脚本: …
我正在使用 Jenkins 1.557 来观察 Gerrit 2.8 实例的变化。我正在使用以下插件:
当我在 Gerrit 触发器上使用“测试连接”时,它返回成功,所以我知道凭据正在工作。我在“高级”按钮下使用默认值。
对于我的测试构建类型,我使用了 Jenkins 检查的 git repo(我添加了“ls -l”的构建后步骤,它正确显示了 repo 内容)。我将构建触发器设置为“gerrit event”,对于“gerrit trigger”,我选择了“Check non-reviewed patchsets”,并启用了“patchset created”的触发器。gerrit 项目设置似乎正确。
我无法通过上传新更改或更改的新补丁集来启动构建。当我使用“查询并触发 Gerrit 补丁”按钮手动触发构建时,构建会发生,但不会记录任何投票。我显然错过了部分难题 - 如果我 ssh 进入 gerrit 并执行“流事件”,我会看到我期望看到的事件。
Jenkins - 权威指南 - 来自 O'Reilly 并没有真正涵盖 Gerrit。我试图避免轮询,因为此 Jenkins 实例将管理数十个 git 存储库。
调试的下一步是什么?
自从我们升级到 OSX El Capitan 后,我们的 SMB 服务器遇到了一些奇怪的文件权限错误。
我们有一台 ubuntu 服务器机器,通过 SMB 共享文件夹将我们的工作文件托管到我们的每个 Mac 工作站。我们使用Git over SMB和SourceTree来构建我们的网站(方便共享相同的数据库和文件),因为我们升级到 OS X El Capitan,文件权限不一样,Git 标记每个文件更改,因为它们的权限从 0664 切换到0775(或 0644 至 0755)。
例如,这是ls -la在我们的开发服务器上使用 SSH的输出
? CashierTheme git:(develop) ls -la
total 72
drwxrwsr-x 9 nestorwww nestorwww 4096 oct. 12 23:42 .
drwxrwsr-x 6 nestorwww nestorwww 4096 avril 14 17:33 ..
-rw-rw-r-- 1 nestorwww nestorwww 12261 oct. 12 23:42 CashierThemeApp.php
-rw-rw-r-- 1 nestorwww nestorwww 56 oct. 12 23:42 composer.json
-rw-rw-r-- 1 …Run Code Online (Sandbox Code Playgroud) 我使用 GitLab 社区版 8.2 并想添加提交后挂钩。
我创建了具有权限的文件 path_to_project.git/custom_hooks/post-commit
$ ls -l1 custom_hooks/post-commit
-rwxr-xr-x 1 git git 45 Dec 14 21:31 custom_hooks/post-commit
Run Code Online (Sandbox Code Playgroud)
和内容
#!/bin/bash
echo "test custom" > /tmp/hook
Run Code Online (Sandbox Code Playgroud)
如此处所述:http : //doc.gitlab.com/ce/hooks/custom_hooks.html
但它不起作用(通过 Web 界面提交检查)。我也尝试过“正常”的 git 钩子放置(project.git/hooks/post-commit),但它也不起作用。
我已经设置了一个GitLab VM,并在其上创建了一个项目。现在我正在尝试使用我的 git 客户端从另一台机器连接到它(Git for Windows v2.7.1 ...也尝试升级到最新版本 2.15.1,但没有变化)。
在 Windows 机器上,我尝试:
git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no
Run Code Online (Sandbox Code Playgroud)
我选择“否”是因为当我在虚拟机上仔细检查时,我发现了不同的指纹:
ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
Run Code Online (Sandbox Code Playgroud)
好的,它是十六进制格式,所以我将其转换为 base64,对吗?
hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==
Run Code Online (Sandbox Code Playgroud)
好吧,这不匹配......如果我走另一条路并将该 base64 指纹转换为十六进制并看看它是什么样子怎么办?结果我不能,它是 43 个字符,并且 base64 字符串的长度必须是 4 的倍数。
关于我在这里缺少什么的任何想法?