• 你好!欢迎你的到来
  • 关于我们
  • 首页 博客 学习笔记 技术导航 工具
  • 博文分类
    • PHP(43)
    • MySQL(11)
    • Linux(28)
    • html(3)
    • JQuery(4)
    • JavaScript(9)
    • svn(2)
    • CSS(2)
    • seajs(1)
    • go(44)
    • redis(1)
    • nginx(8)
    • mongo(0)
    • java(0)
    • 算法(0)
    • 其他(26)
    • 生活(1)
    专栏
    • Jquery基础教程
      • 文章:(15)篇
      • 阅读:29563
    • shell命令
      • 文章:(42)篇
      • 阅读:97250
    • Git教程
      • 文章:(36)篇
      • 阅读:165687
    • leetCode刷题
      • 文章:(76)篇
      • 阅读:48037
    • 摘要视图
    • 目录视图
    SSH的深入使用详解
    2019-01-06 13:33 阅读(3075) 评论(0)

    一、概述

    在“SSH的初步使用详解”文章中,大致过了一遍,ssh的相关内容,在这篇文章中,着重学习一下ssh的远程操作和转发。

    二、ssh的远程操作

    ssh远程操作,主要用于在远程的机器上面执行某个操作,格式如下:

    ssh user@host 'command'

    案例1、在机器A(192.168.13.148)中查看机器B(192.168.13.149)的操作系统类型

    在A机器上面执行如下代码:

    ssh  dequan@192.168.13.149  'uname -a'

    案例2、将机器A(192.168.13.148)中test文件夹复制到B机器(192.168.13.149)

    在A机器上面,执行如下命令:

     tar -cz test | ssh dequan@192.168.13.149 'tar -xz'

    当然,我们也可以使用scp命令或rz命令,传输文件。

    案例3、在机器A(192.168.13.148)觞查看B机器(192.168.13.149)是否监听了1080端口

    在A机器上面,执行如下命令:

    ssh dequan@192.168.13.149 'netstat -tln |grep 1080'

    三、ssh的本地转发

    本地转发,说白了,就是把发到本地的某个端口请求,转发到远程的某台机器上面。格式如下:

    ssh -L  [本地地址:]本地端口:远程地址:远程地址 远程用户@远程地址

    案例1、在机器B(192.168.13.149)上面访问机器A(192.168.13.148)的服务

    现在,我们在A机器上面,启动了Nginx服务,如下:

    我们希望B机器也能够这样使用A机器上面的服务。需要把B机器上面80端口请求,转发到A机器上面。目前在B机器这样执行,是报错的,如下:

    需要在B机器上面,执行如下代码:

    ssh -f -N -L 127.0.01:80:192.168.13.148:80 dequan@192.168.13.148

    然后,在B机器上面,访问A机器的服务,就想访问自身的服务一样。

    四、ssh的远程转发

    远程转发,即把发给远程机器的某个端口请求,转发到本地的机器上面。格式如下:

    ssh -R [远程地址:]远程地址:本地地址:本地地址 远程用户@远程地址

    在上面的案例中,我们也可以通过远程转发来实现。即在A机器上面执行如下代码:

    sudo ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

    我们监听了B机器的8081端口,把该端口的请求,转发到A机器上面。

    可以在B机器上面看到,我们的监听,如下:

    此时,执行如下命令,就会被转发到A机器的127.0.0.1的80端口,如下:

    1、利用远程转发,实现代理功能

    目前B机器,只能在自己127.0.0.1的80端口监听并转发,如何让B机器作为代理,转发其他机器的请求到A机器上面呢?

    比如,现在有一台机器C(192.168.13.143),C不能访问A,但是能够访问B。如何让C利用B来访问A呢?

    此时,需要将B的监听,由127.0.0.1:8081,改为0:0.0.0:8081

    修改sshd的配置/etc/ssh/sshd_config

    vim /etc/ssh/sshd_config
    
    如果有
    GatewayPorts no
    改为
    GatewayPorts yes
    
    没有,添加即可

    然后重启sshd

    sudo service sshd restart

    然后重新,设置动态转发,如下:

     ssh -f -g  -N -R 8081:127.0.0.1:80 dequan@192.168.13.149

    可以看到,此时B机器,已经监听了0:0.0.0:8081

    在C机器上面,我们通过curl模拟请求,利用B机器做代理,如下:

     curl -x 192.168.13.149:8081 127.0.0.1

    当然,如果还有其他机器,也可以使用类似的方式,来请求A机器。

    五、ssh的动态转发

    对于SSH的本地转发和远程转发,都需要将本地端口和远程端口一一绑定,格式如下:

    ssh -D [本地地址:]本地端口号 远程用户@远程地址

    比如,把发到B机器上面的请求,都转发到A机器上面,让A机器去执行请求。

    本文为原创文章,请尊重辛勤劳动,如需转载,请保留本文地址
    http://www.findme.wang/blog/detail/id/541.html

    若您感觉本站文章不错,读后有收获,不妨赞助一下?

    我要赞助

    您还可以分享给朋友哦

    更多
    顶
    2
    踩
    0
    • 上一篇: Go中字符串转换为数组或切片
    • 下一篇: go语言中方法的接受者是指针和对象的区别是什么
    • 查看评论
    • 正在加载中...
    • 留言
    • 亲,您还没有登录,登录后留言不需要审核哦!
      可以使用如下方式登录哦!
  • CSDN | 新浪微博 | github | 关于我们 | 我要留言 | 友链申请
  • 豫ICP备18038193号    Copyright ©lidequan All Rights Reserved