关于ssh:SSH-只能用于远程-Linux-主机那说明你见识太小了

4次阅读

共计 4873 个字符,预计需要花费 13 分钟才能阅读完成。

起源:DevOps 技术栈

明天为大家分享一篇对于 SSH 的介绍和应用办法的文章。本文从 SSH 是什么登程,讲述了 SSH 的根本用法,之后在近程登录、端口转发等多种场景下进行独立的讲述,心愿能对大家有所帮忙。

什么是 SSH?

SSH 是一种网络协议,用于计算机之间的加密登录。最早的时候,互联网通信都是明文通信,一旦被截获,内容就裸露无疑。1995 年,芬兰学者 Tatu Ylonen 设计了 SSH 协定,将登录信息全副加密,成为互联网安全的一个根本解决方案,迅速在全世界取得推广,目前曾经成为 Linux 零碎的标准配置。

SSH 登录原理

SSH 根本用法

语法:

ssh -p 22 user@host

参数:

  • -p:指定端口号。
  • user:登录的用户名。
  • host:登录的主机。

默认的端口号为 22,当端口号为 22 的时候,能够省略,间接应用如下形式:

ssh user@host

此外,如果本地正在应用的用户名与近程登录的用户名统一,登录用户名也是能够省略的,即如下:

ssh host

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 |grep ssh

应用如下命令进行连贯。

ssh -p 22 root@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 本地网卡地址: 本地端口: 指标地址: 指标端口 用户 @指标地址。

当初咱们利用本地转发来解决一个问题,比方咱们有两台机器,如下:

centos A(192.168.13.139)

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)的 mysql,如下:

那么,当初我开始 centos B(192.168.13.142)限度不容许内部 ip 连贯,仅仅让 127.0.0.1 连贯,如下:

此时,centos A(192.168.13.139)下面怎么连贯上 centos B(192.168.13.142)的 mysql 呢?

此时,咱们还是应用下面的 mysql 连贯形式,必定会报错,如下:

当然在 centos B(192.168.13.142)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

当然,ssh 连贯的时候,若两台机器的用户名雷同,也是能够省略的,即命令能够简写为:

ssh -L 3306:127.0.0.1:3306 192.168.13.14

下面的代码就是将本地的 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)将 3306 端口的数据,通过 SSH 转发到 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 近程网卡地址: 近程端口: 指标地址: 指标端口

上面三台机器为例,如下:

centos A(192.168.13.139)

centos 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)连贯,那么,咱们就能够在 centos A(192.168.13.139)下面应用近程端口转发了,让 win7(10.18.78.135)与 centos B(192.168.13.142)进行通信。

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 机器下面执行如下代码:

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 机器去执行申请。

SSH 存在的问题

如果有人截获了登录申请,而后假冒近程主机,将伪造的公钥发给用户,那么用户很难分别真伪。因为不像 https 协定,SSH 协定的公钥是没有证书核心(CA)公证的,也就是说,都是本人签发的。

能够构想,如果攻击者插在用户与近程主机之间(比方在公共的 wifi 区域),用伪造的公钥,获取用户的登录明码。再用这个明码登录近程主机,那么 SSH 的平安机制就依然如故了。这种危险就是驰名的 ” 中间人攻打 ”(Man-in-the-middle attack)。

总结

本篇文章次要介绍了 SSH 的基本概念和实际中罕用的一些办法,并没有波及深层原理和优化的常识,在底层实现和协定具体内容还能持续深入研究。如果有什么疑难或倡议,能够在下方留言。

正文完
 0