明天为你们分享一篇关于SSH介绍和使用方式的文章。本文从SSH是哪些出发,述说了SSH的基本用法,然后在远程登陆、端口转发等多种场景下进行独立的述说,希望能对你们有所帮助。实操的话,你们可以参阅《优刻得GlobalSSH新版本支持更改端口加速非UCloudIP》。
哪些是SSH?
哪些是SSH?SSH是一种网路合同,用于计算机之间的加密登入。最早的时侯,互联网通讯都是明文通讯,一旦被查获,内容就曝露无疑。1995年,法国学者TatuYlonen设计了SSH合同,将登陆信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前早已成为Linux系统的标准配置。
SSH登入原理
SSH基本用法
句型:
ssh-p22user@host
参数:-p:指定端标语。user:登入的用户名。host:登陆的主机。默认的端标语为22,当端标语为22的时侯,可以省略,直接使用如下形式:
sshuser@host
据悉,倘若本地正在使用的用户名与远程登陆的用户名一致,登入用户名也是可以省略的,即如下:
sshhost
SSH远程登陆实例
如今我有两台linux虚拟机,前面安装都是centOS6.5,ip分别为192.168.13.135和192.168.13.138,如右图:
如今,我须要操作的是通过SSH在192.168.13.138里面,登陆到192.168.13.135前面。
首先,我们可以使用如下命令,查看两台机器是否启用了ssh。
netstat-ntlp|grepssh
使用如下命令进行联接。
ssh-p22root@192.168.13.135
若在本机上是首次登陆该远程主机,则会出现如下界面。
大致意思就是,难以确认host主机的真实性,只晓得它的私钥指纹,问你还想继续联接吗?输入yes即可。
之后输入密码,即可联接ok了。
要想退出,直接输入exit即可。
SSH端口转发
SSH不仅仅才能手动加密和揭秘SSH顾客端与服务端之间的网路数据,同时,SSH还能否提供了一个十分有用的功能,那就是端口转发,将要TCP端口的网路数据,转发到指定的主机某个端口上,在转发的同时会对数据进行相应的加密及揭秘。假如工作环境中的防火墙限制了一些网路端口的使用,并且容许SSH的联接,这么也是才能通过使用SSH转发后的端口进行通讯。转发,主要分为本地转发与远程转发两种类型。
1.转发的参数
-C:压缩数据
-f:后台认证用户/密码,一般和-N连用,不用登陆到远程主机。
-N:不执行脚本或命令,一般与-f连用。
-g:在-L/-R/-D参数中,容许远程主机联接到构建的转发的端口,倘若不加这个参数,只容许本地主机构建联接。
-L:本地端口:目标IP:目标端口
-D:动态端口转发
-R:远程端口转发
-T:不分配TTY只做代理用
-q:安静模式,不输出错误/警告信息
2.本地转发
有本地网路服务器的某个端口,转发到远程服务器某个端口。说白了就是,将发送到本地端口的恳求,转发到目标端口。格式如下:
ssh-L本地网卡地址:本地端口:目标地址:目标端口用户@目标地址。如今我们借助本地转发来解决一个问题,例如我们有两台机器,如下:
centosA(192.168.13.139)
centosB(192.168.13.142)
如今,centosB(192.168.13.142)机器里面安装了mysql,并设置了运行任何主机联接,如下:
此时,在centosA(192.168.13.139)里面是可以连上centosB(192.168.13.142)的mysql,如下:
这么,如今我开始centosB(192.168.13.142)限制不容许外部ip联接,仅仅让127.0.0.1联接,如下:
此时,centosA(192.168.13.139)里面如何联接上centosB(192.168.13.142)的mysql呢?此时,我们还是使用前面的mysql联接形式,肯定会报错,如下:
其实在centosB(192.168.13.142)mysql还是可访问的。
这个时侯,我们就可以使用SSH本地端口转发了,将本地的某个端口,映射到centosB(192.168.13.142)机器里面的,如下:
ssh-L127.0.0.1:3306:127.0.0.1:3306root@192.168.13.142
由于本地网卡地址是可以省略的,里面的转发,可以缩写为:
ssh-L3306:127.0.0.1:3306root@192.168.13.142
其实,ssh联接的时侯,若两台机器的用户名相同,也是可以省略的,即命令可以缩写为:
ssh-L3306:127.0.0.1:3306192.168.13.14
里面的代码就是将本地的3306端口,转发到192.168.13.142的3306端口。由于centosB(192.168.13.142)里面的mysql使用的3606端口。其实,我们首先得瞧瞧本地的3306端口是否被占用,如被占用,可以使用其他的端口。
数据流向如图:
首先,centosA(192.168.13.139)上的应用将数据发送到本地的127.0.0.1里面的3306端口。
之后,centosA(192.168.13.139)将3306端口的数据,通过SSH转发到centosB(192.168.13.142)的3306端口。
接着linux是什么,centosB(192.168.13.142)将处理后的数据,原路返回给centosA(192.168.13.139)。
假如是首次通过ssh联接cetosB该机器,则会提示确认私钥,并让你选择是否确定联接。
此时,我们在centosA前面联接centosB前面的mysql,就可以如此写了。
bin/mysql-h127.0.0.1-uroot-p
如下:
我们可以通过下边命令,在centosA查看ssh转发窃听的进程。
3.远程转发
由远程服务器的某个端口,转发到本地网路的服务器某个端口。说白了,就是将发送到远程端口的恳求,转发到目标端口。格式如下:
ssh-R远程网卡地址:远程端口:目标地址:目标端口
下边三台机器为例,如下:
centosA(192.168.13.139)
centosB(192.168.13.142)
win7(10.18.78.135)
假定,win7(10.18.78.135)与centosB(192.168.13.142)不能直接联接,而且win7(10.18.78.135)与centosA(192.168.13.139)可以联接centosB(192.168.13.142)也可以centosA(192.168.13.139)联接,这么,我们就可以在centosA(192.168.13.139)里面使用远程端口转发了,让win7(10.18.78.135)与centosB(192.168.13.142)进行通讯。
ssh-R127.0.0.1:80:10.18.78.135:80root@192.168.13.142
即centosB(192.168.13.142)窃听自己的80端口,之后将所有数据,由centosA(192.168.13.139)发给win7(10.18.78.135)。
SSH的远程操作
ssh远程操作,主要用于在远程的机器里面执行某个操作,格式如下:
sshuser@host'command'
案例1、在机器A(192.168.13.148)中查看机器B(192.168.13.149)的操作系统类型。
在A机器里面执行如下代码:
sshdequan@192.168.13.149'uname-a'
案例2、将机器A(192.168.13.148)中test文件夹复制到B机器(192.168.13.149)。
在A机器里面,执行如下命令:
tar-cztest|sshdequan@192.168.13.149'tar-xz'
其实,我们也可以使用scp命令或rz命令,传输文件。
案例3、在机器A(192.168.13.148)处查看B机器(192.168.13.149)是否窃听了1080端口。在A机器里面,执行如下命令:
sshdequan@192.168.13.149'netstat-tln|grep1080'
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-L127.0.01:80:192.168.13.148:80dequan@192.168.13.148
之后,在B机器里面,访问A机器的服务,就想访问自身的服务一样。
SSH的远程转发
远程转发,即把发给远程机器的某个端口恳求,转发到本地的机器里面。格式如下:
ssh-R[远程地址:]远程端口:本地地址:本地端口远程用户@远程地址
在前面的案例中linux 远程连接,我们也可以通过远程转发来实现。即在A机器里面执行如下代码:
sudossh-f-N-R8081:127.0.0.1:80dequan@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
假如有
GatewayPortsno
改为
GatewayPortsyes
没有长春linux培训,添加即可
之后重启sshd
sudoservicesshdrestart
之后重新,设置动态转发,如下:
ssh-f-g-N-R8081:127.0.0.1:80dequan@192.168.13.149
可以看见,此时B机器,早已窃听了0:0.0.0:8081
在C机器里面,我们通过curl模拟恳求,借助B机器做代理linux 远程连接,如下:
curl-x192.168.13.149:8081127.0.0.1
其实,假如还有其他机器,也可以使用类似的方法,来恳求A机器。
SSH的动态转发
对于SSH的本地转发和远程转发,都须要将本地端口和远程端口一一绑定,格式如下:
ssh-D[本地地址:]本地端标语远程用户@远程地址
例如,把发到B机器里面的恳求,都转发到A机器里面,让A机器去执行恳求。
SSH存在的问题
假如有人查获了登陆恳求,之后假扮远程主机,将伪造的私钥发给用户,这么用户很难分辨真假。由于不像https合同,SSH合同的私钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。可以构想,假如功击者插在用户与远程主机之间(例如在公共的wifi区域),用伪造的私钥,获取用户的登陆密码。再用这个密码登入远程主机,这么SSH的安全机制就荡然无存了。这些风险就是知名的"中间人功击"(Man-in-the-middleattack)。
SSH总结
本篇文章主要介绍了SSH的基本概念和实践中常用的一些技巧,并没有涉及深层原理和优化的知识,在底层实现和合同具体内容能够继续深入研究。假如有哪些疑惑或建议,可以在下方留言。