假设我在私有网络上有一个 svn 主机,我们将其称为my_work_svn
。我无法从外部访问它,但我可以从一台我们称为 的机器上访问它my_work_ssh
(假设我在一台名为 的计算机上工作my_home
)。
现在,如果我想检出存储库,我可以执行以下操作:
ssh my_work_ssh
svn co my_work_svn/master my_checked_out_repo
# CTRL+D to quit ssh session from my_work_ssh
scp my_work_ssh:my_checked_out_repo my_local_repo
但这看起来很长而且很复杂,我如何用一个命令来完成这个任务?
答案1
这可以通过使用 ssh 隧道(和/或 ProxyCommands)来简化
这住在.ssh/config
。如果你没有窗户就不知道。
定义你的堡垒主机
Host my_work_ssh Hostname some.hostname.com User usename IdentityFile ~/.ssh/id_rsa_work_ssh
定义你的 svn
Host my_work_svn HostName svn.internal.domain IdentityFile ~/.ssh/root/id_rsa_work_ssh ProxyCommand ssh my_work_ssh exec nc %h %p 2>/dev/null
- 至少连接一次
my_work_ssh
并将my_work_svn
known_hosts 条目复制到您的桌面。 - 现在您可以
ssh my_work_svn
从台式机执行,并且会发生以下情况:- 你将首先自动连接到 my_work_ssh
- 将举行一次 nc 会议
my_work_svn
- 所有通信都将通过此 nc 会话转发
最终效果是,您使用中间主机绕过 FW。这适用于 ssh 和 scp(svn+ssh 只是其中的 ssh 和 svn 命令)。
请注意:
- 公钥设置更受欢迎且速度更快
- ProxyCommand 有时很挑剔
my_work_ssh
必须在计算机上启用 AgentForwarding