资讯专栏INFORMATION COLUMN

聊一聊SSH

ChristmasBoy / 1385人阅读

摘要:本文主要是对的概念和用法做一些简单的梳理,大神请绕道。年,芬兰学者设计了协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为系统的标准配置。

如果你对NodeJs系列感兴趣,欢迎关注微信公众号:前端神盾局 或 github NodeJs系列文章

身为一枚合格的搬砖工程师,笔者经常需要登录服务器去查看日志或者部署应用,ssh也随之成为最常用的linux命令之一。本文主要是对SSH的概念和用法做一些简单的梳理,大神请绕道。

什么是SSH

SSH是一种加密的网络传输协议,可在不安全的网络中为网络服务提供相对安全的传输环境。任何网络服务都可以通过SSH实现安全传输,但日常使用最多的还是远程登录服务器。

// 登录一台端口为22,用户名为username,ip地址为xx.xx.xx.xx的远程主机
ssh -p 22 username@xx.xx.xx.xx

早先,互联网通信基本是裸奔的(明文传输),这使得内容很容易被窃取或监听。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

那SSH是如何实现加密的呢?整个过程如下:

远程主机收到用户的登录请求,把自己的公钥发给用户;

用户使用这个公钥,将登录密码加密后,发送回来。

远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。

当然这个过程并不是万无一失的,依旧存在“中间人攻击”的风险,具体可参考阮一峰老师的文章:SSH原理与运用(一):远程登录

本地端口转发

在实际项目中,笔者经常遇到这样的一种情况:由于测试环境中数据库和开发数据库的没有同步,导致笔者无法很好的复现bug。

那有同学问,为什么不直接连到测试服务器呢?原因很简单,连不上。测试环境数据库服务器并没有对外开放。

所以刚开始的时候,笔者为此相当苦恼,每次需要验证数据的时候,都要先把测试环境中数据导出再导入到开发环境中,这样一趟下来十几分钟过去了...

那有什么方法可以连到测试数据库呢?

有的,使用ssh本地端口转发

先来描述一下场景,host1(106.xx.xxx.xx)是远程主机,是可以对外访问的;host2是内网主机(10.xx.xxx.x 安装了mongo数据库),只能通过host1访问,无法连接外网。

我们需要两个步骤实现本地端口转发

创建本地服务器

const http = require("http");
const server = http.createServer(function(req,res){});
server.listen(5000);

这里我们创建了一个端口为5000的本地服务

ssh转发

ssh -L 5000:10.xx.xxx.x:27017 username@106.xx.xxx.xx

命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口5000,然后指定host1将所有的数据,转发到目标主机host2的27017端口。

运行命令,随后我们在浏览器中打开http://localhost:5000,可以看到页面显示如下:

It looks like you are trying to access MongoDB over HTTP on the native driver port.

这表示我们连接成功~

ssh命令挺长的,还有各种ip地址...有没有简化版呢?

好吧~我们可以使用tunnel-ssh改造一下

const tunnel = require("tunnel-ssh");
const server = tunnel({
    keepAlive: true,
    // host1
    host: "106.xx.xxx.xx",
    username: "superTerrorist",
    password: "xxxx",
    port: 22,
    // 内网主机 host2
    dstHost: "10.xx.xxx.x",
    dstPort: 27017,
    // 本地端口
    localPort: 5000,
},async function(error,server){
    if(error){
        console.log(error);
        return;
    }
    console.log("ssh tunnel connected");
});

这里我们使用了第三方包tunnel-ssh实现了本地转发的功能,每次我们只要使用node script.js即可,这比使用ssh清爽多了。如果各位同学还有更好的方法,欢迎在此留言讨论

参考

Secure Shell

鸟哥的Linux私房菜

SSH原理与运用

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/63375.html

相关文章

  • [一聊系列]一聊WEB前端安全那些事儿

    摘要:所以今天,就和大家一起聊一聊前端的安全那些事儿。我们就聊一聊前端工程师们需要注意的那些安全知识。殊不知,这不仅仅是违反了的标准而已,也同样会被黑客所利用。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/blog... 随着互联网的发达,各种WEB应用也变得越来越复杂,满足了用户的各种需求...

    AZmake 评论0 收藏0
  • [一聊系列]一聊网页的分段传输与渲染那些事儿

    摘要:欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面不仅仅是代码这一节,请跟随笔者聊一聊,网页的分段传输与渲染,用一些非常规手段优化我们的网站响应速度。可以处理完一块就返回一块,让浏览器尽早的接收到,可以先行渲染。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/...

    thursday 评论0 收藏0
  • [一聊系列]一聊前端功能统计那些事儿

    摘要:欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面不仅仅是代码什么是功能统计作为一名开发,我们的产品发布出去之后,无论是产品还是运营,其实都是想及时了解产品对用户产生的影响的。下一章,我们将继续聊聊速度统计。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/bl...

    PAMPANG 评论0 收藏0
  • [一聊系列]一聊前端功能统计那些事儿

    摘要:欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面不仅仅是代码什么是功能统计作为一名开发,我们的产品发布出去之后,无论是产品还是运营,其实都是想及时了解产品对用户产生的影响的。下一章,我们将继续聊聊速度统计。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/bl...

    zhoutk 评论0 收藏0
  • [一聊系列]一聊前端功能统计那些事儿

    摘要:欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面不仅仅是代码什么是功能统计作为一名开发,我们的产品发布出去之后,无论是产品还是运营,其实都是想及时了解产品对用户产生的影响的。下一章,我们将继续聊聊速度统计。 欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码):https://segmentfault.com/bl...

    妤锋シ 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<