友情提示:如果您不知道您家路由器管理页面的密码,请您忽略此文。

问题背景:

家中有台笔记本电脑,它是通过家中的路由器与外界联网的,这时,我想通过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实现办公室电脑连接家中的电脑的更多相关文章

  1. 实现一台Linux电脑连接另一台Linux(SSH实现linux之间的免密码登陆)

    怎么实现一台Linux电脑连接另一台Linux电脑? 首先查看是否安装ssh服务:systemctl status sshd.service 启动服务:systemctl start sshd.ser ...

  2. 自建Socket转发,使用远程桌面(mstsc)连接家中电脑

    网络结构图如下: 开题先放图,一切全靠编哈哈. 进入正题! 如图所示,我们需要一个公网服务器,利用公网服务器将内网的数据进行转发,从而实现两个内网服务器的通讯.没错,这不是p2p,原本想做成p2p,因 ...

  3. 转载 - Vultr VPS注册开通且一键快速安装PPTP VPN和电脑连接使用

    本文转载来自:https://www.vultrclub.com/139.html 从2014年Vultr VPS进入市场之后,作为有背景.实力的搅局者,是的最近两年VPS.服务器的用户成本降低.配置 ...

  4. 电脑连接树莓派Pi Zero W

    作者:陈拓 chentuo@ms.xab.ac.cn 2018.05.16/2018.06.09 0.  概述 本位介绍两种电脑连接树莓派Pi Zero W的方法: 电脑通过USB以太网连接树莓派Ze ...

  5. 使用cmd查看电脑连接过的wifi密码并将密码发送至指定邮箱(三)

    之前,我写了使用cmd查看电脑连接过的wifi密码(二)和使用cmd查看电脑连接过的wifi密码(一)但其中的功能不完善,在本次的更新中新增了更多的功能,其实2018/10/24 就更新完成了,一直拖 ...

  6. 查看window系统电脑连接过的wifi密码

    电脑连接过的wifi都会有痕迹,包括SSID号和密码等信息,借此可以回查wifi密码信息. 步骤: 1.开始----运行----输入cmd 2.在dos窗口输入以下代码: “for /f " ...

  7. 如何在阿里云服务器搭建FTP服务器,在本地电脑连接并操作

    首先你需要有一个阿里云的ECS服务器 并且开通了公网宽带(话说也不贵,开来玩玩还是可以的,第一次买会比较便宜,第二次买1M的宽带两天是九毛多吧~) 开通了宽带之后,ECS服务器就可以上网了 如果嫌弃阿 ...

  8. 电脑连接海信电视 HDMI

    注意:我们家的电视是海信的,所以不能代表所有的电视哦~~~ 家里电视有线电视已经过期很长时间了,早就想把电脑连接到电视上用电视做显示器的心了,今天来兴趣了,就弄了一下!!! 用电脑连接电视需要先解决两 ...

  9. 为什么电脑连接不上FTP

    我们对服务器的FTP状况有实时监控,一般问题都不在服务器端. 而且我们客服一般会第一时间测试下您空间FTP是否真的不能连接 99%绝大部分FTP连接不上的问题,都是客户那边的软件端或网络问题. 问题分 ...

随机推荐

  1. Java 中声明和语句

    public class Example { int[] arr = new int[4]; // OK! 定义属性并初始化 arr[0] = 1; // 错误! 这是语句,必须写在方法体里 arr[ ...

  2. Excel表格规范

    数据处理: 在数据进行分析使用时,需要去除原始数据中的脏数据,让统计数据均为有效数据: 统一表格的格式:去除空格.强制换行符 CLEAN()函数:是去除单元格中的特殊字符: TRIM()函数:去除单元 ...

  3. JDBC数据类型、Java数据类型、标准sql类型

    本概述是从<JDBCTM Database Access from JavaTM: A Tutorial and Annotated Reference>这本书中摘引来的.JavaSoft ...

  4. 【hexo】01安装

    什么是 Hexo? Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 安装前提 安装 Hexo 相当简 ...

  5. Vue、Vuex+Cookie 实现自动登陆 。

    概述 1.自动登陆实现思路. 2.vuex + cookie 多标签页状态保持. 自动登陆的需求: 1.登陆时勾选自动登陆,退出登陆或登陆到期后再次登陆后自动填写表单(记住密码)或访问登陆页自动登陆. ...

  6. 一个比较全面 的web项目实战学习

    一个比较全面 的web项目实战学习:http://www.cnblogs.com/jikey/p/3613082.html

  7. 在Oracle中使用Guid

    sys_guid()  -  唯一索引 在Oracle中可以用SYS_GUID()来生成一个guid,相当于msSql中的newid(). 在Oracle9i和Oracle 10g 里SYS_GUID ...

  8. javascript中apply()和call()方法及区别

    call()和apply()方法 1.方法定义 call方法: 语法:obj.call(thisObj, arg1, arg2, ...); 定义:调用一个对象的一个方法,以另一个对象替换当前对象. ...

  9. springboot 传值到页面

    每天学习一点点 编程PDF电子书.视频教程免费下载:http://www.shitanlife.com/code   <!DOCTYPE html> 2 <html> 3 &l ...

  10. 【转】wampserver2.5 apache2.4.9配置https 图文

    注: 我的wamp环境是2.5版本,apache是2.4.9 装在本地C:wamp 操作系统windows10   1.进入wamp->bin->apache->apache2.4. ...