WHCSRL 技术网

Linux远程访问之SSH管理

SSH远程访问及控制

1、SSH是什么?

(1)是一种安全通道协议

(2)用来实现字符界面的远程登录、远程 复制等功能。

(3)SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。

(4)对数据进行压缩,加快传输速度。

2、SSH的优点:

(1)数据传输是加密的,可以防止信息泄露;

(2)数据传输是压缩的,可以提高传输速度;

3、常见的ssh协议:

Linux 客户端:ssh,scp, sftp, slogin

windows 客户端:xshell, MobaXterm, putty, securecrt, sshsecureshellclient

OpenSSH 是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux 操作系统。

Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。

执行"systemctl start sshd"命令即可启动sshd 服务;

sshd服务的默认配置文件是/etc/ssh/sshd_config;

4、SSH原理:

(1) 客户端发起连接请求;

(2) 服务端返回自己的公钥,以及一个会话ID;

(3) 客户端生成一个秘钥对;

(4) 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密;

(5) 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res;

(6) 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥);

(7) 最后:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密;

在这里插入图片描述

5、SSH登录:

#登录 方法一:
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port

当在 Linux 主机上远程连接另一台 Linux 主机时,如当前所登录的用户是 root 的话,当连接另一台主机时也是用 root 用户登录时,可以直接使用 ssh   IP,端口默认即可,如果端口不是默认的情况下,需要使用-p 指定端口。

例子:
[root@localhost ~]#ssh root@192.168.111.130
#默认使用22端口   root(登录对方的用户)加IP 地址,首次登录会询问,并要求输入密码
The authenticity of host '192.168.111.130 (192.168.111.130)' can't be established.
ECDSA key fingerprint is SHA256:cfw/ywtq68ErYAFBf1MR8s00x2d5S4usr4Aw5Syty2s.
ECDSA key fingerprint is MD5:c3:2e:81:05:f6:76:60:e0:08:d2:42:b2:1b:34:1e:d4.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.91.101's password: 
Last login: Sun Oct 17 14:40:32 2021 from 192.168.111.130
[root@swl ~]#

#登录方法二
ssh -l [远程主机用户名] [远程服务器主机名或IP 地址] -p port
-l :-l 选项,指定登录名称。
-p:-p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)

例子:
[root@ky15 ~]#ssh -l root 192.168.111.130
root@192.168.111.130's password: 
Last login: Sun Oct 17 14:40:32 2021 from 192.168.111.130
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

在这里插入图片描述

这里我们思考一下登录时怎么确认是不是我需要连接的服务器呢?

我们可以先用ssh 连接服务器自己,看自己的加密密码,然后对比客户端用ssh 连接服务器时的加密密码是否一致。

5、服务端配置:

[root@ky15-1 ~]# vim /etc/ssh/sshd_config   //修改配置文件
Port    22    #生产建议修改
ListenAddress ip
LoginGraceTime 2m
PermitRootLogin yes #默认ubuntu不允许root远程ssh登录
StrictModes yes   #检查.ssh/文件的所有者,权限等
MaxAuthTries   6  #pecifies the maximum number of authentication 
# ssh -o NumberOfPasswordPrompts=8root@192.168.111.122  需要配合这个选项一起使用
attempts permitted per connection. Once the number of failures reaches half this 
value, additional failures are logged. The default is 6.
MaxSessions  10         #同一个连接最大会话
PubkeyAuthentication yes     #基于key验证
PermitEmptyPasswords no      #空密码连接
PasswordAuthentication yes   #基于用户名和密码连接
GatewayPorts no
ClientAliveInterval 10 #单位:秒
ClientAliveCountMax 3 #默认3
UseDNS yes #提高速度可改为no
GSSAPIAuthentication yes #提高速度可改为no
MaxStartups    #未认证连接最大值,默认值10
Banner /path/file
#以下可以限制可登录用户的办法:白名单  黑名单
AllowUsers user1 user2 user3@ip(限制主机)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

6、使用秘钥对及免交互验证登录:

原理:

  • 用户/密码
  • 基于秘钥

基于秘钥的登录方式:

  1. 首先在客户端生成一对密钥(ssh-keygen);

  2. 并将客户端的公钥ssh-copy-id 拷贝到服务端;

  3. 当客户端再次发送一个连接请求,包括ip、用户名;

  4. 服务端得到客户端的请求后,会到authorized_keys()中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:kgc;

  5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端;

  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端;

  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录;

在这里插入图片描述

[root@swl ~]# ssh-keygen --help   //查看帮助文档
unknown option -- -
usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
                  [-N new_passphrase] [-C comment] [-f output_keyfile]

#生成密钥我那件,注意:如果要免密登录,这里不设置密码,一直回车即可
[root@swl ~]# ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
#cd 到.ssh 隐藏文件,会看到公钥和私钥
[root@swl ~]# cd .ssh
[root@swl .ssh]# ls
id_ecdsa  id_ecdsa.pub
[lisi@ky15-1 .ssh]$ ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.111.122
#将公钥文件导入对方用户的 注意路径

#与用户密码无关
#IP地址无关
#只与密钥对有关

#登录服务器,这时不需要登录密码就可登录
[root@swl .ssh]# ssh root@192.168.111.122
Last login: Sun Oct 17 17:10:36 2021 from 192.168.111.1
#服务器端查看密钥对信息
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls
authorized_keys  known_hosts

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

TCP Wrappers访问机制

保护机制:

TCP Wrappers 将 TCP 服务程序“包裹”起来,代为监听 TCP 服务程序的端口,增加了 一个安全检测过程,外来的连接请求必须先通过这层安全检测,获得许可后才能访问真正 的服务程序。

TCP Wrappers 还可以记录所有企图访问被保护服务的行为, 为管理员提供丰富的安全分析资料。

访问控制策略的配置文件:

/etc/hosts.allow

/etc/hosts.deny

[root@swl ~]#vim /etc/hosts.allow 
#配置格式  服务:地址(客户端)
#添加
sshd:192.168.111.122
[root@swl ~]#vim /etc/hosts.deny
sshd:ALL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

轻量级自动化运维工具pssh

EPEL源中提供了多个自动化运维工具

(1)pssh:基于python编写,可在多台服务器上执行命令的工具,也可实现文件复制,提供了基于ssh和scp的多个并行工具。

(2)pdsh:是一个多线程远程shell客户端,可以并行执行多个远程主机上的命令。 可使用几种不同的远程shell服务,包括rsh,Kerberos IV和ssh。

(3)mussh:是一个shell脚本,允许使用命令在多个主机上通过ssh执行命令。 可使用ssh-agent和RSA/DSA密钥,以减少输入密码。

pssh 命令选项如下:
-H:主机字符串,内容格式”[user@]host[:port]” 
-h file:主机列表文件,内容格式”[user@]host[:port]” 
-A:手动输入密码模式
-i:每个服务器内部处理信息输出
-l:登录使用的用户名
-p:并发的线程数【可选】
-o:输出的文件目录【可选】
-e:错误输出文件【可选】
-t:TIMEOUT 超时时间设置,0无限制【可选】
-O:SSH的选项
-P:打印出服务器返回信息
-v:详细模式
--version:查看版本
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

刚开始是没有pssh软件包的,本地源也安装不了;
在这里插入图片描述

这时我们要安装配置开发源:

安装需要配置开发源
[root@swl yum.repos.d]# cd /etc/yum.repos.d
[root@swl yum.repos.d]# vim CentOS-Base.repo
#最后一行添加
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/$releasever/x86_64
        https://mirrors.cloud.tencent.com/epel/$releasever/x86_64
        https://mirrors.huaweicloud.com/epel/$releasever/x86_64
        https://mirrors.tuna.tsinghua.edu.cn/epel/$releasever/x86_64
gpgcheck=0

[root@swl yum.repos.d]#yum clean all
#清除缓存
[root@swl yum.repos.d]# yum install pssh -y
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在这里插入图片描述

接下来,要设置免密登录(一直回车即可)

[root@localhost yum.repos.d]# ssh-keygen 
[root@localhost ~]# cd .ssh
#查看一下,有一个公钥
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub

#上传密钥对,需要两台服务器
#服务器1:192.168.111.100
#服务器2:192.168.111.122
[root@swl yum.repos.d]# ssh-copy-id 192.168.111.100
[root@swl yum.repos.d]# ssh-copy-id 192.168.111.122
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

#批量查看/etc/passwd 文件
[root@ky15-1 yum.repos.d]# pssh -H "192.168.111.100 192.168.111.122" -i cat /etc/passwd
#批量创建 swl.txt 文件
[root@ky15-1 yum.repos.d]# pssh -H "192.168.111.100 192.168.111.122" -i touch /opt/swl.txt
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

在这里插入图片描述

这里批量创建 swl.txt 文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结:

pssh 批量处理工具还是很有用处的,在小公司就30台以下的服务器,这个软件是非常方便的。

推荐阅读