阿里云内网穿透

学习链接
需求:用笔记本C 通过有公网ip的阿里云服务器B 连接内网A
ABC都需要配置

内网A

将A的ssh密钥生成出来,然后传输给B。在A上执行下面的命令来完成密钥的生成和传输操作:
ssh-keygen -t rsa -C ‘ccc@B’
ssh-copy-id root@123.123.123.123

在进行ssh-keygen操作时,一路回车,什么都不要输入。

安装autossh,Ubuntu系统下直接执行命令:
sudo apt-get install autossh 就完成了autossh的安装
然后执行autossh命令就可以:
autossh -M 1234 -fCNR 7280:localhost:22 root@123.123.123.123
参数解释如下:
-M 表示监视端口,用1234端口监视7280这个ssh隧道端口是否中断,中断的话就进行重连

公网B

对阿里云安全组策略进行设置,开放2315(外网的机器C进行ssh链接),7280(服务器端用来做本地端口转发),1234(用作autossh的自动监听端口)端口。优先级随意

编辑服务器上的sshd的配置文件 /etc/ssh/sshd_config ,将GatewayPorts的开关打开
GatewayPorts yes
如果sshd_config中没有该项,手动加入即可。

设置服务器端的本地端口转发
ssh -fCNL *:2315:localhost:7280 localhost
参数解释如下:
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
*:2315:localhost:7280 表示将任何IP的2315发来的数据转发给本机的7280端口
注意区分参数大小写!

至此,服务器端的设置已经完成

自动启动autossh

虽然前面我们已经实现了内网穿透,但是每次重新开机的话,都需要手动启动autossh命令,这是比较麻烦的,因此我们这里设置一下,让机器A开机,就以用户ccc的身份去自动运行一下autossh命令(只用用户ccc能免密登陆外网服务器B,因此需要指定运行命令的用户)

我们通过对/etc/rc.local文件的修改来达到我们的目的,输入命令:
sudo vim /etc/rc.local
运行后,在exit 0命令前加上下面的命令
su -c ‘autossh -M 1234 -fCNR 7280:localhost:22 root@123.123.123.123’ ccc &
这样,我们就可以实现开机自动建立连接了。

同理,服务器B端也可以进行同样的操作,以实现开机自动建立连接。

参考链接:
链接1
链接2
链接3
xshell公钥上传服务器

公网B出现 channel 2: open failed: connect failed: Connection refused 与 The authenticity of host ‘127.0.0.1 (127.0.0.1)’ can’t be established

这个问题最开始是我在自己电脑连接xshell时跳出

Connecting to xxxx...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(阿里云穿透) at 19:26:24.

Type `help' to learn how to use Xshell prompt.

但是内网A明明可以上外网且能ping通阿里云服务器的ip

问题根源:
之前我自己更换了公钥所引发的

内网A排查了一圈没问题

继续从外网B排查

出现

channel 2: open failed: connect failed: Connection refused

这个问题,kill掉ssh之后就好了,所以可聚焦到ssh有问题

后面的报错是我在
输入 ssh -fCNL *:2315:localhost:7280 localhost 后报出的

The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? 
Host key verification failed

原因是:
用OpenSSH的人都知ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告,避免你受到DNS Hijack之类的攻击。

解决办法:
修改/etc/ssh/ssh_config文件(或$HOME/.ssh/config)中的配置,添加如下两行配置:

StrictHostKeyChecking no
UserKnownHostsFile /dev/null

/etc/init.d/sshd restart 重启即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值