意图:能够lan-example.com
从任何开发环境部署;无论是直接从虚拟操作系统还是任何单操作系统,甚至通过互联网使用存储在 Keepass 中的一个 SSH 密钥。我目前无法从 Vagrant 的操作系统中执行此操作,除非我明确生成自己的密钥并在我的每个部署服务器中授权它。我相信做我想要做的事情的方式是通过用户代理转发,对吗?
主机操作系统
- Windows 7 x64
- puttygen 生成的 SSH 密钥:
C:\Users\Administrator\.ssh\id_rsa.ppk
- Keepass 和 Keeagent 存储了我的 SSH 密钥。Keeagent 设置为“代理”模式
- pageant.exe已安装但未运行
- 如果我希望使用我的密钥连接到外部/内部 LAN 服务器,Putty 会遵从 Keeagent - Putty 不会在其配置中存储私钥位置。
C:\用户\管理员.ssh\config
Host 192.168.55.2
ForwardAgent yes
Vagrant文件
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.network :private_network, ip: '192.168.55.2'
config.ssh.forward_agent = true
# Why would I need to set this if Keeagent is handling things?
config.ssh.private_key_path = '~/.ssh/id_rsa_jake_mitchell.ppk'
end
客户操作系统 (Vagrant)
- Ubuntu x64
- 192.168.55.2,仅可通过主机访问
- 不存在 SSH 密钥
/home/vagrant/.ssh
(我删除了它们)。目的是让通过主机操作系统(Keeagent)进行的用户代理转发负责使用密钥
LAN Web 主机(内部网网站)
- 假设它的域名是
lan-example.com
- 它仅允许使用 id_rsa.ppk 公钥进行 SSH 无密码登录
- 192.168.0.2
- sshd 中启用了用户代理转发
问题:
lan-example.com
有效的方法(使用主机操作系统):Putty,无需明确引用 SSH 密钥即可连接。
不起作用的是(使用客户操作系统):因为它显示没有任何可用的键。ssh -v [email protected]
我注意到了Keeagent 测试版允许我设置 SSH_AUTH_SOCK。我已经这样做了,并设置了一个允许客户操作系统读取文件的 NFS 共享;但是这并没有改变任何东西。代理转发在这种环境中如何工作?Windows 有什么不同导致此操作失败?
答案1
通过网络文件系统共享套接字文件将不起作用,因为 Windows 套接字和 Linux 套接字是完全不同的概念 — VM 中的 Linux 不知道如何使用 Windows 套接字。为了确保 VM 可以利用主机上的身份验证代理,需要在两个都ssh 客户端和服务器,然后ssh
通过主机进入 VM(而不是直接登录 VM 控制台)。
假设:
- 根据原始帖子,SSH 服务器代理转发设置已完成(我没有使用过 Vagrant,所以无法判断);
- Keeagent 设置已完成并正在运行(我已经尝试过客户端模式但在处理非 RSA/DSA 密钥时出现一些问题,所以代理模式更安全);
在putty
配置文件设置下,勾选连接 → SSH → Auth 下的“允许代理转发”选项,以便为客户端打开代理转发。或者,如果在主机上使用 Cygwin ssh,则有 2 个选择:
- 安装ssh-盛会
~/.profile
并使其使用 cygwin (in等)自动启动。 - 在 Keeagent 设置中指定所需的 Windows 套接字文件位置,并将
$SSH_AUTH_SOCK
cygwin 中的变量设置为相应的位置。
要检查代理转发是否正常工作,请通过 ssh 进入 VM 并检查变量$SSH_AUTH_SOCK
。如果它不为空且指向存在的 Linux 套接字文件,则一切正常。如果变量为空,则表示缺少某些内容。