美文网首页
SSH实现端口转发

SSH实现端口转发

作者: 46f31ed46b17 | 来源:发表于2018-06-21 19:22 被阅读32次

    (一) 概述

    SSH协议使用加密来保护客户端和服务器之间的连接。所有用户身份验证,命令,输出和文件传输均经过加密以防止网络中的攻击。这一个过程有时也可以称之为 "隧道" (tunneling).。

    SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、等基于TCP应用提供一个安全的“通道”,此外,我们可以通过SSH端口转发实现不同网络的应用的通讯。

    ssh

    (二)SSH功能

    > ssh --h
    usage: ssh [-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
               [-D [bind_address:]port] [-e escape_char] [-F configfile]
               [-I pkcs11] [-i identity_file]
               [-L [bind_address:]port:host:hostport]
               [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
               [-R [bind_address:]port:host:hostport] [-S ctl_path]
               [-W host:port] [-w local_tun[:remote_tun]]
               [user@]hostname [command]
    

    (1)远程连接

    ssh 远程连接是我们最常用的功能,我们通过 ssh 可以连接到远程服务器执行命令。

    • 格式:
    ssh  [user@]host [command]
    
    • 例子
    1. 远程登录服务器
    ssh root@123.123.123.123
    
    1. 远程创建一个test目录(适合执行远程简单的脚本等)
    ssh root@123.123.123.123 mkdir test 
    

    (2)本地端口转发

    将本地机(客户机)的某个端口转发到远端指定机器的指定端口;本地端口转发是在localhost上监听一个端口,所有访问这个端口的数据都会通过ssh 隧道传输到远端的对应端口。

    • 格式:
    ssh -L [<localhost>:]<local port>:<remote host>:<remote port> <SSHhostname>
    

    Localhost参数可省略,默认为0:0:0:0,但为了安全性考虑务必使用127.0.0.1作为本地监听端口。

    • 例子
      服务器A 访问 服务器B 【正常】
      服务器A 访问 服务器C 【失败】
      服务器B 访问 服务器C 【正常】
      实现:A 正常访问 C 的 5432端口的数据库服务
    localhost: ssh -CfNg -L 5432:10.2.202.94:5432 root@198.216.3.213
    

    1. localhost:在A主机上执行
    2. -CfNg:
    -C: 压缩数据传输;
    -N:不执行脚本或命令,通常与-f连用
    -f: 后台认证用户/密码,通常与-N连用,不用登陆到远程主机
    -g::允许远程主机连接到建立的转发端口,如果不加这个参数,只允许本地主机建立连接
    3. -L: 本地端口转发标志
    4. 5432:即A主机监听的端口是5432
    5. 10.2.202.94:5432: C主机的IP及端口
    6. root@198.216.3.213: B主机,也可以称作为跳转机

    (3)远程端口转发

    将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口;远程端口转发是在远程主机上监听一个端口,所有访问远程服务器的指定端口的数据都会通过ssh 隧道传输到本地的对应端口。

    • 格式:
    ssh -R [<localhost>:]<local port>:<remote host>:<remote port> <SSHhostname>
    
    • 例子
      服务器A 访问 服务器B 【失败】
      服务器B 访问 服务器A 【正常】
      服务器B 访问 服务器C 【正常】
      (如:A有公网地址,B内网但是可以上网,C不可以上网,但与B可以互通)
    localhost:ssh -CfNg -R 3000:198.218.192.20:3000 root@123.123.123.123
    

    1. localhost:在B主机上执行
    2. -CfNg: 同上
    3. -R: 远程端口转发标志
    4. 3000:在远程A主机监听端口3000
    5. 198.218.192.20:3000: C主机的IP及端口
    6. root@123.123.123.123: A主机
    该命令会建立一条隧道,将远程A主机(123.123.123.123)3000端口所有的数据通过B主机(198.216.15.203)转发给C主机(198.218.192.20)的3000端口。当访问A主机的3000时候就相当于访问C主机的3000端口。
    该命令可以实现内网穿透,比如你的内网程序需要一个公网地址的提供服务

    (4)动态端口转发

    把远端ssh服务器当作了一个安全的代理服务器,建立一个动态的SOCKS4/5的代理通道,紧接着的是本地监听的端口号;动态端口转发是建立一个ssh加密的SOCKS4/5代理通道,任何支持SOCKS4/5协议的程序都可以使用这个加密的通道来进行代理访问,现在这种方法最常用的地方就是翻墙。

    • 格式:
    ssh -D [<localhost>:]<local port> <SSH hostname>
    
    • 例子
      服务器A 国外服务器
      服务器B 无法翻墙
      服务器B 访问 服务器A 【正常】
    localhost: ssh -D 1080 root@123.123.123.123
    

    1. localhost:在B主机上执行
    2. root@123.123.123.123: A主机
    3. 设置浏览器的代理 B:1080 便可以科学上网

    (三)SSH实践

    ssh配置文件

    ssh超时断线实践

    相关文章

      网友评论

          本文标题:SSH实现端口转发

          本文链接:https://www.haomeiwen.com/subject/ohtcyftx.html