我在服务器上有一个远程 mercurial 存储库(由 hg-gateway 管理)。该服务器的访问权限不向公众开放;但是,防火墙允许 ssh 代理。
如何配置 Windows 客户端以使用 tortoisehg 访问该存储库?
请注意,它不同于这,因为这个问题不涉及代理。我正在寻找 windows 等效的
Host remote-dev
user mercurialuser
ProxyCommand ssh -q firewalluser@firewall
用于访问 mercurial repo
hg clone ssh://remote-dev/repo
我找到了一个可行的解决方案,我将在下面的答案中发布它,以造福社区。
答案1
系统管理假设位于本文末尾。
- 从以下网址下载并安装 putty、plink、pageant 和 puttygen这里
- 如果您没有 ssh 密钥,请启动 puttygen 并:
- 如果已经有一个 Linux 生成的密钥:
- 选择“加载现有私钥文件”
- 选择适当的文件(必须更改文件扩展名过滤器)
- 插入密码
- 选择“保存私钥”
- 别的,
- 选择“生成密钥”
- 随机移动鼠标
- 选择“保存私钥”
- 选择“保存公钥”
- 如果已经有一个 Linux 生成的密钥:
- 向您的系统管理员发送公钥而不是私钥!(系统管理员:阅读下文)
- 运行 Windows 命令提示符(开始 > 运行并输入“cmd”)并启动“pageant.exe”
- 右键单击图标栏中的图标,‘添加键’
- 选择你之前保存的私钥,输入密码
启动腻子
- 在主机名中输入:你的存储库服务器的 IP 地址
- 将会话保存为“
remote-dev
”(任何名称都可以) - 转到连接>代理
- 选择“本地”作为代理类型
- 代理主机名:您的防火墙 DNS 条目或 IP 地址
- 端口:(
22
或任何适合 ssh 进入防火墙的端口) - 用户名:(
hg
或防火墙上在 .ssh/authorized_files 中拥有您的公共 ssh 密钥的任何用户) - 在“telnet 命令或本地代理”中将内容替换为“
FULLPATH\plink.exe -v -nc %host:%port %user@%proxyhost
”(注意使用可执行文件 plink.exe 的完整路径。例如 c:\plink.exe) - 转到连接>数据
- 自动登录用户名:hg(或存储库服务器上运行 hg-gateway 的任何用户)
- 返回“会话”
- 点击“保存”保存会话
- 点击“打开”
你应该看到类似
Using username "hg". Authenticating with public key "imported-openssh-key" from agent Welcome to XXX code repository server! Your SSH access is restricted by hg-gateway. Summary of repos you have access to:
立即下载并安装乌龟
- 启动 tortoisehg 工作台
- 文件 > 克隆存储库
- 源:ssh://
remote-dev
/repo-name
(remote-dev 必须与您在 putty 中调用的会话相匹配!) - 目的地:选择您的当地目的地
- 点击“克隆”
- 就是这样。
允许用户访问远程仓库:
- 将公共 ssh 密钥添加到防火墙上
.ssh/authorized_keys
的用户hg
- 用于
hg-gateway
将该用户的密钥添加到hg
服务器上的用户
注意:putty 倾向于生成 .ppk 格式的密钥;它们必须转换为一行 ssh 密钥。Google 是你的好朋友。
假设:
- 防火墙上有一个名为“
hg
”的用户,其.ssh/autorhized_keys
文件包含必须访问存储库的所有用户的公钥 防火墙的文件 /etc/ssh/sshd_config 包含类似以下内容的行:
Match Group dev ForceCommand nc -q0 reposerver_ip 22
因此用户无法指定要连接的主机。用户“
hg
”显然属于 unix 组“dev
”。