有没有办法强制 OpenSSH(或创建某种代理)仅通过他(或她)提供的用户名将一个用户转发到一台机器,将另一个用户转发到另一台机器?
我遇到以下问题:我要在 Docker 容器中运行 GitLab,同时在主机上运行 SSH 服务器。GitLab 监听 SSH 连接,但它只对“git”用户通过 SSH 密钥区分客户端感兴趣。所以我想创建的设置是以下之一:
需要明确的是:Docker 容器运行一个网桥,并且可以通过不同于主机 IP 的唯一 IP 地址从主机访问它。
StackOverflow 上也提出了类似的问题(/sf/ask/595381181/),但没有答案可以解决该问题 - 最有帮助的是建议自定义 shell,但我发现没有办法创建类似的东西。
我正在尝试配置某些 git 存储库以使用特定的公钥/私钥进行身份验证。
这是在 ~/.ssh/config 里面
Host Repo
HostName bitbucket.org
User git
IdentityFile ~/.ssh/ynd
LogLevel DEBUG
Run Code Online (Sandbox Code Playgroud)
这是尝试推送到仓库时的日志
debug1: Connecting to bitbucket.org [104.192.143.1] port 22.
debug1: Connection established.
debug1: identity file /Users/evgenipetrov/.ssh/ynd type 1
debug1: key_load_public: No such file or directory
debug1: identity file /Users/evgenipetrov/.ssh/ynd-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9
debug1: Remote protocol version 2.0, remote software version conker_1.0.315-a08d059 app-134
debug1: no match: conker_1.0.315-a08d059 app-134
debug1: Authenticating to bitbucket.org:22 as 'git'
debug1: …Run Code Online (Sandbox Code Playgroud) 我有 2 个用户有问题
• git用户 - 用于 gitosis - 所以它是一个无密码用户,只能通过 root 访问...
•用户用户 - 我的文件所在的位置
所以我想做的是授予用户git权限以导航到这样的 luddico 文件夹
git@domain.me:~/respositories# cd /home/user/websites/domain.com
Run Code Online (Sandbox Code Playgroud)
然后在用户用户文件(任何文件/文件夹)中执行任何操作,这样我就可以例如
git@domain.com:/home/user/websites/domain.com# git pull
Run Code Online (Sandbox Code Playgroud)
因为实际上上面提到的操作返回:
error: cannot open .git/FETCH_HEAD: Permission denied
Run Code Online (Sandbox Code Playgroud)
所以当我要求执行这样的操作时,它会请求 git 的密码,顺便说一句,没有任何密码,或者立即取消它
所以,我怎么可以配置用户的git有像在用户root /管理员权限的用户 ,而不需要提供命令之前任何密码或sudo?就像如果它是根一样
提前致谢
我在 Ubuntu 服务器上有一个远程裸 Git 存储库,其中的文件归用户my_project和组所有my_project,并相应地设置了权限。所有提交者都是他们自己在组中my_project。
当有人提交然后my_user通过 SSH从任何带有用户的 Ubuntu 笔记本电脑推送到服务器时,远程存储库中的一些文件被创建(更新?),因此它们现在属于用户和组my_user。
当然,当其他人想要提交时,他现在无法提交,因为他没有写权限。我可以将权限设置为 777,但这不是最佳选择。
有什么办法可以在保持受限写入权限的同时解决这个问题?
我需要了解由我当前的 master 和分支 new_branch 表示的两个版本之间的文件更改。通常,如果两个分支中的路径/名称相同,我会运行以下命令。
git diff new_branch -- 路径/文件
当两个分支之间的路径/文件不同时我该怎么办?
我可以回退并创建另一个克隆的存储库并签出 new_branch。然后做unix的sdiff。我只是想知道 git diff 的作者是否预料到了这种情况并内置了一些东西来处理它。
——谢谢你——小迈克
已经张贴在这里,所以请随时在那里回答。
每次我向 git 服务器提交/推送某些内容时,文件权限都会发生变化(存储库中所有添加/编辑的文件都没有对该组的读取和执行访问权限)。因此,trac 无法访问存储库。
我需要以不同的方式更改文件夹的权限吗?
chmod u=rwx,g=rx,o= -R /home/git/repositories
还是我需要以某种方式设置 gitolite 以写入具有不同权限的文件???
问候,克莱门斯
我正在尝试使用 ssh-keys 和 git-shell 设置安全的 git 存储库服务器。由于我们的用户数据库存储在中央 LDAP 目录中,我无法将用户的默认 shell 更改为 git-shell,因此我尝试将 git-shell 命令添加到 authorized_users 文件中的公钥,如下所示:
command="git-shell -c $SSH_ORIGINAL_COMMAND" ssh-dss AAAAB3NzaC1kc3...
Run Code Online (Sandbox Code Playgroud)
但是,git-shell 甚至不允许我克隆存储库:
dhcp202:git-ws frank$ git clone ssh://gitserver/var/repos/git/myrepo/
Cloning into myrepo...
fatal: What do you think I am? A shell?
fatal: The remote end hung up unexpectedly
Run Code Online (Sandbox Code Playgroud)
任何想法表示赞赏...
我不小心在我应该提交的项目列表中添加了一个目录。现在,当我尝试运行 git rm dirname 时,出现错误
rm 'dirname'
fatal: git rm: 'dirname': Is a directory
Run Code Online (Sandbox Code Playgroud)
我尝试了以下命令git rm -rf dirname和git rm dirname --force,但这些都不起作用。他们都产生了相同的错误信息。
如何防止 dirname 被提交?
我正在使用 git 版本 1.7.0.4
谢谢
补充说明
好吧,它似乎git rm -rf dirname只在某些条件下有效。我进行了一些测试,通常可以正常工作。但是,如果dirname它本身是一个单独控制的 git 存储库,其中包含 .git 目录,它将失败。我有这个设置,因为它dirname是我的许多项目共享的 git 控制框架。
我puppet parser validate在 git pre-commithook 中使用,以便在将文件提交到我们的 Puppet 配置存储库之前发现问题。不幸的是,这个命令似乎是一个非常轻量级的语法检查,它只标记错误,例如不平衡的引号和括号。
该validate命令似乎并未实际解析配置并查找无效属性、未定义引用等内容。例如,以下情况不会导致投诉:
file { 'somefile': requires => File['some-other-file'] }
Run Code Online (Sandbox Code Playgroud)
在这个例子中,requires应该是require. 同样,这也不会产生错误:
file {'somefile': require => File['file-that-does-not-exist']}
Run Code Online (Sandbox Code Playgroud)
没有资源定义file-that-does-not-exist。
有没有办法在不实际应用配置的情况下捕获这些类型的错误?我希望puppet apply命令上有某种标志,可以在不进行更改的情况下完全解析配置,但据我所知,Puppet 2.7.1 中不存在这样的选项。
更新
puppet apply --noop似乎在另一个方向上太努力了。它将尝试stat()在清单中引用的任何文件,如果它尝试stat()当前用户无法访问的文件,这通常会导致它失败并出现权限错误。
其他人在做什么?
为了管理服务器的配置,我将一些配置文件(位于 /etc 中)置于版本控制之下(在主文件夹中),然后从它们的 /etc 位置符号链接到它们:
/etc/someprog/c.conf -> /home/ubuntu/etc-config/someprog/c.conf
Run Code Online (Sandbox Code Playgroud)
这是一个合理的方法吗?任何潜在的缺点?
configuration symbolic-link git configuration-management symlink