欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

程序员文章站 2022-07-03 11:29:38
...

作业13:SSH服务综合项目实战(Centos6/7)

13.1 某企业要对两台服务器做双机互信,编写脚本解决

  1. 实验环境
服务器 IP 系统
主动方(客户端) 192.168.6.146/24 Centos 6.9
被动方(服务器端) 192.168.6.128/24 Centos 7
#客户端
[aaa@qq.com ~]# expect
-bash: expect: command not found
[aaa@qq.com ~]# yum -y install expect
[aaa@qq.com ~]# ll ~/.ssh				
total 0
#服务器端
[aaa@qq.com / 04:20:21]#ll ~/.ssh
total 4
-rw-r--r--. 1 root root 965 Sep 15 15:50 known_hosts

  1. 客户端脚本编写
[aaa@qq.com ~]# vim ssh_mul_trust.exp
#!/usr/bin/expect
set username [ lindex $argv 0 ]  # 脚本首个参数,被动方服务器用户名
set ip [ lindex $argv 1 ]		 # 被动方服务器IP
set passwd [lindex $argv 2 ]	 # 被动方服务器用户名的密码

spawn ssh-******  				 # 运行并监控ssh**生成指令
expect "(/root/.ssh/id_rsa):"    # 捕获相关问题并做输出
        send "\r"

expect {
        "Overwrite (y/n)?" {    # 回答特殊问题:用户已经生成**情况
                send "y\r"
                exp_continue	
            	   # 当问题不存在(即还没生成**对),继续回答其他问题
         }
        "empty for no passphrase):" {
                send "\r"
                exp_continue
        }
        "again:" { 
                send "\r"
        }
}
spawn /usr/bin/ssh-copy-id aaa@qq.com$ip # 执行公钥传输命令并监控
expect {
        "(yes/no)?" {
                send "yes\r" 
                exp_continue 
        }
        "password:" {
        send "$passwd\r"
        }
}
interact 								# 问题回答完毕留在交互界面
  1. 测试
# 主动方
[aaa@qq.com ~]# chmod +x /root/ssh_mul_trust.exp      	 #权限修改
[aaa@qq.com ~]# ./ssh_mul_trust.exp root 192.168.6.128 **pw***
spawn ssh-******  #捕获
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: spawn /usr/bin/ssh-copy-id aaa@qq.com
aaa@qq.com's password: 
Now try logging into the machine, with "ssh 'aaa@qq.com'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.
[aaa@qq.com ~]# ll ~/.ssh/					#已经生成**对文件
total 12
-rw-------. 1 root root 1675 Aug 15 17:32 id_rsa     #私钥文件
-rw-r--r--. 1 root root  390 Aug 15 17:32 id_rsa.pub #公钥文件
-rw-r--r--. 1 root root  395 Aug 15 16:27 known_hosts
    
[aaa@qq.com ~]# ssh aaa@qq.com     #自动ssh登陆且不需要输入密码
Last login: Sun Sep 20 21:33:07 2020 from 192.168.6.1

#被动方
[aaa@qq.com / 05:46:08]#ll ~/.ssh/
total 8
-rw-------  1 root root 390 Sep 20 17:46 authorized_keys  #**文件
-rw-r--r--. 1 root root 965 Sep 15 15:50 known_hosts

13.2 SSH连接速度慢的原因有哪些

#1.在服务器端,即被动方修改
vim /etc/ssh/sshd_config
# UseDNS yes
UseDNS no
# GSSAPIAuthentication yes
GSSAPIAuthentication no
#2. 修改后重启服务
systemctl restart sshd
  1. UseDNS no,取消服务端根据ip地址查找主机名(反向解析)从而取消与客户端请求的正向记录进行比较的过程,减少主机验证阶段花费的时间。
  2. GSSAPIAuthentication no,不允许基于GSSAPI(通用安全服务应用程序接口)的用户认证

13.3 SSH如何实现访问控制

  • 方法一:修改/etc/ssh/sshd_config配置文件示例如下:

    allowuser user0
    allowuser user1 user2
    allowuser user3 aaa@qq.com
    #允许 user3 和从 192.168.1.1 登录的 user4 帐户通过 SSH 登录系统
    allowuser aaa@qq.com aaa@qq.com
    allowuser *@192.168.1.2
    #允许从 192.168.1.2 登录的 任何 帐户通过 SSH 登录系统
    
    denyuser user0
    denyuser user1 user2
    denyuser user3 aaa@qq.com
    #不允许 user3 和从 192.168.1.1 登录的 user4 帐户通过 SSH 登录系统
    denyuser aaa@qq.com aaa@qq.com
    denyuserr *@192.168.1.2
    #不允许从 192.168.1.2 登录的 任何 帐户通过 SSH 登录系统
    
  1. 服务器端

    [aaa@qq.com ~ 11:30:24]#vim /etc/ssh/sshd_config
    allowusers *@192.168.6.146* 
    #允许地址为192.168.6.146主机通过任何用户登陆到服务器端
    denyusers *@192.168.6.145*
    #禁止地址为192.168.6.146主机通过任何用户登陆到服务器端
    [aaa@qq.com ~ 11:35:17]#systemctl restart sshd
    
  2. 客户端

    [aaa@qq.com ~]# ip ad sh|grep 146     #尝试合法地址          
        inet 192.168.6.146/24 brd 192.168.6.255 scope global eth0
    [aaa@qq.com ~]# ssh aaa@qq.com
    Last login: Sun Sep 20 23:39:42 2020 from 192.168.6.146
    [aaa@qq.com ~ 11:40:06]#
    
    [aaa@qq.com ~]# ip ad sh|grep 145		#尝试不合法地址
        inet 192.168.6.145/24 brd 192.168.6.255 scope global eth0
    [aaa@qq.com ~]# ssh aaa@qq.com
    aaa@qq.com's password: 
    Permission denied, please try again.
    
    
  • 方法二:设置/etc/hosts.allow和/etc/hosts.deny两个系统配置文件,限制指定某个/段ip进行SSH登陆,示例如下:

    vim /etc/hosts.allow
    sshd:192.168.6.146:allow    #允许192.168.6.146 ssh登录
    //sshd:192.168.6.1/24:allow #允许192.168.0.1/24段 IP地址用户登录
    //sshd:192.168.6.*:allow #允许192.168.0.1/24段 IP地址用户登录
    
    vim /etc/hosts.deny
    sshd:ALL:deny  #拒绝了所有sshd远程连接,':deny'字段可以省略
    
    #当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准
    
  • 方法三:iptables/tcpwrapper设置(立即生效)

    #白名单测试
    #服务器端
    [aaa@qq.com ~ 10:36:10]#iptables -A INPUT -p tcp --dport 22 -s 192.168.6.146 -j ACCEPT    #允许来自192.168.6.146用户的ssh连接
    
    #客户端
    [aaa@qq.com ~]# ssh aaa@qq.com
    Last login: Mon Sep 21 10:35:10 2020 from 192.168.6.1
    
    #黑名单测试
    #服务器端
    [aaa@qq.com ~ 10:36:10]#iptables -A INPUT -p tcp --dport 22 -s 192.168.6.146 -j ACCEPT  #不允许来自192.168.6.1网段用户的ssh连接
    
    #客户端
    [aaa@qq.com ~]# ssh aaa@qq.com
    ssh: connect to host 192.168.6.128 port 22: Connection timed out
    
    

13.4 如何使用SecureCRT或Xshell实现代理转发连接SSH服务器

名称(实验:虚拟机主机) IP
跳板机(Centos 6.9) 192.168.6.146
目标服务器(Centos 7) 192.168.6.128
  1. 拓扑图

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

ssh(PC登陆到跳板机)提供两种认证方式:口令(密码)认证方式和**认证方式;口令(密码)认证方式是我们最常用的一种,这里介绍**认证方式登录到linux/unix的方法

目的:出于安全,本地电脑是与目标服务器是网关不通的,为了能访问远程服务器数据必须做端口转发:SSH连接与身份认证为跳板机(Jump-server)

  1. Xshell新建SSH连接

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 生成**公钥(Public key)与私钥(Private Key)

    • 在“**类型”项选择“RSA”公钥加密算法,“**长度”选择为“2048”位**长度,如下图:

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  • 在“**名称”中输入id_rsa_2048的文件名称,我这里为“id_rsa_2048”;在“密码”处输入一个密码用于加密私钥,并再次输入密码确认,如下图:

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  • 点击“下一步”,**生成完毕,这里显示的是公钥,我们可以复制公钥然后再保存,也可以直接保存公钥到文件,点击“保存为文件”按钮,将公钥(Public key)保存到磁盘(我放到c盘下的download目录),文件名为“id_rsa_2048.pub”

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 继续做SSH连接配置(图中密码为:加密私钥的密码)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 设置文件传输(这里指公钥文件)的本地路径

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 本地主机先口令登陆到跳板机,下载公钥文件id_rsa_2048.pub到跳板机,并修改跳板机ssh配置文件

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

#1.用于Linux同Windows进行文件传输的命令行工具传输速度比较慢,
#适用于小文件传输
[aaa@qq.com ~]# yum -y install lrzsz

#2.创建公钥文件
[aaa@qq.com ~]# cd ~/.ssh
[aaa@qq.com .ssh]# touch authorized_keys

#从3.Windows指定位置下载公钥文件
[aaa@qq.com .ssh]# rz			
[aaa@qq.com .ssh]# ls				#查看目录下是否下载成功,成功
authorized_keys  id_rsa  id_rsa_2048.pub  id_rsa.pub  known_hosts

#4.追加公钥到公钥文件里
[aaa@qq.com .ssh]# cat id_rsa_2048.pub >>authorized_keys #mv命令失效

#5.权限修改(必做)
[aaa@qq.com .ssh]# chmod 700 ~/.ssh                 
[aaa@qq.com .ssh]# chmod 600 ~/.ssh/authorized_keys  
[aaa@qq.com .ssh]# ll
total 16
-rw-------. 1 root root  396 Sep 21  2020 authorized_keys
-rw-------. 1 root root 1675 Aug 15 17:32 id_rsa
-rw-r--r--. 1 root root  390 Aug 15 17:32 id_rsa.pub
-rw-r--r--. 1 root root  395 Aug 15 16:27 known_hosts

#6.修改ssh配置文件
[aaa@qq.com ~]# vim /etc/ssh/sshd_config            
RSAAuthentication yes      #允许RSA非对称加密算法认证
PubkeyAuthentication yes   #允许公钥认证
AuthorizedKeysFile      .ssh/authorized_keys

#7.#重启服务,并退出当前shell,准备进行公钥登陆
[aaa@qq.com ~]# service sshd restart                
[aaa@qq.com ~]# exit
  • 常见问题:xshell发起连接,报错:“所选用户**未在远程主机上注册”
#1.查看是否在跳板机~/.ssh目录下加载好xshell所在主机生成的RSA公钥文件
#2.是否修改好~/.ssh和~/.ssh/sshd_config的权限?(参考上述步骤)
#3./etc/ssh/sshd_config 的allowuser denyuser字段检查
#4.公钥文件是否损坏?重新生成并放跳板机到指定位置
  1. 公钥登陆

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

#1.Xshell公钥登陆
[C:\~]$ 

Connecting to 192.168.6.146:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Mon Aug 17 11:29:37 2020 from 192.168.6.1 #连接成功
[aaa@qq.com ~]# 

#2.完成全部设置,并以**方式登录成功后,修改ssh配置文件
#/etc/ssh/sshd_config,禁用密码登陆,然后重启ssh服务
#PasswordAuthentication no 
#说明:安全要紧
  1. 从跳板机登录到目标服务器

    • 关于公钥分发,参考[13.1(ctrl+点击)](# 13.1 某企业要对两台服务器做双机互信,编写脚本解决)
    [aaa@qq.com ~]# ssh aaa@qq.com
    Last login: Mon Sep 21 16:11:13 2020 from 192.168.6.1
    

13.5 使用跳板机一键登录目标服务器

主机类 IP 系统版本
本地主机 192.168.0.104(127.0.0.1) Win 10
跳板机 192.168.6.146 Centos 6.9
目标服务器 192.168.6.128 Centos 7.0
  • 代理方式一键登陆
  1. 在章节 [13.4(ctrl+点击)](# 13.4 如何使用SecureCRT或Xshell实现代理转发连接SSH服务器)基础上进行精简化,以下过程参考该章节,不再赘述:

    1、Xshell 生成**(公钥与私钥);

    2、放置公钥(Public Key)到跳板机服务器~/.ssh/authorized_key文件中;

    3、修改跳板机服务器ssh配置文件;

    4、跳板机分发公钥到目标服务器中;

  2. 新建连接

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 公钥登陆配置

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 指定连接后要运行的远程命令

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 连接,测试

    [C:\~]$ 
    
    Connecting to 192.168.6.146:22...
    Connection established.
    To escape to local shell, press 'Ctrl+Alt+]'.
    
    Last login: Mon Sep 21 20:40:11 2020 from 192.168.6.146
    [aaa@qq.com ~ 09:11:40]#ip ad sh|grep 128 #查看是否已经连接到目的服务器
        inet6 ::1/128 scope host 
        inet 192.168.6.128/24 brd 192.168.6.255 scope global ens33
        
    #相关防火墙配置我这里就不赘述
    
  • SSH端口转发方式(隧道)一键登录

    1. 目标服务器下载本地主机公钥

      #先通过xshell进行口令登陆目标服务器,然后在目标服务器做以下操作
      #1.安装文件传输工具
      [aaa@qq.com ~ 12:41:36]#yum -y install lrzsz		
      [aaa@qq.com ~ 12:43:43]#cd ~/.ssh				#进入目录
      [aaa@qq.com ~/.ssh 12:43:49]#ll		#公钥文件大小为390,权限没问题
      total 8
      -rw-------  1 root root  390 Sep 20 17:46 authorized_keys
      ...
      
      #2.从本地主机指定路径下载公钥文件
      [aaa@qq.com ~/.ssh 12:43:50]#rz		
      
      [aaa@qq.com ~/.ssh 12:44:17]#ls		#下载成功
      authorized_keys  id_rsa_2048.pub  known_hosts
      
      #3.追加新公钥到authorized_keys
      [aaa@qq.com ~/.ssh 12:44:26]#cat id_rsa_2048.pub >> authorized_keys                 
      [aaa@qq.com ~/.ssh 12:44:39]#ll		#公钥文件大小为786,权限没问题
      total 12
      -rw-------  1 root root  786 Sep 22 00:44 authorized_keys
      ...
      
      #4.重启ssh服务
      [aaa@qq.com ~/.ssh 12:45:27]#systemctl restart sshd 
      [aaa@qq.com ~/.ssh 12:46:02]#exit				 #退出当前shell
      logout
      
    2. 本地服务器新建两个连接

      本地主机想访问目标服务器(192.168.6.128),但不能直接访问。本地主机可以访问跳板机(192.168.6.146),而跳板机可以访问目标服务器,此时就可以通过端口转发来实现,需要建立如下连接:
      
      1.跳板机连接设置(连接1):本地主机指定端口隧道跳转到目标服务器22号端口
      
      2.登录到目标服务器的连接设置(连接2):负责本地主机指定端口隧道跳转到目标服务器22号端口
      
      	说白了:就是连接1负责做一个桥梁,在连接1启动之后的基础上,连接2发起,本地主机就可以通过连接1搭建的桥梁直接连接上目标服务器
      
      • 新建连接1 (标注3:跳板机IP地址;标注4:跳板机上SSH服务器绑定的端口)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

 - 连接1:采用公钥认证登陆(前提:已经将公钥分发到跳板机服务器中)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

 - 连接1,进行隧道搭建(标注4:设置端口转发要绑定的本地地址;标注:设置一个本地端口,不与本地端口冲突就可以了)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

 - 新建连接2(标注4:设置为127.0.0.1或者localhost;标注5:该端口大小与跳板机中端口转发设置(即连接1)的端口大小一致)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

 - 连接2采用公钥认证登陆(前提:步骤1.目标服务器下载本地主机公钥;标注5:密码是加密公钥的密码,运维同学知道)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

 - 连接2隧道搭建(标注6:目的服务器的ip地址;标注7:目标服务器SSH服务对应的端口)

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

  1. 测试

    • 跳板机不连接,目标服务器无法正常连接到目标服务器

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

 - 只有在跳板机连接成功连接上跳板机后,目的服务器连接才能够成功连接上目的服务器;

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

Centos之SSH服务综合项目:公钥认证实现服务器双机互信,Xshell实现跳板机代理转发服务器和一键登录服务器

相关标签: Linux云计算