SSH只能用于远程Linux主机?那说明你见识太小了!
共 4791字,需浏览 10分钟
·
2020-09-12 00:21
开源Linux
长按二维码加关注~
什么是SSH?
2
SSH登录原理
3
SSH基本用法
语法:
ssh -p 22 user@host
默认的端口号为22,当端口号为22的时候,可以省略,直接使用如下方式:
ssh user@host
此外,如果本地正在使用的用户名与远程登录的用户名一致,登录用户名也是可以省略的,即如下:
ssh host
4
SSH远程登录实例
现在我有两台Linux虚拟机,上面安装都是centOS6.5,ip分别为192.168.13.135和192.168.13.138,如下图:
netstat -ntlp |grep ssh
使用如下命令进行连接:
ssh -p 22 root@192.168.13.135
5
SSH端口转发
SSH 不仅仅能够自动加密和解密SSH客户端与服务端之间的网络数据,同时SSH 还提供了一个非常有用的功能,那就是端口转发,即 将TCP 端口的网络数据,转发到指定主机的某个端口上,在转发的同时会对数据进行相应的加密及解密。如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH连接,那么也是能够通过使用SSH转发后的端口进行通信。
SSH端口转发,主要分为本地转发与远程转发两种类型。
1.端口转发命令参数
-C:压缩数据
-f :后台认证用户/密码,通常和-N连用,不用登录到远程主机。
-N :不执行脚本或命令,通常与-f连用。
-g :在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。
-L : 本地端口:目标IP:目标端口
-D : 动态端口转发
-R : 远程端口转发
-T :不分配 TTY 只做代理用
-q :安静模式,不输出 错误/警告 信息
2.本地转发
ssh -L 本地网卡地址:本地端口:目标地址:目标端口 用户@目标地址
centos A(192.168.13.139)
centos B(192.168.13.142,安装MySQL)
现在,centos B机器上面安装了mysql,并设置了允许任何主机连接,如下:
此时,在centos A是可以连上centos B的mysql,如下:
此时,centos A怎么连接上centos B的mysql呢?
当然在centos B(本机)mysql还是可访问的。
这个时候,我们就可以使用本地端口转发了,将本地的某个端口,映射到centos B(192.168.13.142)机器上面的。
如下:
ssh -L 127.0.0.1:3306:127.0.0.1:3306 root@192.168.13.142
因为本地网卡地址是可以省略的,上面的转发,可以简写为:
ssh -L 3306:127.0.0.1:3306 root@192.168.13.142
上面的代码就是将本地的3306端口,转发到192.168.13.142的3306端口。因为centos B(192.168.13.142)上面的mysql使用的3306端口。当然,我们首先得看看本地的3306端口是否被占用,如被占用,可以使用其他的端口。
数据流向如图:
ssh -L 3306:127.0.0.1:3306 192.168.13.142(简写)
此时,我们在centos A上连接centos B上面的mysql,就可以这么写了。
bin/mysql -h127.0.0.1 -uroot -p
我们可以通过下面命令,在centosA上查看ssh转发监听的进程。
3.远程转发
ssh -R 远程网卡地址:远程端口:目标地址:目标端口
centos A(192.168.13.139)
centos B(192.168.13.142)
win7(10.18.78.135)
ssh -R 127.0.0.1:80:10.18.78.135:80 root@192.168.13.142
6
SSH的远程操作
ssh远程操作,主要用于在远程机器上面执行某个操作,格式如下:
ssh user@host 'command'
ssh root@192.168.13.149 'uname -a'
tar -cz test | ssh root@192.168.13.149 'tar -xz'
ssh dequan@192.168.13.149 'netstat -tln |grep 1080'
7
SSH的本地转发
本地转发,说白了,就是把发到本地的某个端口请求,转发到远程的某台机器上面。格式如下:
ssh -L [本地地址:]本地端口:远程地址:远程端口 远程用户@远程地址
案例1:
在机器B(192.168.13.149)上面访问机器A(192.168.13.148)的服务。
我们希望B机器也能够这样使用A机器上面的服务。需要把B机器上面80端口请求,转发到A机器上面。目前在B机器这样执行,是报错的,如下:
ssh -f -N -L 127.0.0.1:80:192.168.13.148:80 dequan@192.168.13.148
然后,在B机器上面,访问A机器的服务,就像访问自身的服务一样。
8
SSH的远程转发
远程转发,即把发给远程机器的某个端口请求,转发到本地的机器上面。格式如下:
ssh -R [远程地址:]远程端口:本地地址:本地端口 远程用户@远程地址
在上面的案例中,我们也可以通过远程转发来实现。即在A机器上面执行如下代码:
ssh -f -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
1、利用远程转发,实现代理功能
vim /etc/ssh/sshd_config
如果有
GatewayPorts no
改为
GatewayPorts yes
没有,添加即可
然后重启sshd
service sshd restart
ssh -f -g -N -R 8081:127.0.0.1:80 dequan@192.168.13.149
curl -x 192.168.13.149:8081 127.0.0.1
当然,如果还有其他机器,也可以使用类似的方式,来请求A机器。
9
SSH的动态转发
ssh -D [本地地址:]本地端口号 远程用户@远程地址
比如,把发到B机器上面的请求,都转发到A机器上面,让A机器去执行请求。
10
SSH存在的问题
11
总结
本篇文章主要介绍了SSH的基本概念和实践中常用的一些方法,并没有涉及深层原理和优化的知识,在底层实现和协议具体内容还能继续深入研究。如果有什么疑问或建议,可以在下方留言。