ssh反向连接

先介绍一下我这里的情况: 公司的电脑是在内部网里面,不可能有公网地址;家里的电脑是adsl拨号,有动态的公网IP,动态绑定到域名 xxx.xxx.org
如果现在想从家里ssh到公司的电脑,直接连接肯定是不行的,不过可以用以下方法:
1. 在公司电脑上执行: ssh -f -N -R 12121:localhost:22 xxx@xxx.xxx.org
2. 然后在家里的电脑上执行: ssh xxxx@localhost -p 12121 就可以成功连上公司的电脑了.

上面命令里面的 12121 是任一个本地端口(上面例子里面是家里电脑的端口),可以在合理的范围内任意指定.我的理解是这样的: 前一个命令相当于把公司机器的22端口(localhost:22) 映射到 家里机器的12121端口. 然后在家里电脑上直接ssh 本机的 12121 端口,数据就会被转发到公司机器了.就这么简单.

### 实现SSH反向连接以登录到远程设备 为了实现从远程服务器通过SSH登录本地PC的功能,即所谓的SSH反向连接,需要按照特定的方式设置SSH客户端和服务端。以下是具体的配置方法: #### 设置无密码认证 为了避免每次建立反向连接时都需要手动输入密码,建议先配置基于密钥的身份验证方式。可以通过`ssh-copy-id`工具将本地公钥复制到远程服务器上,以便后续无需再输入密码即可完成身份验证。 ```bash ssh-copy-id user@remote_host_ip ``` 这条命令会提示输入当前用户的密码用于首次认证,并自动将本机的SSH公钥追加至远程主机指定账户下的授权密钥文件中[^4]。 #### 创建并启用Systemd服务单元文件 为了让反向隧道能够随系统启动而自动激活,可以创建一个新的systemd服务来管理这一过程。编辑一个名为`reverse_ssh.service`的服务定义文件,在其中指明执行的具体指令以及依赖关系等信息。 ```ini [Unit] Description=Reverse SSH Tunnel Service After=network.target [Service] ExecStart=/usr/bin/autossh -M 0 -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" \ -R remote_port:localhost:local_port user@remote_host_ip -p ssh_port Restart=on-failure [Install] WantedBy=default.target ``` 在此示例中,`-R`参数用来设定远端开放给外部访问的端口号(`remote_port`)映射成本地机器上的某个端口(`local_port`);`user@remote_host_ip`代表目标远程服务器的信息;`ssh_port`则是对方开启SSH服务所监听的TCP端口,默认情况下为22。 #### 使用Autossh保持稳定连接 考虑到普通的SSH连接可能会因为网络波动等原因意外断开,推荐利用`autossh`程序代替标准SSH命令发起请求。它能够在检测到链接失效后尝试重新建立新的通道,确保长期稳定的通信环境。 最后一步就是保存上述修改过的service文件到适当位置(通常是`/etc/systemd/system/`目录下),接着加载新服务并通过`systemctl start reverse_ssh && systemctl enable reverse_ssh`使其立即生效并且设为开机自启项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值