设置:
服务器 A(托管在专用网络中,需要 VPN 访问)
服务器 B(公共托管)
服务器 C(可以假设是我自己的 MacBook)
我使用 此命令autossh
在服务器 A 上设置反向隧道autossh -f -T -M 20002 -o "ServerAliveInterval 10" -o "ServerAliveCountMax 2" -N -R 19999:localhost:22 user@server_b
然后在我的服务器 B 上,
我可以运行ssh localhost -p 199999
来连接我的服务器 A。
服务器 B 还启用了 ssh 端口,22
并且2022
在/etc/ssh/sshd_config
问题陈述:
如何使用ssh user@server_b -p 2022
命令服务器C重定向访问服务器 A隧道来自服务器 B?
概览
macbook -- ssh (端口 2022)--> 服务器 B -- 重定向 ssh ---> 服务器 A
**必须能够执行 scp 任务
答案1
- 要自动使用反向隧道,建议使用
autossh
服务。 - 我建议遵循以下步骤:
- 更改您想要建立隧道的服务器之间的密钥。
- 将您的服务器 A 公钥保存在服务器 B
/home/user/.ssh/authorized_keys
文件中。 - 手动建立第一个连接
ssh user@serverB
并查看连接是否正常工作。 - 对服务器 C 执行相同操作 - 将服务器 B 的公钥保存在服务器 C
/home/user/.ssh/authorized_keys
文件中。 - 手动检查连接。
- 将您的服务器 A 公钥保存在服务器 B
- 现在您必须重定向所需的端口
autossh
- 但首先让我们手动检查一下:- 使用以下方式从本地电脑连接到 A 服务器
ssh user@serverA
- 在服务器 A shell 上 -
ssh
使用以下端口将连接从服务器 A 转发到服务器 Bssh -R <portX>:localhost:22 user@serverB
- 在你的服务器 B shell 上- 端口转发服务器A
ssh
隧道与ssh -R <portY>:localhost:<portX> user@serverC
。 - 现在在您的本地电脑上打开另一个终端(不关闭现有终端)并尝试使用重定向隧道,该隧道
ssh user@serverC -p <portY>
将按照特定顺序通过服务器 C 和 B 连接到服务器 A。
- 使用以下方式从本地电脑连接到 A 服务器
- 现在,隧道似乎运行良好,我们可以通过创建服务来自动化该过程
autossh
(这是我正在使用的):
[Unit]
Description=Keeps a tunnel to 'VPS' open
After=network-online.target
[Service]
User=root
ExecStart=/usr/bin/autossh -M portZ -i /root/.ssh/id_ed25519 -o "ExitOnForwardFaliure=yes" -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -N -R portX:127.0.0.1:22 [email protected]
Environment=AUTOSSH_GATETIME=0
Restart=always
RestartSec=3
StartLimitIntervalSec=0
StartLimitAction=reboot
StartLimitBurst=0
[Install]
WantedBy=multi-user.target
现在,如果您想scp
从服务器 A 复制某些内容到您的计算机中,只需在本地 PC 终端上运行以下命令:
scp -P <portY> user@serverC:/path/path/filename localpcpath/path/.
注意:我的回答假设您已经创建ssh keys
并且您的sshd_config
文件配置良好。