目录
前言
我们的工作经常是建立在服务器集群的基础上去完成的,无论是服务器之间数据的交换还是我们远程的访问我们的服务器去进行日常的维护工作,都离不开我们的远程访问。
SSH
SSH (Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH
协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应用层和传输层基础上的安全协议。
ssh服务端主要功能
- ssh远程链接
- sftp服务
作用:SSHD服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件。
相比较之前用Telnet方式来传输文件要安全很多,因为Telnet使用明文传输,SSH 是加密传输
服务名称: sshd
服务端主程序:/usr/ sbin/sshd
服务端配置文件:letc/ ssh/ sshd_config
配置文件
opensSH常用配置文件有两个/etc/ssh/ssh_config 和/etc/sshd_config
ssh_config:为客户端配置文件,设置与客户端相关的应用可通过此文件实现
sshd_config:为服务器端配置文件,设置与服务端相关的应用可通过此文件实现
ssh远程登录方式
ssh [远程主机用户名] [远程服务器主机名或IP地址] -p port(指定相对应的端口)
ssh -l [远程主机用户名][远程服务器主机名或IP地址] -p port
-l : -l选项,指定登录名称。
-p: -p 选项,指定登录端口(当服务端的端口非默认时,需要使用-p 指定端口进行登录)
服务配置
#监听端口修改实验设置sSHD监听端口号。
SSH预设使用22这个port,也可以使用多个port,即重复使用port这个设定项!
例如想要开放SSHD端口为22和222,则多加一行内容为:Port 222即可。
然后重新启动ssHD这样就好了。建议大家修改 port number为其它端口,防止别人暴力破解.
vim /etc/ssh/sshd_config
17 #Port 22 #默认使用监听端口为22
18 #AddressFamily any
19 #ListenAddress 0.0.0.0 #监听地址为任意网段
20 #ListenAddress ::
37 #LoginGraceTime 2m #登陆验证时间为两分钟
38 #PermitRootLogin yes #允许root用户登陆
39 #StrictModes yes
40 #MaxAuthTries 6 #最大重试次数为6
41 #MaxSessions 10
62 # To disable tunneled clear text passwords, change to no here!
63 #PasswordAuthentication yes
64 #PermitEmptyPasswords no #禁止空密码用户登陆
65 PasswordAuthentication yes
115 #UseDNS no #禁止使用DNS反向解析以提高响应速度
可以手动配置白名单和黑名单
140 AllowUsers ghr1 ghr2 ghr3@192.168.90.138 #我们允许ghr1 2 3远程登陆到机器上且ghr3只能以指定ip登陆
141 DenyUsers ghr5 #禁止ghr5登陆
[root@192 ~]# ssh ghr3@192.168.90.137 #使用138的IP成功登陆上主机
ghr3@192.168.90.137's password:
Last failed login: Mon Sep 6 23:26:34 CST 2021 from 192.168.90.139 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Mon Sep 6 23:26:24 2021 from 192.168.90.138
[ghr3@192 ~]$
[root@192 ~]# ssh ghr3@192.168.90.137 #使用139的ip无论是ghr3还是ghr5都无法登陆
ghr3@192.168.90.137's password:
Permission denied, please try again.
ghr3@192.168.90.137's password:
[root@192 ~]# ssh ghr5@192.168.90.137
ghr5@192.168.90.137's password:
Permission denied, please try again.
ghr5@192.168.90.137's password:
scp远程复制
[root@192 home]# scp -r ghr5@192.168.90.138:/home/test/ /home/test
#从对方主机下载/home/test下所有文件到我方主机的/home/test下
The authenticity of host '192.168.90.138 (192.168.90.138)' can't be established.
ECDSA key fingerprint is SHA256:3JNdskzW/U0r0Oc7HHFyWqErUrkk6c7MWG1mIDTR1Kg.
ECDSA key fingerprint is MD5:b5:1c:73:bb:08:4f:4f:c6:98:98:17:c6:23:f8:27:98.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.90.138' (ECDSA) to the list of known hosts.
ghr5@192.168.90.138's password:
a.txt 100% 7 17.7KB/s 00:00
[root@192 home]# scp -r /home/test/* ghr5@192.168.90.138:/home/ghr5/
#将自己服务器的文件传输到对岸服务器中,需要注意的是,必须在使用的账号的权限范围内进行传输
ghr5@192.168.90.138's password:
b.txt 100% 6 13.6KB/s 00:00
a.txt 100% 7 9.3KB/s 00:00
sftp安全FTP
- 通过sftp命令可以利用SSH安全连接与远程主机上传、下载文件,采用了与FTP类似的登录过程和交互式环境,便于目录资源管理
- 由于使用了加密/解密技术,所以传输效率比普通的FTP要低,但安全性更高
sftp root@192.168.126.15
root@192.168.126.15's password:
Connected to 192.168.126.15.
sftp> ls
sftp> get 文件名 #下载文件ftp目录
sftp> put 文件名 #上传文件ftp目录
sftp> exit #退出
[root@192 home]# sftp root@192.168.90.138 #登录到对端服务器
root@192.168.90.138's password:
Connected to 192.168.90.138.
sftp> get /home/addnum.sh #获取测试文件
Fetching /home/addnum.sh to addnum.sh
/home/addnum.sh 100% 53 4.9KB/s 00:00
sftp> eixt #退出
[root@192 home]# ls #文件被下载到当前工作环境中
addnum.sh ghr ghr1 ghr2 ghr3 ghr5 test
[root@192 home]# sftp root@192.168.90.138
root@192.168.90.138's password:
Connected to 192.168.90.138.
sftp> put /home/?.txt #上传文件到用户的家目录
Uploading /home/?.txt to /root/?.txt
/home/?.txt 100% 6 9.4KB/s 00:00
sftp> ls /root #上传成功
/root/1111 /root/?.txt /root/anaconda-ks.cfg
/root/initial-setup-ks.cfg /root/下载 /root/公共
/root/图片 /root/文档 /root/桌面
/root/模板 /root/视频 /root/音乐
sftp>
sshd 服务支持两种验证方式
密码验证
- 对服务器中本地系统用户的登录名称、密码进行验证。简便,但可能会被暴力破解
密钥对验证
- 要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证。能增强安全性,且可以免交互登录
- 当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。可根据实际情况设置验证方式
vim /etc/ssh/sshd_config
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys #指定公钥库文件
43 PubkeyAuthentication yes #启用密钥验证
44
45 # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
46 # but this is overridden so installations will only check .ssh/authorized_keys
47 AuthorizedKeysFile .ssh/authorized_keys #指定公钥文件库
48
49 #AuthorizedPrincipalsFile none
50
51 #AuthorizedKeysCommand none
52 #AuthorizedKeysCommandUser nobody
53
54 # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
55 #HostbasedAuthentication no
56 # Change to yes if you don't trust ~/.ssh/known_hosts for
57 # HostbasedAuthentication
58 #IgnoreUserKnownHosts no
59 # Don't read the user's ~/.rhosts and ~/.shosts files
60 #IgnoreRhosts yes
61
62 # To disable tunneled clear text passwords, change to no here!
63 #PasswordAuthentication yes
64 #PermitEmptyPasswords no
65 PasswordAuthentication yes #启用密码验证
[root@192 ~]# su ghr1 #切换用户
[ghr1@192 root]$ ssh-keygen -t ecdsa #使用scdas算法创建密钥
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/ghr1/.ssh/id_ecdsa): #指定密钥存放目录
Created directory '/home/ghr1/.ssh'.
Enter passphrase (empty for no passphrase): #输入密码
Enter same passphrase again:
Your identification has been saved in /home/ghr1/.ssh/id_ecdsa.
Your public key has been saved in /home/ghr1/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:nTjKWgdteVb56qIDXAe4nAPfJ58SlQzXp1AY1ezFCfg ghr1@192.168.90.140
The key's randomart image is:
+---[ECDSA 256]---+
| ..ooB++...|
| . . ..*...+.o|
| + + o .++ . |
| *.=+oo.E. |
| ..oS*=. . |
| .o+.+o . |
| +... . |
| o .. .. |
| . .o .. |
+----[SHA256]-----+
[ghr1@192 root]$ cd /home/ghr1
[ghr1@192 ~]$ cd .ssh
[ghr1@192 .ssh]$ ls -a
. .. id_ecdsa id_ecdsa.pub
[ghr1@192 .ssh]$ scp ~/.ssh/id_ecdsa.pub root@192.168.90.137:/opt
The authenticity of host '192.168.90.137 (192.168.90.137)' can't be established.
ECDSA key fingerprint is SHA256:3JNdskzW/U0r0Oc7HHFyWqErUrkk6c7MWG1mIDTR1Kg.
ECDSA key fingerprint is MD5:b5:1c:73:bb:08:4f:4f:c6:98:98:17:c6:23:f8:27:98.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.90.137' (ECDSA) to the list of known hosts.
root@192.168.90.137's password:
id_ecdsa.pub 100% 181 237.8KB/s 00:00
[ghr1@192 .ssh]$ ssh root@192.168.90.137
Enter passphrase for key '/home/ghr1/.ssh/id_ecdsa':
Last failed login: Tue Sep 7 00:58:04 CST 2021 from 192.168.90.138 on ssh:notty
There were 4 failed login attempts since the last successful login.
Last login: Mon Sep 6 22:23:54 2021 from 192.168.90.1
[root@192 ~]#
TCP Wrappers 访问控制
保护机制的两种实现方式
- 直接使用 tcpd 程序对其他服务程序进行保护,需要运行 tcpd
- 由其他网络服务程序调用 libwrap.so.* 链接库,不需要运行tcpd程序;此方式应用更加广泛,也更有效率
rpm -q tcp_wrappers #查看是否已安装
#查看程序的 libwrap,so.* 的链接库
ldd [参数] [文件] #需要写绝对路径
TCP Wrappers 的访问策略
- TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。
- 对应的两个策略文件为 /etc/hosts.allow 和 /etc/hosts.deny,分别用来设置允许和拒绝的策略
格式:[服务程序列表]:[客户端地址列表]
服务程序列表
ALL:代表所有的服务
单个服务程序:如“vsftpd”
多个服务程序组成的列表:如“vsftpd,sshd”
客户端地址列表
ALL:代表任何客户端地址
LOCAL:代表本机地址
网段地址,如 192.168.80. 或者 192.168.80.0/255.255.255.0
允许使用通配符 “?” 和 “*” ,前者代表任意长度字符,后者仅代表一个字符,多个地址以逗号分隔
TCP Wrappers 机制的基本原则
首先检查/etc/hosts.allow文件,如果找到相匹配的策略,则允许访问;
否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问;
如果检查上述两个文件都找不到相匹配的策略,则允许访问。
允许所有,拒绝个别
只需在/etc/hosts.deny文件中添加相应的拒绝策略
允许个别,拒绝所有
除了在/etc/hosts.allow中添加允许策略之外,还需要在/etc/hosts.deny文件中设置“ALL:ALL”的拒绝策略
TCP Wrappers 配置
vim /etc/hosts.allow #允许通行的文件
sshd:12.0.0.1,192.168.126.* #允许所有192.168.126.网段的服务器使用sshd服务
vim /etc/hosts.deny #禁止通行的文件
sshd:ALL #除了白名单禁止所有
总结
我们的工作是无法离开ssh来展开的,ssh是一种高安全性的传输和远程连接服务。我们可以通过修改配置文件来保护我们的服务器不受黑客的攻击,以及自己的密码不被泄露。这对服务器的安全性有着很大的提升。也是我们所必须掌握的一种服务。我们不是总是能使用内网来完成设置的。往往我们需要通过ssh来安全的远程连接服务器