远程控制服务

配置sshd服务

sshd是基于SSH协议开发的一款远程管理服务程序,不仅使用方便快捷,而且能提供两种安全验证方法:

  • 基于口令认证:用账户名和密码验证登录
  • 基于密钥认证:在本地生成密钥对,把密钥对中的公钥上传到服务器,连接时与服务器中的公钥比较(该方法相较来说更安全)

sshd服务的配置信息保存在/etc/ssh/sshd_config文件中。
(配置文件中有许多以井号开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的井号。)

sshd服务配置文件中包含的参数及作用

参数 作用
Port 22 sshd默认的服务端口
ListenAddress 0.0.0.0 设定sshd服务器监听的IP地址
Protocol 2 SSH协议版本号
HostKey /etc/ssh/ssh_host_key SSH协议版本为1时,DES私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH协议版本为2时,RSA私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH协议版本为2时,DSA私钥存放的位置
PermitRootLogin yes 是否允许root用户直接登录
StrictModes yes 当远程用户私钥改变时直接拒绝连接
MaxAuthTries 6 最大密码尝试次数
MaxSessions 10 最大终端数
PasswordAuthentication yes 是否允许密码验证
PermitEmptyPasswords no 是否允许空密码登录(很不安全)

安全密钥认证

  • 环境准备:server1(192.168.80.132,作为客户端)、server2(192.168.80.129,作为服务器)
    1. [root@localhost ~]# hostnamectl set-hostname server1
    2. [root@localhost ~]# hostname
    3. server1
    4. [root@localhost ~]# hostnamectl set-hostname server1
    5. [root@localhost ~]# hostname
    6. server2
  1. 在客户端主机中生成密钥对

    1. [root@server1 ~]# ssh-keygen
    2. Generating public/private rsa key pair.
    3. Enter file in which to save the key (/root/.ssh/id_rsa):
    4. Created directory '/root/.ssh'.
    5. Enter passphrase (empty for no passphrase):
    6. Enter same passphrase again:
    7. Your identification has been saved in /root/.ssh/id_rsa.
    8. Your public key has been saved in /root/.ssh/id_rsa.pub.
    9. The key fingerprint is:
    10. SHA256:Tq1Agcc7FTXyS6l+8iaPW13Y8Qraw7TA4SG0U4FKFaQ root@server1
    11. The key's randomart image is:
    12. +---[RSA 2048]----+
    13. | o.oB==. |
    14. | . ++o= o |
    15. | oE++ * . |
    16. | .+ O + o o |
    17. | ..S * + o .|
    18. | = . B + . |
    19. | = + * . |
    20. | .*. . |
    21. | o=o |
    22. +----[SHA256]-----+

    生成的密钥对会存放在/root/.ssh/目录下。
    @X0DQ78%F@7K4FWL9]%8R%M.png

  2. 将客户端主机生成的公钥文件发送到远程服务器上 ```bash [root@server1 ~]# ssh-copy-id 192.168.80.129 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub” The authenticity of host ‘192.168.80.129 (192.168.80.129)’ can’t be established. ECDSA key fingerprint is SHA256:FyYs7MkUdvZ1y+YDloqp1vm9MF91slxGWYTBFBsKQhU. ECDSA key fingerprint is MD5:bf:bd:8d:f4:83:f7:ab:df:8d:ca:7f:d4:35:41:c0:ae. Are you sure you want to continue connecting (yes/no)? yes /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed — if you are prompted now it is to install the new keys root@192.168.80.129’s password:

Number of key(s) added: 1

Now try logging into the machine, with: “ssh ‘192.168.80.129’” and check to make sure that only the key(s) you wanted were added.

  1. 在服务器端可以查看/root/.ssh/authorized_keys文件,发现server1的公钥已经存在在该文件中了。<br />![D2@9I_)RB%6CGTEA85@G[4A.png](https://cdn.nlark.com/yuque/0/2021/png/614741/1614086671347-84e42970-7fe3-49c7-a258-8b22f8829325.png#align=left&display=inline&height=256&margin=%5Bobject%20Object%5D&name=D2%409I_%29RB%256CGTEA85%40G%5B4A.png&originHeight=256&originWidth=772&size=47981&status=done&style=none&width=772)<br />然后我们就可以通过客户端登陆上服务器了。<br />![`ZTI(OA~S)8)FOK`_Z_S4Q4.png](https://cdn.nlark.com/yuque/0/2021/png/614741/1614087558070-dfe2bd72-8d0a-409d-8064-9f580c9cb571.png#align=left&display=inline&height=114&margin=%5Bobject%20Object%5D&name=%60ZTI%28OA~S%298%29FOK%60_Z_S4Q4.png&originHeight=114&originWidth=538&size=6519&status=done&style=none&width=538)
  2. 3. 设置服务器为拒绝传统口令验证,只允许密钥验证。记得修改完配置文件后保存,并重启sshd服务。
  3. ```bash
  4. [root@server2 ~]# vim /etc/ssh/sshd_config
  5. [root@server2 ~]# systemctl restart sshd

![I8VV`{3OCXRJA)@VIFW0XB.png
然后尝试连接服务器,发现只能通过密钥方式验证了。
Z8X7N))E@CUWR9{4U4H8~V7.png
这样用户要登录服务器只要把公钥发给服务器就可以了,并且是以root用户登录。而服务器只要删除/.ssh/authorized_keys文件中的公钥,用户就登录不上了,方便管理且安全性高。

拓展:Xshell的密钥管理

  1. 点击工具-新建用户密钥生成向导

1CW7UHE9}_O(HCHYISL7SLY.png
默认加密方式为RSA,密钥长度为2048,点下一步
0DCG)@(S`I25EQ3_}9L%2ZH.png
生成密钥对,下一步
T]EP~C244MWQ{V2@ZZG)$@G.png
输入加密密码123123,下一步
R}J`@YZ{H%%$SS9]0B@2PAM.png
点保存为文件129.pub,然后点完成。
![Y@3XPJ~NS]$_G_WZ}GM`$3.png
在服务器上装一个lrzsz工具,将生成的公钥文件放到服务器里

  1. [root@server2 ~]# yum install lrzsz -y

L{~N2D`ZWLJ6WN%H{$ZCZRT.png
将这个文件追加到.ssh/authorized_keys文件里

  1. [root@server2 ~]# ls -a
  2. . 129.pub .bash_history .bash_profile .cshrc .tcshrc
  3. .. anaconda-ks.cfg .bash_logout .bashrc .ssh .viminfo
  4. [root@server2 ~]# cat 129.pub >> .ssh/authorized_keys

然后在Xshell上点击 文件-新建,输入会话名称、IP等信息
6{7E6RWD0VRSK4RLJMMCN`T.png
然后点击用户身份验证,方法选择Public Key,用户名为root,选择用户密钥并输入密码,点击确定。
PAFL4U2{}USBEFSCB~DLK]L.png
以后就可以直接打开会话server2,会免密自动登录192.168.80.129
B]972U9)X)}QM1GMUS_S%TY.png

不间断会话服务

当与远程主机的会话被关闭时,在远程主机上运行的命令也随之被中断。

screen是一款能够实现多窗口远程控制的开源服务程序,简单来说就是为了解决网络异常中断或为了同时控制多个远程终端窗口而设计的程序。用户还可以使用screen服务程序同时在多个远程会话中自由切换,能够做到实现如下功能。

  • 会话恢复:即便网络中断,也可让会话随时恢复,确保用户不会失去对远程会话的控制。
  • 多窗口:每个会话都是独立运行的,拥有各自独立的输入输出终端窗口,终端窗口内显示过的信息也将被分开隔离保存,以便下次使用时依然能看到之前的操作记录。
  • 会话共享:当多个用户同时登录到远程服务器时,便可以使用会话共享功能让用户之间的输入输出信息共享。
    1. [root@localhost ~]# yum -y install screen

    管理远程会话

screen参数解析

  • 用 -S 参数创建会话窗口
  • 用 -d 参数将指定会话进行离线处理
  • 用 -x 参数一次性恢复所有的会话
  • 用 -ls 参数显示当前已有的会话
  • 用 -wipe 参数把目前无法使用的会话删除
    1. [root@localhost ~]# screen -S window
    虽然看起来与刚才没有不同,但实际上可以查看到当前的会话正在工作中 ```bash [root@server1 ~]# screen -ls There is a screen on:
    1. 10680.window1 (Attached)
    1 Socket in /var/run/screen/S-root.

[root@server1 ~]#

  1. 要想退出一个会话也十分简单,只需在命令行中执行exit命令即可
  2. 在日常的生产环境中,其实并不是必须先创建会话,然后再开始工作。可以直接使用screen命令执行要运行的命令,这样在命令中的一切操作也都会被记录下来,当命令执行结束后screen会话也会自动结束
  3. ```bash
  4. [root@localhost ~]# screen ping -c 4 baidu.com
  5. [screen is terminating]
  6. [root@localhost ~]#

会话共享功能

D)HR_V1@5F3XW~B6M@MON]Y.png

堡垒机

概述

堡垒机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。
目前国内外有很多厂商生产堡垒机,堡垒机目前有两种最主流的形式。
硬件堡垒机:厂商定制硬件设备,并且将软件系统封装在其中,比较封闭,安全系数较高
软件堡垒机:厂商仅仅维护软件堡垒机系统,需要客户自己部署堡垒机,可以虚拟化形式,部署自由程度高

核心功能

登录功能
账号管理
身份认证
资源授权
访问控制
操作审计

JumperServer

JumpServer 是全球首款完全开源的堡垒机, 使用 GNU GPL v2.0 开源协议, 是符合 4A 的专业运维审计系统。
JumpServer 使用 Python / Django 进行开发, 遵循 Web 2.0 规范, 配备了业界领先的 Web
Terminal 解决方案, 交互界面美观、用户体验好。
JumpServer 采纳分布式架构, 支持多机房跨区域部署, 中心节点提供 API, 各机房部署登录节点, 可横向扩展、无并发访问限制。
官方文档:https://docs.jumpserver.org/zh/master/