【环境配置】反向SSH 您所在的位置:网站首页 反向代理实现过程怎么写 【环境配置】反向SSH

【环境配置】反向SSH

2024-07-10 10:02| 来源: 网络整理| 查看: 265

1. 需求描述 1.1 具体情境

实验室有一台校园内网GPU服务器,校园内网的特点是只允许内网机器主动访问外网机器,而不允许外网机器主动访问内网机器。

现在需要使用家中的电脑(无公网IP的机器,其可能是另一个单位内网或家用路由器分配IP的机器),通过ssh控制校园内网的GPU服务器。

1.2 实现思路

假设校园内网的GPU服务器为机器A,在家中的电脑为机器C,具有公网IP的云服务器为B(公网IP的机器B需要购买阿里云或者腾讯云的服务器)。

在这里插入图片描述

由于机器B具有公网IP,机器C和机器A都可以通过主动连接找到机器B,所以我们可以将B作为A与B之间的桥梁。

首先使用机器 A 通过反向 ssh 连接机器 B ,然后机器 C 使用 ssh 连接 B 就可以通过该反向 ssh 对 A 进行操作了。

1.3 实现要求 能使用家中的电脑 C 通过 ssh 对校园内网GPU服务器 A 进行操作每当GPU服务器 A 开机,就自动连接云服务器 B (前提是要确保机器A能访问外网) 2. 配置过程 (以下指令全部在机器 A 中执行) 校园内网GPU服务器(机器A): 公网IP:无 用户名:gpu401 腾讯云(机器B): 公网IP: 666.666.666.666 用户名:ubuntu 2.1 配置autossh免密登陆 (A连接B) # 设置ssh免密码登录,使得 A 能免密码登录 B ssh-keygen -t rsa # 一路回车,生成的id_rsa.pub文件在~/.ssh/文件夹里面。 # 将 A 中的这个key推送到vps,使用如下命令进行推送到 B ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] -p 22 # 安装autossh,其能确保 A-B 之间的 反向 ssh 能断线自动重连 apt-get install autossh # 测试 autossh + 免密登录是否成功。 autossh -M 9991 -NfR 8990:localhost:22 [email protected] ''' 如果该测试指令在 A 执行后,当 B 执行指令 'watch -n 1 netstat -tnlp' 能 看到以下红框的端口号,则说明测试通过。 '''

[外链图片转存失败(img-1geVStzi-1562760515809)(715FB3E711184BC9B5BE7FCBBD510187)]

2.2 配置 A 开机启动反向ssh # 使用systemctl来控制服务的注册以及启动 # 创建autossh.service vim /lib/systemd/system/autossh.service # 将下面的内容加进去 [Unit] Description=Auto SSH Tunnel After=network-online.target [Service] User=gpu401 Type=simple ExecStart=/usr/bin/autossh -NR 9888:localhost:22 -i /home/gpu401/.ssh/id_rsa [email protected] -p 22 >> /dev/null 2>&1 ExecReload=/bin/kill -HUP $MAINPID ExecStop=/bin/kill -TERM $MAINPID KillMode=process Restart=no [Install] WantedBy=multi-user.target WantedBy=graphical.target

注意,由于当时是使用了 机器A 中的用户 gpu401 来免密登录 机器B 的, 因此上述配置文件中 [Service] 的 User 和 ExecStart 都需要进行正确配置。

# 之后执行 systemctl enable autossh systemctl start autossh # 使用以下指令,查看是否成功启动 systemctl status autossh ''' 如果运行成功,当 B 执行指令 'watch -n 1 netstat -tnlp' 能 看到以下红框的端口号,则说明测试通过。 '''

[外链图片转存失败(img-j7HtYCa2-1562760515810)(40B54C728F2540319A67D4E272AD2C32)]

3. 使用示例(以下指令全部在机器C中执行) 3.1 使用机器 C 登录 机器A # 首先机器 C 通过 ssh 登录机器 B,然后在 shell 中输入以下指令登录机器A: ssh -p 9888 [email protected] 3.2 上\下传文件 # 从机器 A 下载整个目录到机器 B scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录) # 从机器 A 上传目录到机器 B scp -r local_dir username@servername:remote_dir # 上传文件同理,取消参数 '-r' 即可 scp local_fileName username@servername:remote_dir


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有