(一) 概述
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]
- 例子
- 远程登录服务器
ssh root@123.123.123.123
- 远程创建一个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 便可以科学上网