本文的内容
显示
1.
什么是宋承宪?
2.
SSH登录原理
3.
SSH的基本用法
4.
SSH远程登录实例
5.
SSH端口转发
6.
SSH的远程操作
7.
SSH的本地转发
8.
SSH的远程转发
9.
SSH的动态转发
10.
SSH存在的问题
11.
SSH摘要
11.1.
推荐阅读
今天给大家分享一篇关于SSH的介绍和使用的文章。本文从什么是SSH入手,讲述SSH的基本用法,然后在远程登录、端口转发等多种场景下独立讲述,希望对大家有所帮助。实际操作请参考《优刻得GlobalSSH新版本支持修改端口加速非UCloud IP》。
什么是宋承宪?
什么是宋承宪?SSH是用于计算机之间加密登录的网络协议。最早的时候,互联网通信是纯文本通信。一旦被截获,内容无疑就暴露了。1995年,芬兰学者Tatuylon设计了SSH协议,对所有登录信息进行加密,成为互联网安全的基本解决方案,并迅速在全球推广。目前已经成为Linux系统的标准配置。
SSH登录原理
SSH的基本用法
语法:
ssh-p22用户@主机
参数:-p:指定端口号。用户:登录用户名。主机:登录的主机。默认端口号是22。当端口号为22时,可以省略,直接使用以下方法:
ssh用户@主机
另外,如果本地使用的用户名与远程登录的用户名一致,也可以省略登录用户名,即:
ssh主机
SSH远程登录实例
现在我有两台linux虚拟机,都安装了centOS6.5,ip分别为192.168.13.135和192.168.13.138,如下图:
现在,我需要做的是通过SSH登录到192.168.13.138。
首先,我们可以使用下面的命令来查看两台机器上是否都启用了ssh。
netstat -ntlp |grep ssh
使用以下命令进行连接。
ssh -p 22 root@192.168.13.135
如果是第一次登录本机的远程主机,会出现如下界面。
我无法确认主机的真实性,只知道它的公钥指纹。您想继续连接吗?只要输入是。
然后输入密码,就可以连接ok了。
如果想退出,直接回车退出即可。
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本地网卡地址:本地端口:目的地址:目的端口user @目的地址。现在我们使用本地转发来解决一个问题,例如我们有两台机器,如下所示:
厘斯A(192.168.13.139)
百分位数B(192.168.13.142)
现在,mysql安装在centos B(192.168.13.142)机器上,并且设置了任何主机连接,如下所示:
此时,centos B(192.168.13.142)的mysql可以连接到centos A(192.168.13.139),如下所示:
所以,现在我启动centos B(192.168.13.142)限制外部ip连接,只让127.0.0.1连接,如下:
此时,如何将centos B(192.168.13.142)的mysql连接到centos A(192.168.13.139)?此时,我们仍然使用上面的mysql连接方法,我们肯定会报错,如下:
当然,在CentOS B (192.168.13.142)中仍然可以访问MySQL。
此时,我们可以使用SSH本地端口转发,并将一个本地端口映射到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
当然,ssh连接时,如果两台机器的用户名相同,也可以省略,即命令可以缩写为:
ssh -L 3306:127.0.0.1:3306
上面的代码是将本地端口3306转发到192.168.13.142的端口3306。因为centos B(192.168.13.142)上的mysql使用的是3606端口。当然,首先要检查本地端口3306是否被占用。如果是,我们可以使用其他端口。
数据流向如图所示:
首先,centos A(192.168.13.139)上的应用程序将数据发送到本地127.0.0.1上的端口3306。
然后,centos A(192.168.13.139)通过SSH将3306端口的数据转发到centos B(192.168.13.142)的3306端口。
然后,centos B(192.168.13.142)将处理后的数据返回给centos A(192.168.13.139)。
如果是第一次通过ssh连接cetosB,会提示您确认公钥,让您选择是否确认连接。
此时,我们可以通过连接centos A和CentOS B上的mysql来编写这个。
bin/mysql -h127.0.0.1 -uroot -p
如下所示:
我们可以通过下面的命令在centosA中检查ssh转发监控的进度。
3.远程转发
它从远程服务器的端口被转发到本地网络的服务器的端口。说白了就是把发送到远程端口的请求转发到目标端口。格式如下:
Ssh -R远程NIC地址:远程端口:目标地址:目标端口
以下面三台机器为例,如下:
厘斯A(192.168.13.139)
百分位数B(192.168.13.142)
win7(10.18.78.135)
假设win7(10.18.78.135)和centos B(192.168.13.142)不能直连。但是win7(10.18.78.135)和centos A(192.168.13.139)可以连接到centos B(192.168.13.142)或者centos A(192.168.13.139),那么,
ssh-R 127 . 0 . 0 . 1:80:10 . 18 . 78 . 135:80 root @ 192 . 168 . 13 . 142
即centos B(192.168.13.142)监听自己的端口80,然后将centos A(192.168.13.139)的所有数据发送到win7(10.18.78.135)。
SSH的远程操作
Ssh远程操作主要用于在远程机器上执行操作,格式如下:
ssh user@host \'command\ '
案例1:在机器A(192.168.13.148)中检查机器B(192.168.13.149)的操作系统类型。
在机器A上执行以下代码:
宋承宪de quan @ 192 . 168 . 13 . 149 \ ' uname-a \ '
案例2:将测试文件夹从机器A(192.168.13.148)复制到机器B (192.168.13.149)。
在机器A上,执行以下命令:
tar -cz测试|宋承宪dequan@192.168.13.149 \'tar -xz\ '
当然,我们也可以使用scp命令或rz命令来传输文件。
情况3:在机器A(192.168.13.148)处检查机器B (192.168.13.149)是否正在监听端口1080。在机器A上,执行以下命令:
宋承宪de quan @ 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德全@192.168.13.148
然后,在B机器上,访问A机器的服务就像访问自己的服务一样。
SSH的远程转发
远程转发是指将发送到远程机器的端口请求转发到本地机器。格式如下:
Ssh-R[远程地址:]远程端口:本地地址:本地端口远程用户@远程地址
以上情况,我们也可以通过远程转发来实现。也就是说,在机器A上执行以下代码:
须藤ssh -f -N -R 8081:127.0.0.1:80德全@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: 8081,并修改sshd /etc/ssh/sshd_config的配置。
vim /etc/ssh/sshd_config
如果有
网关端口编号
代替
登机口是的
不,只是添加它。
然后重启sshd。
sudo服务sshd重新启动
然后再次设置动态转发,如下所示:
ssh -f -g -N -R 8081:127.0.0.1:80德全@192.168.13.149
如你所见,此时B机一直在监听0:0.0.0:8081。
在C机器上,我们通过curl模拟请求,并使用B机器作为代理,如下所示:
卷曲-x 192.168.13.149:8081 127.0.0.1
当然,如果有其他机器,也可以用类似的方式请求机器a。
SSH的动态转发
对于SSH的本地转发和远程转发,本地端口和远程端口都需要一一绑定,格式如下:
ssh-D[本地地址:]本地端口号远程用户@远程地址
例如,将发送给机器B的所有请求转发给机器A,并让机器A执行这些请求。
SSH存在的问题
如果有人拦截登录请求,然后冒充远程主机,向用户发送伪造的公钥,用户很难辨别真伪。因为和https协议不同的是,SSH协议的公钥没有经过认证机构(CA)的公证,也就是都是自己签名的。可以想象,如果在用户和远程主机之间插入攻击者(比如在公共wifi区域),用伪造的公钥就可以获得用户的登录密码。然后用这个密码登录远程主机,SSH的安全机制就没了。这种风险就是著名的“中间人攻击”。
SSH摘要
本文主要介绍SSH的基本概念和实践中常用的一些方法,不涉及深层原理和优化的知识。底层实现和协议的具体内容可以进一步研究。如果有什么问题或者建议,可以在下面留言。
西部数码代理(chenqinet.cn)是工信部批准的正规老牌云服务商,拥有ISP、云牌照、IDC、CDN全业务资质。自成立以来,二十多年来一直专注于域名注册,虚拟主机,云服务器,企业邮箱,企业网站建立等互联网基础服务!
公司开发的云计算平台以便捷、高效、高性价比、意想不到的售后优势占领市场,跻身国内前三的接入服务商,为国内超过50万家网站提供高速稳定的托管服务!先后荣获中国高新技术企业、中国优秀云计算服务商、中国十大IDC企业、中国最受欢迎云服务商等称号!
目前西部数码代理高性能云服务器在售,最低仅售48元!
http://zhuji.chenqinet.cn/cloudhost/