当前位置:   article > 正文

Linux ssh服务_ssh -p 2233

ssh -p 2233

1、什么是ssh

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

ssh --》 secure shell 安全的shell
remote login program  --远程登陆程序,默认端口:TCP 22
对数据进行加密传输的服务,主要用在远程登陆,还用在scp,俩台机器之间传输文件。
  • 1
  • 2
  • 3

2、协议相关

ssh协议是应用层协议。根据ssh协议实现的服务叫ssh服务。
ssh服务主要是在HP-UX,LINUX,AIX,UNIX系统上都有,windows上没有
ftp协议也是应用层的协议,根据协议实现的服务叫ftp服务。
  • 1
  • 2
  • 3

3、登录方式与原理

方式

1、密码登陆

ssh -p 22 user@host
# 如果本地正在使用的用户名与远程登录的用户名一致,登录用户名也是可以省略的 
ssh host
  • 1
  • 2
  • 3

2、密钥登陆(免密码登录)

# ssh选项
   -l  指定登陆的用户名
   -p  指定server的端口
   -i  指定私钥文件,默认会在~/.ssh/去找私钥
   -o  接特定设置选项
# 无需输入yes,自动保存hostkey
ssh -o StrictHostKeyChecking=no 192.168.0.132 -p 223
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

原理

在这里插入图片描述

4、认证

SSH基于公钥加密(非对称加密)技术。
数据加密传输。客户端和服务器的身份验证。

#查看ssh服务是否启动
[root@sanchuang ~]# ps -ef |grep ssh  # 查看进程
[root@sanchuang ~]# pidof sshd    # 查看某个进程是否有pid
2742 2736 867  
  • 1
  • 2
  • 3
  • 4

pidof命令用于查找指定名称的进程的进程号id号
-s:仅返回一个进程号;
-c:仅显示具有相同“root”目录的进程;
-x:显示由脚本开启的进程;
-o:指定不显示的进程ID。

[root@sanchuang ~]# netstat -aptln |grep ssh  # 查看网络连接监听状态
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      867/sshd            
tcp        0     36 192.168.49.135:22       192.168.49.1:51429      ESTABLISHED 2736/sshd: root [pr 
tcp6       0      0 :::22                   :::*                    LISTEN      867/sshd  
#0.0.0.0:22表示在本机所有ip上监听22端口
#0.0.0.0:*  表示允许任意ip,任意端口客户端来连接
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[root@sanchuang ~]# lsof -i:22  # list open file 	列出打开的文件(全称),知道端口后可以查看具体端口
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     867 root    5u  IPv4  25177      0t0  TCP *:ssh (LISTEN)
sshd     867 root    7u  IPv6  25185      0t0  TCP *:ssh (LISTEN)
sshd    2736 root    5u  IPv4  90178      0t0  TCP sanchuang:ssh->192.168.49.1:51429 (ESTABLISHED)
sshd    2742 root    5u  IPv4  90178      0t0  TCP sanchuang:ssh->192.168.49.1:51429 (ESTABLISHED)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
#查看命令属于哪个包
[root@sanchuang ~]# which netstat  #找到命令的绝对路径
/usr/bin/netstat
[root@sanchuang ~]# rpm -qf /usr/bin/netstat  #查看这个绝对路径执行文件属于哪个包
net-tools-2.0-0.51.20160912git.el8.x86_64
  • 1
  • 2
  • 3
  • 4
  • 5

5、加密技术

5.1、公钥和私钥

公钥和私钥是成对生成的,这两个密钥互不相同,两个密钥可以互相加密和解密 ;
不能根据一个密钥而推算出另外一个密钥;
公钥对外公开,私钥只有私钥的持有人才知道; 
私钥应该由密钥的持有人妥善保管; 
根据实现的功能不同,可以分为数据加密和数字签名;
  • 1
  • 2
  • 3
  • 4
  • 5

5.2、对称加密

加解密的钥匙是同一把。

- a机器给b机器传输东西,a机器知道一串密码叫做aa,b机器也知道这个密码叫做aa;
- a机器对数据用aa加密,b机器用aa解密。
- 2个加密解密都用同一个密钥(加密的钥匙A和B都知道)。
  形成的条件是a和b都知道密钥是什么,且都一样
#注:问题 很难保证这个密钥不被泄漏。
  • 1
  • 2
  • 3
  • 4
  • 5

5.3、非对称加密

生成一对公私钥,私钥自己保管,公钥可以给其他人。
公私钥对是成对存在的,一个用于加密,一个用于解密。具体哪个为私钥,哪个为公钥就看使用者自己管理。

- a机器和b机器进行数据加密传输(进行通讯)。
- a机器在本地生成1个public和private的钥匙对,a机器生成公钥和私钥都放在a机器上.
- 发送数据时,a机器先把公钥给b(也可以把公钥给c,公钥可以给任何人),                但是私钥只有自己a机器才知道。
- b机器用a机器给的公钥加密,a机器收到后用私钥解密 
  • 1
  • 2
  • 3
  • 4

生成一对公私钥,私钥自己保管,公钥可以给其他人。
公私钥对是成对存在的,一个用于加密,一个用于解密。
具体哪个为私钥,哪个为公钥就看使用者自己管理。

注意:
使用公钥进行加密,私钥解密,基本用于数据加密(eg:密码登录)
使用私钥加密公钥解密,用于认证(eg:公钥认证即免密登录)

5.4、对比

  • 对称加密:
    优点:速度快;
    缺点:维护困难、安全性得不到保障;
  • 非对称加密:
    优点:易于维护;
    缺点:计算量大,占用资源;
    对于私钥加密的内容,如果黑客拿到了公钥,很容易获取其中信息;

5.5、使用场景

使用公钥进行加密,私钥解密,用于数据加密
使用私钥进行加密,公钥解密,用于认证 ——公钥认证/免密码登录/密钥登录

公钥认证(免密登录/密钥登录)

实验步骤
1、在A机器上生成生成公私钥对(如果有公私钥对,则不需要重新生成),默认会放在当前用户家目录下的.ssh/文件下。
== 登陆时默认会去寻找家目录下的~/.ssh/id_rsa去进行验证,所以尽量不要在生成key的时候将它的默认路径更改。==

[root@mysql  ~]# ssh-keygen  #生成,中间一直敲回车,选择默认
Generating public/private rsa key pair. # 生成公私钥对,采用rsa算法
Enter file in which to save the key (/root/.ssh/id_rsa): # 保存在/root/.ssh/id_rsa
Created directory '/root/.ssh'. 
Enter passphrase (empty for no passphrase): # 输入密码(为空,表示没有密码) 
  • 1
  • 2
  • 3
  • 4
  • 5
生成一个id_rsa(私钥)
      id_rsa.pub(公钥)

Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
  • 1
  • 2
  • 3
  • 4
  • 5

2、在B机器上目标用户的家目录下面~/.ssh/authorized_keys文件里将A机器的公钥复制粘贴过来,没有此文件就创建,修改文件权限为600

[root@MYSQL ~]# ll -a .ssh -d
drwxr-xr-x 2 root root 29 52 09:20 .ssh  #.ssh权限默认755.这里不能为777
[root@MYSQL .ssh]# ll
总用量 4
-rw-r--r-- 1 root root 564 52 09:20 authorized_keys
[root@MYSQL .ssh]# chmod 600 authorized_keys
[root@MYSQL .ssh]# ll  # 修改权限,只允许属主有读写权限,属组和其他用户均无权限
总用量 4
-rw------- 1 root root 564 52 09:20 authorized_keys

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

3、查看公钥认证是否成功
在A机器上执行 ssh root@B机器的ip
不需要输入密码就可以登陆到B机器,则表示免密码登陆成功

[root@mysql .ssh]# ssh root@192.168.169.138
Last login: Mon May  2 05:42:06 2022 from 192.168.169.1
或者
[root@mysql .ssh]# ssh 192.168.169.138 -l root
Last login: Mon May  2 09:27:28 2022 from 192.168.169.137
# ssh -vvv ...  查看登陆过程详细信息
# ssh 192.168.169.138  不接任何用户名,会默认以当前A机器所在用户登陆B机器同名的用户,不管B机器有没有这个用户
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
[root@LB-1 .ssh]# ssh 192.168.169.137  # 端口默认是22的可以登录
ssh: connect to host 192.168.169.137 port 22: Connection refused
[root@LB-1 .ssh]# ssh 192.168.169.137 -p2233 # 如果改了端口,要指定端口才能登录,此时回车不需要输入密码
  • 1
  • 2
  • 3

或者在这里插入图片描述在这里插入图片描述
直接按下一步后完成。
在这里插入图片描述
复制公钥
在这里插入图片描述
进入登录用户的家目录,将复制的公钥放到.ssh/authorized_key这里(没有就创建)保存。
在这里插入图片描述

在这里插入图片描述

堡垒机需要配置防火墙
禁止root用户登录
禁止密码登录
添加一些防火墙
创建专门管理员的用户、sudo的权限

公钥认证排错
1、确保公钥正确
2、确保~/.ssh/authorized_keys文件权限为600
3、确保家目录以及.ssh目录权限为755以下权限,即属组和其他人没有7的权限

[root@sanchuang .ssh]# su - wy
su切换用户,是不会经过ssh
susu - su切换不会切换bash环境,su - 会切换到wy的bash环境
  • 1
  • 2
  • 3

登陆方式

[root@mysql-binary .ssh]# ssh wy@192.168.0.35
Last failed login: Sat Nov 14 09:59:11 CST 2020 from 192.168.0.132 on ssh:notty
There were 2 failed login attempts since the last successful login.
Last login: Sat Nov 14 09:53:11 2020 from 192.168.0.132
[wy@mysql-rpm ~]$ 登出
Connection to 192.168.0.35 closed.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
[root@mysql-binary .ssh]# ssh 192.168.0.35 -l wy
Last login: Sat Nov 14 10:01:28 2020 from 192.168.0.132
#######查看登陆过程详细信息
[root@mysql-binary .ssh]# ssh -vvv 192.168.0.35 wy 
 ...
debug1: Trying private key: /home/sanchuang/.ssh/id_rsa
debug3: no such identity: /home/sanchuang/.ssh/id_rsa: No such file or directory
debug1: Trying private key: /home/sanchuang/.ssh/id_dsa
debug3: no such identity: /home/sanchuang/.ssh/id_dsa: No such file or directory
debug1: Trying private key: /home/sanchuang/.ssh/id_ecdsa
debug3: no such identity: /home/sanchuang/.ssh/id_ecdsa: No such file or directory
debug1: Trying private key: /home/sanchuang/.ssh/id_ed25519
debug3: no such identity: /home/sanchuang/.ssh/id_ed25519: No such file or directory
...

默认会去寻找~/.ssh/id_rsa,然后再找id_dsa等等。。。。
rsa  dsa  ecdsa 加密算法
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
[root@mysql-binary .ssh]# ssh 192.168.0.35 -l wy -p 22  #指定用户,指定端口
Last login: Sat Nov 14 10:01:37 2020 from 192.168.0.132

[sanchuang@mysql-binary ~]$ ssh 192.168.0.35  #不接任何用户名,会默认以当前A机器所在用户登陆B机器同名的用户,不管B机器有没有这个用户
sanchuang@192.168.0.35's password: 
  • 1
  • 2
  • 3
  • 4
  • 5

6、实践

6.1、密码登录(密码认证)

  • client向server发送登陆请求,server将自己的公钥发送给client。
  • client使用这个公钥,将密码进行加密,发送给server
  • server用私钥解密登陆密码,验证合法性
  • server返回验证结果给client

这个流程有一个问题, 怎么保证收到的公钥就是目标server的公钥?(中间人攻击)

如果一个攻击者中途拦截了client的登陆请求,
发送自己的公钥给client,client端就会用攻击者的公钥进行数据加密
攻击者接收到信息后,用自己的私钥就可以解密了,这就窃取了client的登陆信息了。
  • 1
  • 2
  • 3
[sanchuang@mysql-binary .ssh]$ ssh 192.168.0.35
The authenticity of host '192.168.0.35 (192.168.0.35)' can't be established.
ECDSA key fingerprint is SHA256:6V02tsAzBmVJ7yEbppVkISnSEyvf+HFWbzDbIPwmG84.
ECDSA key fingerprint is MD5:6c:bd:a9:37:af:ba:f1:53:dd:c8:d2:d9:16:44:c9:9e.
Are you sure you want to continue connecting (yes/no)?
  • 1
  • 2
  • 3
  • 4
  • 5
为了解决这个问题,client端第一次登陆的时候,会进行一个登陆公钥确认。
确认server服务端的这个host主机摘要,确认成功之后就会将server端的pubkey保存在~/.ssh/known_hosts里面
以后每次连接都会验证这个know_hosts里的key和收到的pubkey是否一致。
  • 1
  • 2
  • 3
[root@localhost .ssh]# ssh-keygen -lf  /etc/ssh/ssh_host_rsa_key.pub #   查看公钥指纹
3072 SHA256:+onwII3kw6noYzHjxfO+8cx1Yj0BhKosqMbvK3Jutz8 no comment (RSA)
  • 1
  • 2
# server主机的pubkey保存在/etc/ssh/目录下,默认使用 ssh_host_ecdsa_key.pub
[root@mysql-rpm ssh]# cd /etc/ssh
[root@mysql-rpm ssh]# ls
moduli      sshd_config         ssh_host_ecdsa_key.pub  ssh_host_ed25519_key.pub  ssh_host_rsa_key.pub
ssh_config  ssh_host_ecdsa_key  ssh_host_ed25519_key    ssh_host_rsa_key
  • 1
  • 2
  • 3
  • 4
  • 5

6.2、公钥认证登录(免密登录/秘钥登录)

  • client端生成公钥对,将公钥追加在server端的~/.ssh/authorized_keys
  • 发送登陆请求,server收到请求之后,生成随机字符串发送给client
  • client用自己的私钥对字符串进行加密,发送给server。
  • server收到加密字符串之后用公钥解密,比较解密出的字符串和之前生成的字符串事发后一致。
  • 返回结果给client
    在这里插入图片描述

7、服务配置

OpenSSH
官方站点:http://www.openssh.com
主要软件包:openssh-server、openssh-clients

服务名:sshd
服务端主程序:/usr/sbin/sshd
客户端主程序:/usr/bin/ssh
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh_config
  • 1
  • 2
  • 3
  • 4
  • 5
#查看命令属于哪个包下载的
[sanchuang@mysql-binary ssh]$ which ssh
/bin/ssh
[sanchuang@mysql-binary ssh]$ rpm -qf /bin/ssh
openssh-clients-7.4p1-21.el7.x86_64
[root@mysql-binary ~]# rpm -qf /usr/sbin/sshd
openssh-server-7.4p1-21.el7.x86_64
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

sshd_config

服务端的配置文件,修改配置文件,要重新加载。

[root@mysql-binary ssh]# kill -HUP 23380
[root@mysql-binary ssh]# kill -1 23380
[root@mysql-binary ssh]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
[root@mysql-binary ssh]# service sshd reload
Redirecting to /bin/systemctl reload sshd.service
[root@mysql-rpm .ssh]# man ssh
[root@mysql-rpm .ssh]# man 5 /etc/ssh/sshd_config  #查看配置文件帮助文档
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

配置详解

Port 2233  #修改默认监听端口(默认22端口)
#AddressFamily any
ListenAddress 192.168.0.132  #设置本机监听ip地址,默认为0.0.0.0(表示在本机任意ip地址上监听)
PermitRootLogin no  #不允许root用户登陆,默认为yes
PubkeyAuthentication yes #是否开启公钥认证
AuthorizedKeysFile  .ssh/authorized_keys  #配置公钥认证的文件
PasswordAuthentication no   #是否开启密码认证,默认为yes
UsePAM yes #使用pam认证 
#pam认证模块 --》配置路径/etc/pam.d 这个目录下面存放的是每个需要认证的服务的配置,文件名就是服务名
UseDNS yes  # 是否将客户端主机名解析为ip
            #此过程不顺利的话,会非常的慢,会影响登陆认证的速度,可以将其设置为no
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

ssh-agent

管理密钥 一个代理程序,帮助我们管理私钥。
配置方法: xshell–> 主机属性–》ssh --》勾选 使用xagent进行身份验证 勾选使用代理转发

[sanchuang@mysql-binary .ssh]$ ssh-add id_rsa  #添加主机密钥给agent管理
[sanchuang@mysql-binary .ssh]$ ssh-add -l   #查看agent管理了哪些密钥
  • 1
  • 2

8、简化登录

#A机器登录到B机器,操作前需要先把A机器公钥放到B机器上 进行授权
#不修改全局配置,只修改个人配置:在用户家目录下创建.隐藏文件
#在客户端上配置(配到自己的主机上)
#注:意思是将机器root@192.168.0.31 -p 2233 取个别名叫B
  • 1
  • 2
  • 3
  • 4

修改客户端配置,配置文件: ~/.ssh/config

[sanchuang@a ~]$ cat .ssh/config 
##############################
ForwardAgent yes    
StrictHostKeyChecking no     # 注:是否输入yes
ServerAliveInterval 60       # 注:存活时间 
IdentityFile  ~/.ssh/id_rsa	 # 注:认证文件
#############################
Host B
    HostName 192.168.0.39
    User   sanchuang
    Port   2233

Host 10.*
    User  sanchuang
    Port 2233
    ProxyCommand  ssh 192.168.0.39 -W %h:%p -l sanchuang -p 2233
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
# 提示主机不被信任 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
将~/.ssh/known_hosts 删掉
  • 1
  • 2

9、命令

远程执行命令 ssh B

#不登录B机器,执行B机器上的命令 (一般用于脚本)
[root@a ~]# ssh B ifconfig	# 注:登录到B执行 ifconfig命令
[root@a ~]# ssh B ip a		# 注:登录到B执行 查看ip地址 命令 ;命令的返回是B机器给的
[root@a ~]# ssh B "/usr/sbin/ip a"	# 注:脚本里建议使用命令的绝对路径 
  • 1
  • 2
  • 3
  • 4

远程传输命令 scp

传输文件

# 将a机器的文件传输到b机器的/root目录下,不接路径直接放到家目录下
[root@LB-1 ~]# scp -P 2233 install_kafka_4.sh root@192.168.169.137:/root  

[root@a ~]# scp ahost B:/tmp	# 注:将A机器 当前路径ahost文件cp到B机器下的/tmp路径下
[root@a ~]# scp B:/tmp/bhost ./	# 注:将B机器 /tmp/bhost文件cp到当前路径
[root@a ~]# scp B:tmp/testhost ./	# 注:将B机器 家目录下 tmp/testhost文件cp到当前路径
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

传输目录

[root@a ~]# scp -r adir B:			# 注:将A机器当前路径下 adir文件夹 cp到B机器家目录下
[root@a ~]# scp -r adir B:bdir		# 注:复制文件夹并改名
[root@a ~]# scp -r adir B:bdir/		# 注:和上面的没有区别 
  • 1
  • 2
  • 3

sftp传输命令

ftp和sftp区别

  • FTP是一种文件传输协议,一般是为了方便数据共享的。
    包括一个FTP服务器和多个FTP客户端。
    FTP客户端通过FTP协议在服务器上下载资源。
  • SFTP协议是在FTP的基础上对数据进行加密,使得传输的数据相对来说更安全。
    但是这种安全是以牺牲效率为代价的,也就是说SFTP的传输效率比FTP要低。
#注:ftp文件传输
#注:sftp 传输文件 本地和异地传输文件
#注:格式 sftp 用户名@主机名
[sanchuang@a ~]$ sftp B
Connected to B.
sftp> get bdir    # 获得一个文件
Fetching /home/sanchuang/bdir/ to bdir
Cannot download non-regular file: /home/sanchuang/bdir/
sftp> mget bdir  # 一次获得多个文件
Fetching /home/sanchuang/bdir/ to bdir
Cannot download non-regular file: /home/sanchuang/bdir/
sftp> exit
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

pssh pscp命令

pssh  
  -h  指定主机文件列表,内容格式"[user@]host[:port]"
  -i  指定每个服务器的处理信息.
yum install pssh -y		# 注:没有的话需要安装epel源
  • 1
  • 2
  • 3
  • 4

批量执行命令pssh

[root@a ~]# pssh -h ip.txt  -i "/usr/sbin/ip a"
#ip.txt里面可以这样写
[root@a ~]# cat ip.txt 
192.168.0.31:2233
192.168.0.54:22
...
[root@a ~]# vim ip.txt 
sanchuang@192.168.0.31:2233
sanchuang@192.168.0.54:2233 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

批量传输文件pscp.pssh

[sanchuang@a ~]$ pscp.pssh -h ip.txt pscptest /tmp  #把当前目录下的pscptest文件传送到目标主机的/tmp目录下
[1] 17:37:21 [SUCCESS] sanchuang@192.168.0.48:2233
[2] 17:37:22 [SUCCESS] sanchuang@192.168.0.39:2233
  • 1
  • 2
  • 3

fping命令

批量ping 使用

[root@a ~]# yum install fping -y
[root@a ~]# fping -g 192.168.0.1/24	 # 注:-g 根据网段去ping
192.168.0.1 is alive
……
192.168.0.254 is unreachable
[root@a ~]# fping -f ip.txt  # 注:-f根据文件指定ip去ping
192.168.0.31 is alive
192.168.0.54 is alive
[root@a ~]# vim ip.txt 
192.168.0.31
192.168.0.54 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

10、访问控制

SSH使用TCP Wrappers实现访问控制

主要配置文件
/etc/hosts.allow
/etc/hosts.deny
# 不需要重启服务,有守护进程帮它控制
[root@cPen_A ~]# vim /etc/hosts.deny 
sshd:192.168.0.31	
#注:访问控制,拒绝192.168.0.31 不需要重启服务,有守护进程帮它控制
#注:主机公钥在 /etc/ssh/下面	默认使用ecdsa模式
#注:known_hosts文件里有什么	前面是ip地址,后面是公钥
#注:authorized_keys	放受信任的公钥
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

TCP Wrappers可以控制哪些服务

受super daemon(xinetd)管理的服务
支持libwrap.so模块的服务
  • 1
  • 2

TCP Wrappers的访问控制原则

首先检查 hosts.allow 文件,若找到相匹配的策略,则允许访问
否则继续检查 hosts.deny 文件,若找到相匹配的策略,则拒绝访问
如果两个文件中都没有相匹配的策略,则允许访问
  • 1
  • 2
  • 3

11、ssh 隧道

SSH端口转发详解及实例

# 永久修改selinux
[root@cPen_A ~]# vim /etc/selinux/config 
SELINUX=disabled
# 看当前系统有多少连接 (establish)
[root@cPen_B ~]# netstat -anplut|grep -E "ESTABLISHED|LISTEN|TIME_WAIT"|awk -F" " {'print $6'}|sort|uniq -c
      2 ESTABLISHED
      2 LISTEN 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

端口转发:A、C、B主机。主机B起了个nginx服务 端口号80;主机A不能直接访问主机B,但主机A可以访问主机C,主机C可以访问主机B (A–>C–>B);A可以ssh到C,A跳到C,然后访问B的80端口 (nginx)。现在 在主机C上面建立一个隧道,隧道开启15577端口连接B的80端口,A去访问15577端口相当于去访问B的80映射

#注:ssh隧道 第一个用于不能直接访问的情况;第二个考虑密文传输
[root@cPen_C ~]# lsof -i:15577			# 注:在C主机上操作,15577端口未被占用
[root@cPen_C ~]# ssh -g -L 15577:192.168.0.39:80 sanchuang@192.168.0.39 -p 2233
#注:192.168.0.39 右边B主机ip地址		# 注:在C主机上开通一个隧道 端口为15577
[root@cPen_A ~]# curl 192.168.0.48:15577	# 注:模仿网络访问 (80端口nginx网页使用curl访问)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">	# 注:返回的内容
#注:192.168.0.48 中间C主机ip地址		# 注:注意防火墙	iptables -F
#注:访问中间C主机的15577端口 转接成右边B主机的80端口
#注:注意 不能绑定到本地的回环地址 127.0.0.1	只能访问自己 (所以 -g) -g作用 本地所有ip都是访问
#注:- L是本地端口转发
#注:一般可以开启65535个端口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/在线问答5/article/detail/840040
推荐阅读
相关标签
  

闽ICP备14008679号