ssh实现办公室电脑连接家中的电脑
友情提示:如果您不知道您家路由器管理页面的密码,请您忽略此文。
问题背景:
家中有台笔记本电脑,它是通过家中的路由器与外界联网的,这时,我想通过ssh服务让公司的电脑能连上我家中的笔记本。
可以画个图更直观地解释一下,如下图
家中路由器的IP地址是外网,也就是说外部的电脑可以访问它。路由器会给家里的每个设备各分配一个独特的IP地址,这个IP地址是只适用于路由器控制的局部范围,而每个设备的外部IP都是相同的,也就是路由器的IP地址:201.23.4.57。这时候,问题来了,我想在A上通过ssh连接B,按照命令,应该在A的命令行输入
ssh guanyuzuike@ip_address
其中,guanyuzuike是我在电脑B上的用户名,那么这个ip_address应该怎样填呢?
如果填192.168.1.103, 那显然是不行的,因为它只是一个局部的IP,外网并不能访问它。如果填201.23.4.57,那么这个时候路由器就有点不爽了,他会问:你到底是要我连哪个设备??
我们的目标:
今天的博客,就是解决帮路由器解决连哪个设备的问题。 具体来说,今天的博客内容将让你实现以下功能:
可以在A命令行输入以下任意一条指令,都可以连上家中的电脑B
# command
ssh guanyuzuike@201.23.4.57
# then input password of guanyuzuike # command
ssh guanyuzuike@xxxxxx
# then input password of guanyuzuike # command
ssh home
# then input password of guanyuzuike # command
ssh home
# no need to input anything
从以上四条指令来看,我们的终极目标是实现第四条指令,然后也不需要输入用户密码,直接连上B。
适用环境及准备:
A安装ssh客户端,B安装ssh服务端并开启ssh服务。
安装客户端请自行上网查询。对于Linux系统,安装ssh服务端和开启的指令为(仅供参考)
sudo apt-get install openssh-server
sudo service ssh start
具体操作:
1. 实现command 1
要连接B,肯定是要通过路由器的外网IP,即201.23.4.57。但是,要引导路由器连上B,必须要借助路由器的接口转发功能。
第一步:登录路由器管理界面
对于大多数路由器,在浏览器输入192.168.1.1即可进入界面(但有的路由器是别的网址,这个时候就需要机智的你研究一下你家路由器了),输入密码登录,进入如图所示的页面(界面风格因路由器各种型号和版本而异,但功能差不多)
第二步:找到接口转发设置窗口
接口转发,也称port forwarding,也称虚拟服务器,比如我的就在高级设置>>高级用户>>虚拟服务器 里面,一般长得差不多,如下
点击添加添加虚拟服务器;
常用服务器不用填,内部端口填22(ssh御用端口),外部端口可与内部端口一样,也可以填个大点的数以防止与现有的端口重复,比如我填2237,IP地址填B的局部IP:192.168.1.103(忽略我图上填的);协议类型选all(有的路由是选both,反正就是支持所有协议的意思)。最后保存。此操作的意思就是让外网通过端口2237给路由器传输命令,让路由器知道我要转发局部IP为192.168.1.103的ssh服务(为什么是ssh服务?因为内部端口22代表ssh服务)。
如果外部端口填的是22,那么此时就可以在A上调用command 1对B进行访问。
如果外部端口填的是别的数,如2237,那么,有两种方式对B进行访问:
方式1, 在A上调用指令:ssh -p 2237 guanyuzuike@201.23.4.57 也就是说在command 1的基础上加上 -p 2237,代表外部端口是2237(默认是22)
方式2, 待会讲。
2. 实现command 2
command 2里面的xxxxxx其实是路由器外网IP的一个域名。为什么要搞一个域名,因为路由器的外网IP不会保证一直不变,也就是说,可能几个月后,它从现在的201.23.4.57会变成201.23.4.44(瞎编的,反正就是一个不同的地址)。这时候,就需要调用ssh -p 2237 guanyuzuike@201.23.4.44。一个字,麻烦。而有一个域名的时候,比如:guanyuzuike.net,那么我可以从始至终,从盘古开天到天荒地老,我一直调用ssh -p 2237 guanyuzuike@guanyuzuike.net,都可以成功连上B。怎么搞?如上图,找到路由管理页面的DDNS,会有一个花生壳的服务,如下
注册一个花生壳账号,需要花点RMB(域名大概8块一个),可以得到一个你设置的个性域名。
3. 实现command 3
上面的命令,看起来总有点麻烦。所以,如何省去 -p 2237,甚至直接调用ssh home ?
好的,请在A打开文件~/.ssh/config(它是一个文本文件,没有的话请直接创建一个这样的文件),输入以下
Host home
User guanyuzuike
Port
HostName guanyuzuike.net
# if you do not have an alias for ip
# HostName 201.23.4.57 #it is your ip address
这里顺便也变上面提到的“方式2”也讲了
4. 实现command 4
以上还是麻烦,因为每次ssh的时候,需要输密码。下面,就可以通过创建ssh key,来解决这个问题。
第一步:在A中,命令行输入
ssh-keygen
Enter file in which to save the key (/home/xx/.ssh/id_rsa): 这里你可以取一个别的名字,比如/home/xx/.ssh/id_home_rsa,xx为你在A上的用户名
这样,在/home/xx/.ssh/下会生成两个文件:id_home_rsa和id_home_rsa.pub。
第二步:在~/.ssh/config(其实也就是/home/xx/.ssh/config)里添加一项:
Host home
User guanyuzuike
Port
HostName guanyuzuike.net
IdentityFile /home/xx/.ssh/id_home_rsa
第三步,打开B中的文件/home/guanyuzuike/.ssh/authorized_keys(同样是一个文本文件,如果没有请创建一个),将刚刚id_home_rsa.pub里面的内容(其实也就是一行内容)复制作为authorized_keys里面的一行。
这样,你就可以在A上简单调用ssh home,连上B,连密码都不用输。
当然,上面说的所有,都是基于以下条件:
你没有遇到其他问题
当你不满足以上条件时,可以采取以下办法:
机智如你,上网查询
祝您愉快。
ssh实现办公室电脑连接家中的电脑的更多相关文章
- 实现一台Linux电脑连接另一台Linux(SSH实现linux之间的免密码登陆)
怎么实现一台Linux电脑连接另一台Linux电脑? 首先查看是否安装ssh服务:systemctl status sshd.service 启动服务:systemctl start sshd.ser ...
- 自建Socket转发,使用远程桌面(mstsc)连接家中电脑
网络结构图如下: 开题先放图,一切全靠编哈哈. 进入正题! 如图所示,我们需要一个公网服务器,利用公网服务器将内网的数据进行转发,从而实现两个内网服务器的通讯.没错,这不是p2p,原本想做成p2p,因 ...
- 转载 - Vultr VPS注册开通且一键快速安装PPTP VPN和电脑连接使用
本文转载来自:https://www.vultrclub.com/139.html 从2014年Vultr VPS进入市场之后,作为有背景.实力的搅局者,是的最近两年VPS.服务器的用户成本降低.配置 ...
- 电脑连接树莓派Pi Zero W
作者:陈拓 chentuo@ms.xab.ac.cn 2018.05.16/2018.06.09 0. 概述 本位介绍两种电脑连接树莓派Pi Zero W的方法: 电脑通过USB以太网连接树莓派Ze ...
- 使用cmd查看电脑连接过的wifi密码并将密码发送至指定邮箱(三)
之前,我写了使用cmd查看电脑连接过的wifi密码(二)和使用cmd查看电脑连接过的wifi密码(一)但其中的功能不完善,在本次的更新中新增了更多的功能,其实2018/10/24 就更新完成了,一直拖 ...
- 查看window系统电脑连接过的wifi密码
电脑连接过的wifi都会有痕迹,包括SSID号和密码等信息,借此可以回查wifi密码信息. 步骤: 1.开始----运行----输入cmd 2.在dos窗口输入以下代码: “for /f " ...
- 如何在阿里云服务器搭建FTP服务器,在本地电脑连接并操作
首先你需要有一个阿里云的ECS服务器 并且开通了公网宽带(话说也不贵,开来玩玩还是可以的,第一次买会比较便宜,第二次买1M的宽带两天是九毛多吧~) 开通了宽带之后,ECS服务器就可以上网了 如果嫌弃阿 ...
- 电脑连接海信电视 HDMI
注意:我们家的电视是海信的,所以不能代表所有的电视哦~~~ 家里电视有线电视已经过期很长时间了,早就想把电脑连接到电视上用电视做显示器的心了,今天来兴趣了,就弄了一下!!! 用电脑连接电视需要先解决两 ...
- 为什么电脑连接不上FTP
我们对服务器的FTP状况有实时监控,一般问题都不在服务器端. 而且我们客服一般会第一时间测试下您空间FTP是否真的不能连接 99%绝大部分FTP连接不上的问题,都是客户那边的软件端或网络问题. 问题分 ...
随机推荐
- Java 中声明和语句
public class Example { int[] arr = new int[4]; // OK! 定义属性并初始化 arr[0] = 1; // 错误! 这是语句,必须写在方法体里 arr[ ...
- Excel表格规范
数据处理: 在数据进行分析使用时,需要去除原始数据中的脏数据,让统计数据均为有效数据: 统一表格的格式:去除空格.强制换行符 CLEAN()函数:是去除单元格中的特殊字符: TRIM()函数:去除单元 ...
- JDBC数据类型、Java数据类型、标准sql类型
本概述是从<JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference>这本书中摘引来的.JavaSoft ...
- 【hexo】01安装
什么是 Hexo? Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 安装前提 安装 Hexo 相当简 ...
- Vue、Vuex+Cookie 实现自动登陆 。
概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...
- 一个比较全面 的web项目实战学习
一个比较全面 的web项目实战学习:http://www.cnblogs.com/jikey/p/3613082.html
- 在Oracle中使用Guid
sys_guid() - 唯一索引 在Oracle中可以用SYS_GUID()来生成一个guid,相当于msSql中的newid(). 在Oracle9i和Oracle 10g 里SYS_GUID ...
- javascript中apply()和call()方法及区别
call()和apply()方法 1.方法定义 call方法: 语法:obj.call(thisObj, arg1, arg2, ...); 定义:调用一个对象的一个方法,以另一个对象替换当前对象. ...
- springboot 传值到页面
每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code <!DOCTYPE html> 2 <html> 3 &l ...
- 【转】wampserver2.5 apache2.4.9配置https 图文
注: 我的wamp环境是2.5版本,apache是2.4.9 装在本地C:wamp 操作系统windows10 1.进入wamp->bin->apache->apache2.4. ...