您的当前位置:首页正文

SSH实现端口转发

2024-12-20 来源:华佗小知识

(一) 概述

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超时断线实践

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

热门图文