-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46553
- shell命令
-
- 文章:(42)篇
- 阅读:154227
- Git教程
-
- 文章:(36)篇
- 阅读:234843
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131787
-
SSH的深入使用详解2019-01-06 13:33 阅读(5350) 评论(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机器去执行请求。