@donghanyuan0609
2023-04-18T20:30:58.000000Z
字数 1774
阅读 161
跳板机公网 IP 地址:8.141.164.33
,端口对应规则:所内 10.3.2.10x
对应的是跳板机的 410x
端口,例如 10.3.2.102
的 SSH 对应跳板机的 4102 端口。
所有所内机器的 SSH 均只能使用 publickey 方式认证,不支持密码登录。
在 ~/.ssh/config
中添加如下的主机信息:
# 在计算所内网访问
Host ACT102
Hostname 10.3.2.102
User donghanyuan
Port 22
IdentityFile ~/.ssh/id_rsa
# 外网访问并在本地 10890 端口开启 SSH Tunnel
Host ACT102-Jump
Hostname 8.141.164.33
User donghanyuan
Port 4102
IdentityFile ~/.ssh/id_rsa
DynamicForward 10890
# 通过 SSH Tunnel 连接内网中的 102
Host ACT102-Outside
Hostname 10.3.2.102
User donghanyuan
Port 22
IdentityFile ~/.ssh/id_rsa
ProxyCommand connect -S 127.0.0.1:10890 %h %p
# 通过 SSH Tunnel 链接 GitLab
Host Git105-Outside
Hostname 10.3.2.105
User git
Port 22
IdentityFile ~/.ssh/id_rsa
ProxyCommand connect -S 127.0.0.1:10890 %h %p
以上参考配置中请将我的用户名 donghanyuan
修改成自己的用户名。
在 GNU/Linux 系统下,如果找不到 connect
命令( command not found: connect
),则需要安装 connect-proxy
软件包,例如在 Debian/Ubuntu 系统下执行 sudo apt-get install -y connect-proxy
命令以安装。在 Windows 系统下,该程序位于 Git 安装目录下的 mingw64\bin\connect.exe
,例如 Git 安装在 C:\Program Files\Git
,则应将上述配置文件 ProxyCommand
中的 connect
替换为绝对路径 "C:\\Program Files\\Git\\mingw64\\bin\\connect.exe"
(注意双引号与反斜杠转义)。
首先用终端开启一条作为隧道的 SSH 连接(-N
表示不执行任何命令,只建立连接,按 Ctrl+C 可断开):
ssh -N ACT102-Jump
将执行这条命令的终端置于后台,此时本地的 10890 端口作为 SSH Tunnel 被启用,之后可用以下命令连接所内的服务器, VSCode 的 Remote-SSH 插件同样可连,且可以同时建立多个 SSH 连接。
ssh ACT102-Outside
测试 GitLab 连通性:
ssh Git105-Outside
如返回 Welcome to GitLab, @<Your Username>
即为可用。
从 GitLab 上 clone 仓库:如果在服务器上,直接按网页给出的 SSH 地址;如果在自己本地,将所给地址中的 10.3.2.105
改成上述配置中的 Git105-Outside
。以下为示例:
# 在服务器上 clone
git clone git@10.3.2.105:zhangyulong/paper-report.git
# 在本地 clone
git clone git@Git105-Outside:zhangyulong/paper-report.git
补充:可使用支持断线自动重连的 AutoSSH 代替普通的 SSH 命令用来打通 Tunnel 以提高稳定性,建立连接后同样应将此终端置于后台。参考命令:
autossh -M 0 -N ACT102-Jump
使用 SwitchyOmega 浏览器插件,首先需要建立 SSH Tunnel 连接,然后建立两个 Profile :
127.0.0.1:10890
10.3.2.*
指向上述 Proxy,其余指向 Direct切换到刚创建的 Switch Profile 即可在浏览器上访问所内 GitLab。