【Linux简单入门】006SSH远程连接,内网穿透
文章目录
一. SSH简介
- SSH,即安全外壳协议(Secure Shell)是一种在不安全网络上用于安全远程登录和其他安全网络服务的协议。
- 简单来说,在Linux中SSH是一个十分常用的工具,通过SSH可以远程控制电脑或服务器。SSH协议的优点是数据的传输是加密的、压缩的,因此,通过SSH可以实现远程、高速、加密的数据传输。
- 考虑到大部分设备不具有公网IP,因此,SSH远程访问分为两种情况:局域网内访问,内网穿透。
二. 局域网内访问远程终端
2.1 在MacOS或Linux上通过SSH远程访问Linux终端(局域网内访问)
- 安装SSH/启动SSH
- 一般Ubuntu都会预安装openssh-client,但不预安装openssh-server,无论怎么讲,初次使用SSH时要先在两个机器中装好SSH。
sudo apt-get install net-tools
sudo apt-get install ssh
sudo apt-get install openssh-server
sudo apt-get install openssh-client
- 查看SSH服务是否启动
sudo ps -e | grep ssh
# 有sshd说明服务已启动,否则执行启动ssh指令
sudo /etc/init.d/ssh ssh start # 启动ssh
# 有ssh-agent说明ssh-client已启动,否则执行
eval ssh-agent
# 其他相关指令
sudo /etc/init.d/ssh ssh stop # 停止ssh
sudo /etc/init.d/ssh ssh restart # 重启ssh
实际上,因为SSH是区分客户端与服务端的,因此没必要两个机器都执行以上所有操作,但常言道此一时彼一时,不一定那天它俩角色就变了,为了方便不如一次性配好。
2. 获取远程目标机器的IP地址
- 可以在目标机器中输入以下指令。
ifconfig
- 一般
ens33
或wlan0
后面的IP号即为IP地址。
- 本地终端中执行以下指令即可构建与目标机器的连接
ssh user_name@IP_adr
# user_name和IP_adr分别是目标机器的用户名与IP地址
# 用户切换成目标用户就说明连接成功了,需要输入登录密码
- 断开连接只需执行退出指令即可
exit
MacOS使用方法类似
2.2 在Windows上通过SSH远程访问Linux终端(局域网内访问)
切记在被访问的机器上装好openssh-server,并开启相关服务
- 下载Windows SSH软件
PuTTY
- 打开PuTTY,Session -> Host Name(or IP adress)里输入目标机器的IP地址->Open。
- 新产生的页面里login as:后输入用户名,然后输密码即可实现远程控制Linux终端。
2.3 在手机上通过SSH远程访问Linux终端(局域网内访问)
切记在被访问的机器上装好openssh-server,并开启相关服务
- 手机上下载SSH软件——JuiceSSH
- 点击 快速连接
- 输入 用户名@IP地址
- 输入密码,记住密码,点击 确定,即可连接远程终端
三. VScode配置Remote-SSH插件实现高效文件传输(局域网中访问)
Remote-SSH插件是基于SSH的,因此使用前要确保本机与远程服务器都已安好了SSH
- 只用终端来传输文件多少有点头大,可以考虑VScode配Remote-SSH插件实现高效传输文件。
- 打开VScode,在扩展中搜索Remote-SSH,安装
- 新建连接,配置config文件
- 填写内容如下
Host connect_name # 连接名字随便取,方便记忆即可
HostName IP_adr # 远程服务器IP地址
User user_name # 用户名
- 保存,在插件栏目下即可看见连接的名字,连接创建成功。
- 再添加新的连接直接在config文件中,仿照上面的格式添加新的内容即可。
- 当然也可以通过下面的方法添加连接,本质上是一样的
- 在对话框中输入SSH的连接指令
ssh user_name@IP_adr
- 然后还得根据引导更新配置文件。
- 文件传输
- 在插件栏目中点击连接上的➕号
- 在新的窗口里输入密码就可以构建连接了。
- 在资源管理器中可以打开任意一个远程服务器上有权限的文件夹,这样就可以实现文件的上传(拖拽)、下载、删除、修改等操作了。
4. 删除某个连接直接在配置文件里把它对应的内容删掉即可。
四. 真正的远程访问——内网穿透
4.1 内网穿透与zerotier简介
- 没有ipv6或公网IP的用户,想在外网访问内网设备只能使用内网穿透技术。
- 常见的内网穿透技术是利用frp,frp是利用具有公网IP的服务器进行流量转发,其连接速度完全取决于三方网络中最低的一端,且公网IP也不是那么容易获得。
- UDP打洞是另一种方法,不用公网IP,而zerotier正是利用UDP打洞实现内网穿透的,其原理是建立泛局域网实现P2P连接,因此其速度可以不受转发服务器的限制。
4.2 添加网络的操作流程
- 实际上操作是很容易的
- 创建账号
- 前往zerotier用户中心(连接速度慢,耐心等待)注册账号(需要邮箱验证)。
- 登录注册好的账号
- 免费账户可以接入25台设备
-
点击右上角的Networks,创建一个新的网络。
-
记下
Network ID
这将是组网的关键一环
-
点击Network ID进入网络设置
- Name,Description可以根据自己需求填写,其他的保持默认即可。
- 下载并安装各平台对应的客户端,并添加网络
Windows
- 双击图标(没有ui出现),去状态栏右下角里找到,右键添加网络(Join Network),输入
Network ID
即可- 不难发现网络权限是Access_DENIED,即,无权限。
- 在刚刚的网络设置界面里,在Members下将网络打上勾,给权限批准,刷新就实现了添加网络,其他平台的也类似,都要授权。
手机
- 手机的安装也是类似,下载客户端,加网络,权限批准。
Linux
# 下载zerotier客户端 curl -s https://install.zerotier.com | sudo bash # 安装完成后,启动zerotier服务 zerotier-one -d # 加入刚刚创建的网络 sudo zerotier-cli join Network ID #离开 sudo zerotier-cli leave Network ID #连接列表 sudo zerotier-cli listnetworks # 启动 sudo systemctl start zerotier-one.service # 停止 sudo systemctl stop zerotier-one.service # 打开开机自启 sudo systemctl enable zerotier-one.service # 关闭开机自启 sudo systemctl disable zerotier-one.service
- 加入成功后,在网络管理页面刷新后应该可以看到新增了一个设备,即为linux主机,授权即可。
- 验证网络连接
- 可以通过
ping IP
的方式验证连接,其中IP是zerotier给分配的代理IP,而非物理IP。 - 至此一个泛局域网就构建完了。
- 小tips
- 注:Win10用Putty连接Ubuntu时可能连不上,或许开启Ubuntu的ssh-agent就好了。
- 注:如果刷新后看不到新增设备可以尝试着重启一下设备。
- 真*远程访问
- 实现内网穿透后,各设备就相当于被接入了一个局域网下,接下来就可以用前面用过的方式进行“真*远程访问”了。
- 注意:SSH连接时用的IP地址是zerotier代理的地址`Managed IPs。
展望
- 远程图形化桌面操作
- 使用Tmux保证会话持续运行
- 远程代码执行
- 受条件约束,慢慢再说吧。
小tips:
- 在通过SSH远程访问虚拟机里的Ubuntu时可能遇到无法访问的问题。
- 这可能是因为虚拟机是通过
NAT模式
进行联网,这样的连接方式会与主机共用IP地址,所以导致SSH无法直接连接虚拟机进而导致连接失败。 - 可以通过更改联网方式解决,选择对应的虚拟机->设置->网络适配器->网络连接->桥接模式(B):直接连接物理网络。通过设置虚拟机直接接入物理网络实现与主机IP分离,进而实现SSH远程访问。