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

问题背景:

家中有台笔记本电脑,它是通过家中的路由器与外界联网的,这时,我想通过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. 第三章————用SQL语句操作数据

    第三章————用SQL语句操作数据 *********************新增**************************** 1. insert into 表名(列名1,列名2...) ...

  2. HashTree【转】

    http://blog.csdn.net/yang_yulei/article/details/46337405 在各种数据结构(线性表.树等)中,记录在结构中的相对位置是随机的.因此在机构中查找记录 ...

  3. python 序列化pickle 和 encode的区别

    我们把变量从内存中变成可存储或传输的过程称之为序列化. 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上. 反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即un ...

  4. Docker容器学习与分享01

    1.什么是容器? 容器技术是一种虚拟化的方案,与传统的虚拟机不同,传统的虚拟机是通过中间层将一台或多台独立的机器虚拟运行于物理硬件之上,而容器是直接运行在操作系统内核之上的用户空间. 所以容器虚拟化又 ...

  5. banner图片全屏显示

    <script> $(function () { function reinitSize() { var window_h = $(window).height(); var window ...

  6. 3.定时器的使用(以通俗易懂的语言解释JavaScript)

    1.定时器的作用: 开启定时器:setInterval -->间隔型 setTimeout -->延时型 区别:setInterval会一直执行,应用如微博间隔一段时间不断请求后台数据,看 ...

  7. 单色液晶模块推荐LM6800

  8. <20190106>千兆 小型局域网传输速率不达标问题解决

    故障描述: 三层交换机下挂了 个一层交换机, 全部交换终端包括路由器传输界面意确认全是千兆设备, 其中NAS端到 主机1 的传输速度只有100Mb, 观察主机1 的网络配置,确实连接速度是 100Mb ...

  9. php-kafka

    1.环境依赖 The extension support both PHP 5 and PHP 7. The extension requires » librdkafka >= 0.8 for ...

  10. 使用python制作时间戳转换工具

    使用python制作时间戳转换工具 python 时间戳转日期 日期转时间戳 前言:作为一个程序员一般情况下,json和时间戳是常用的两个工具,我咨询过很多个朋友,他们一般都是通过在线工具对json进 ...