技术&日志

反向穿透ssh从外网访问内网主机

机器代号 机器位置 地址 账号 ssh/sshd 端口 是否需要运行sshd
A 公网 阿里云IP root 22
B 内网 localhost jw 22
C 测试 localhost test 22

配置步骤

  1. ssh-keygen -t rsa [B] 生成钥匙-直接回车默认在.ssh下,然后一路回车,不输入密码,直接创建完毕
  2. cat ~/.ssh/id_rsa.pub | ssh root@阿里云IP 'cat >> .ssh/authorized_keys' [B] 把生成的公钥传输至A
  3. ssh -NfR 1111:localhost:22 root@阿里云IP -p 22 [B] 内网主机B主动连接服务器A
  4. ss -ant |grep 1111 [A] 服务器A上看到他的1111端口已经开始监听
  5. ssh jw@阿里云IP -p1111 [C] 测试连接成功

优化

autossh -M 2222 -NfR 1111:localhost:22 username@servername -p 22 [将上面第3步换成这个] 反向ssh可能会不稳定,主机B对服务器A的端口映射可能会断掉,那么这时候就需要主机B重新链接,而显然远在外地的我无法登陆B

问题记录

Q: 操作步骤5出现: ssh_exchange_identification: read: Connection reset by peer
A: [B]机器上未安装或未启动ssd ubuntu安装 apt-get install openssh-server


Q: 操作步骤3出现:Warning: remote port forwarding failed for listen port 1111
A: 重复操作,机器[A]上已经对1111端口开始监听需要登录到[A]上 sudo netstat -apn | grep 1111 kill -s 9 [进程ID], 再次执行步骤3成功.


Q: authorized_keys 文件不存在?
A: 可以自己手动创建 更多

相关资料

利用反向ssh从外网访问内网主机
SSH远程登录+内网穿透

—————更新 2018年7月21日16:19:37 ————————

sudo vi /etc/ssh/sshd_config TCPKeepAlive yes _打开保持tcp连接设置

CentOS-7中官方去除了源: autossh, 一下为手动编译安装. 转自文章

  $ sudo apt-get install gcc make

  $ wget http://fossies.org/linux/privat/autossh-1.4e.tgz

  $ tar -xf autossh-1.4e.tgz

  $ cd autossh-1.4e

  $ ./configure

  $ make

  $ sudo make install

如果autossh-1.4e.tgz网站中无法下载可以从网盘获取后上传到服务器中: 链接:https://pan.baidu.com/s/180PZK-I2rR6oibIz3KJ7rQ 密码:g00f