文章目录
- 1.SSH远程管理
- 1.1 SSH的概述
- 1.2 OpenSSH服务器
- 1.3 sshd_ config常用选项设置
- 1.4 SSH端口、配置文件
- 2.配置OpenSSH服务端
- 2.1 更改端口号
- 2.2 用户登录控制
- 3.登录验证方式
- 3.1 密码验证
- 3.2 密钥对验证
- 3.3 配置密钥对验证
- 5.TCP Wrappers访问控制
- 5.1 TCPWrappers机制的基本原则
- 5.2 实例操作
- 5.3 无交互式密钥登录的种方法
- 6.scp和sftp
- 6.1 scp远程复制
- 6.2 sftp安全文件传输协议
- 7.总结
1.SSH远程管理
1.1 SSH的概述
-
SSH是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能;
-
对通信双方的数据传输进行加密处理,其中包括用户登录时输入的用户口令;
-
与早期的Telnet(远程登录)、rsh(远程执行命令)、rcp(远程文件控制)等相比,SSH协议提供了更好的安全性。
SSH服务端主要包括两个服务功能:SSH远程连接和SFTP服务作用;SSHD服务使用SSH协议可以用来进行远程控制,或在计算机之间传送文件。
相比较之前用Telnet方式来传输文件要安全很多,因为Telnet使用明文传输,SSH是加密传输,利用SSH协议可以有效防止远程管理过程中的信息泄露问题,通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
1.2 OpenSSH服务器
SSH客户端:Putty、Xshell、CRT、MobaXterm
SSH服务端:OpenSSH
OpenSSH是实现SSH协议的开源软件项目,适用于各种UNIX、 Linux操作系统。Centos 7系统默认已安装OpenSSH相关软件包,并将sshd 服务添加为开机自启动。
-
执行"systemctl start sshd"命令即可启动sshd服务。
-
查看服务状态执行“systemctl status sshd”命令。
-
查看服务是否自启动执行“systemctl is-enabled sshd”命令。
[root@clr ~]# systemctl status sshd #查看sshd服务状态
Active: active (running) since 四 2023-03-23 11:03:03 CST; 4 weeks 0 days ago
Docs: man:sshd(8)
man:sshd_config(5)
[root@clr ~]# systemctl is-enabled sshd #查看服务sshd是否自启动执行
enabled
1.3 sshd_ config常用选项设置
1 vim /etc/ssh/sshd_config #服务端配置文件
2 #Port 22 #监端口为22
3 #AddressFamily any #监听地址为任意网卡,也可以指定Openssh服务器的具体ip
4 #LoginGraceTime 2m #登录验证时间为2分钟
5 #PermitRootLogin yes #禁止root用户登录
6 #MaxAuthTries 6 #最大重试次数为 6
7 #PermitEmptyPasswords no #禁止空密码用户登录
8 #UseDNS no #禁用DNS反向解析,以提高服务器的响应速度
9 ----------------------------------------------------------------------------------
10 配置允许和禁止用户登录:加@表示限制ip,注意允许和禁止不要同时使用!!
11 AllowUsers zhangsan #允许zhangsan登录(多个用户以空格间隔)
12 AllowUsers zhangsan@192.168.80.80 #只允许zhangsan通过192.168.80.80登录
13 DenyUsers lisi #禁止lisi登录
1.4 SSH端口、配置文件
-
sshd服务默认使用TCP的22端口。
-
sshd服务的默认配置文件是==/etc/ssh/sshd_config==。
-
ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于前者是针对客户端的配置文件/etc/ssh/ssh_config,后者则是针对服端的配置文件/etc/ssh/sshd_config。
[root@clr ~]# netstat -lntp #查看服务使用的端口号
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1074/sshd
3052/sshd: root@pts
[root@clr ~]# ss -lntp
(("dnsmasq",pid=1457,fd=6))
LISTEN 0 128 *:22 *:* users:(("sshd",pid=1074,fd=3))
LISTEN 0 128 127.0.0.1:631 *:* users:
2.配置OpenSSH服务端
2.1 更改端口号
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。除此之外,SSH协议的版本选用V2比V1的安全性更好,禁用DNS反向解析可以提高服务器的响应速度。
Port 22 #监听22号端口
ListenAddress 0.0.0.0 #监听地址为任意网段,也可以指定OpenSSH服务器的具体IP
LoginGraceTime 2m #登录验证时间为2分钟
PermitRootLogin no #禁止root用户登录
MaxAuthTries 6 #最大重试次数为6
PermitEmptyPasswords no #禁止空密码用户登录
UseDNS no #禁用DNS反向解析,以提高服务器的响应速度
修改端口号为411;
[root@clr ~]# vim /etc/ssh/sshd_config
Port 411 #将端口号改为411
[root@clr ~]# netstat -antp | grep sshd
tcp 0 0 127.0.0.1:6010 0.0.0.0:* LISTEN 1750/sshd: root@pts
tcp 0 0 127.0.0.1:6011 0.0.0.0:* LISTEN 4143/sshd: root@pts
tcp 0 0 0.0.0.0:411 #sshd修改后的端口号 0.0.0.0:* LISTEN 4049/sshd
tcp 0 0 192.168.80.20:411 192.168.80.1:51561 ESTABLISHED 4143/sshd: root@pts
tcp 0 0 192.168.80.20:22 192.168.80.1:63555 ESTABLISHED 1750/sshd: root@pts
tcp6 0 0 ::1:6010 :::* LISTEN 1750/sshd: root@pts
tcp6 0 0 ::1:6011 :::* LISTEN 4143/sshd: root@pts
tcp6 0 0 :::411 :::* LISTEN 4049/sshd
2.2 用户登录控制
-
sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
-
关于sshd服务的用户登录控制,通常应禁止root用户或密码为空的用户登录。另外,可以限制登录验证的时间(默认为2分钟)及最大重试次数,若超过限制后任未能登录则断开连接。
-
当希望只允许或禁止某些用户登录时,可以使用AllowUsers或DenyUsers配置,两者用法相似(注意不要同时使用)。
3.登录验证方式
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只允许启用密钥对验证方式;若没有特殊要求,则两种方式都可启用。
3.1 密码验证
以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解)攻击时防御能力比较弱。
3.2 密钥对验证
要求提供相匹配的密钥信息才能通过验证。通常先在客户机中创建一对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性。
vim /etc/ssh/sshd_config
PasswordAuthentication yes #启用密码验证
PubkeyAuthentication yes #启用密钥对验证
AuthorizedKeysFile .ssh/ authorized_keys #指定公钥库文件
知识拓展部分:
关于公钥和私钥,它们的关系如下:
公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;不能根据一个密钥来推算出另一个密钥;公钥对外公开,私钥只有私钥的持有者才知道。如果用公钥对数据进行加密,只有用相对应的私钥才能解密;如果用私钥对数据进行加密,那么只有用对应的公钥才能解密。
如果要想连接到带有公钥的SSH服务器,客户端SSH软件就会向SSH服务器发出请求,请求用联机的用户密钥进行安全验证。SSH服务器收到请求之后,会先在该SSH服务器上连接的用户家目录下寻找事先放上去的对应用户的公用密钥,然后把它和连接的客户端发送过来的公用密钥进行比较。如果两个密钥一致,SSH服务器就用公钥加密"质询"( challenge)并把它发送给SSH客户端。
###验证
ssh [选项] 服务器端用户名@服务器IP地址
###当用户第一次登录SSH服务器时,必须接受服务器发来的ECDSA密钥(根据提示输入“yes”)后才能继续验证。接受的密钥信息将会保存到~/.ssh/known_hosts文件中
-p:指定非默认的端口号,缺省时默认使用22号端口
ssh -p 23333 服务器端用户名@服务器IP地址
3.3 配置密钥对验证
(1)在客户端创建密钥对
###在客户端创建密钥对,通过ssh-keygen工具为当前用户创建密钥对文件
###可用的加密算法为RSA、ECDSA或DSA等(ssh-keygen命令的“-t”选项用于指定算法类型)
###切换到test用户
su - test
###以ECDSA加密算法生成密钥对
ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
###指定私钥位置,直接回车使用默认位置
Enter file in which to save the key (/home/admin/.ssh/id_ecdsa):
###生成的私钥、公钥文件默认存放在宿主目录中的隐藏目录.ssh/下
Created directory '/home/test/.ssh'.
###设置私钥的密码(直接回车设置为空可在登陆时免交互界面直接登录成功)
Enter passphrase (empty for no passphrase) :
###确认输入
Enter same passphrase again:
###id_ ecdsa是私钥文件,权限默认为600;id_ecdsa.pub是公钥文件,用来提供给SSH服务器
ll -a ~/.ssh/
###将生成的公钥文件传送给服务器端(默认传输到登陆的用户的家目录当中的.ssh/目录下)
ssh-copy-id -p 23333 -i 公钥文件 服务器端用户名@服务器端IP地址
###服务器端将发送过来的公钥文件内容重定向输出到sshd配置文件指定的公钥库文件(目录默认权限700,文件默认权限为600,否则不生效)目录AuthorizedKeyFile .ssh/authorized_keys
cat ~/id_ras.pub > ~/.ssh/authorized_keys
###重启服务
systemctl restart sshd
###再次利用客户端登录test,若成功,显示直接登陆成功
(2)把公钥文件发送给服务端主机,即可完成密钥验证登录;
ssh-copy-id -i id_rsa.pub dn@192.168.41.50
# ssh-copy-id 可以指定在指定用户的家目录中生成公钥文件的目录和文件,并且目录权限700,文件权限600,只有这样密钥验证才能使用
# -i 指定公钥文件
5.TCP Wrappers访问控制
5.1 TCPWrappers机制的基本原则
-
由其他网络服务程序调用 libwrap.so. 链接库,不需要运行 tpd 程序。此方式的应用更加泛,也更有效率。*
-
使用 ldd 命令可以查看程序的 ibwrap.so.*链接库Idd $(which ssh)
访问策略
-
TCP Wrappers 机制的保护对象为各种网络服务程序,针对访问服务的客户端地址进行访问控制。
-
对应的两个策略文件为/etc/hosts.allow 和/etc/hosts.deny,分别用来设置允许和拒绝的策略
格式
<服务程序列表>:<客户端地址列表>
(1) 服务程序列表
ALL:代表所有的服务。
单个服务程序:如”vsftpd”
多个服务程序组成的列表: 如rvsftpd,sshd"。
(2)客户端地址列表
ALL:代表任何客户端地址。
LOCAL:代表本机地址。
多个地址以逗号分隔
允许使用通配符 “*”和“?”,前者代表任意长度字符,后者仅代表一个字符
网段地址,如“192.168.80.” 或者 192.168.80.0/255.255.255.0
-
首先检查/etc/hosts.allow文件, 如果找到相匹配的策略,则允许访问
-
否则继续检查/etc/hosts.deny文件,如果找到相匹配的策略,则拒绝访问
-
如果检查上述两个文件都找不到相匹配的策略,则允许访问
允许所有,拒绝个别”——黑名单
只需在/etc/hosts.deny文件中添加相应的拒绝策略(系统默认的就是允许所有)
“允许个别,拒绝所有”——白名单
除了在/etc/hosts .allow中添加允许策略之外,还需要在/etc/ hosts .deny文件中设置"ALL:ALL"的拒绝策略
5.2 实例操作
(1)实例1:设置黑名单,不允许IP地址为192.168.41.50的主机访问sshd服务;
(2)实例2:设置白名单,不允许IP地址为192.168.41.50的主机访问sshd服务;
5.3 无交互式密钥登录的种方法
(1)在生成密钥文件时设置私钥密码为空即可完成免交互登录
(2)通过创建ssh会话代理 (只在当前会话有效)
1.生成密钥对时密码为空
2.若密钥对生成时设置了密码,则设置个临时的会话代理(该代理只在当前的会话有效)
ssh-agent bash
ssh-add
###输入密钥对的密码
Enter passphrase for /root/.ssh/id_ecdsa:
Identity added:/root.ssh/id_ecdsa(/root.ssh/id_ecdsa)
3.ssh-keygen -f ~/.ssh/id_ecdsa -P '' -q -t ecdsa
-P:设置密码,''为空
6.scp和sftp
6.1 scp远程复制
###下行复制,从服务器端下载到本机
scp 服务器端用户名@服务器IP地址:文件的绝对路径 复制到本机的哪的绝对路径
###上行复制,从本机上传到服务器端
scp -r 复制到本机的哪的绝对路径 服务器端用户名@服务器IP地址:文件的绝对路径
-r:复制或上传目录时,需要添加-r选项
6.2 sftp安全文件传输协议
-
SFTP(SSH File Transfer Protocol,也称 Secret File Transfer Protocol)是一种安全的文件传输协议,一种通过网络传输文件的安全方法;
-
它确保使用私有和安全的数据流来安全地传输数据。
SFTP和FTP之间的区别:
(1)安全通道
- FTP 不提供任何安全通道在主机之间传输文件;
- 而,SFTP协议提供了一个安全通道,用于在网络上的主机之间传输文件。
(2)使用的协议
-
FTP使用 TCP/IP协议。
-
而,SFTP是SSH协议的一部分,它是一种远程登录信息。
(3)链接方式
FTP使用TCP的21号端口建立连接。
而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。
(4)安全性
-
FTP密码和数据以纯文本格式发送,大多数情况下是不加密的,安全性不高。
-
而SFTP会在发送之前加密数据,二进制的形式传递,是无法 “按原样” 阅读的,安全性较高。
sftp 服务器端用户名@服务器端IP地址
Connecting to 服务器端IP地址 ...
###输入密码
服务器端用户名@服务器端IP地址’s password:
sftp> ls
###下载文件到ftp目录
sftp> get 文件名
###上传文件到ftp目录
sftp> put 文件名
###退出
sftp> quit
注意:
由于使用了加密/解密技术,所以传输效率比普通的FTP要低,但安全性更高。操作语法sftp与ftp几乎一样.
7.总结
(1)ssh服务器的配置文件以及所在的位置客户端的配置文件:ssh_config;位置:/etc/ssh/ssh_config
服务端的配置文件:sshd_config;位置:/etc/ssh/sshd_config
(2)ssh服务器客户端的功能
远程登录:ssh 用户名@IP地址
复制:scp (注意主机IP后面要加冒号,复制目录时加-r)
sftp:格式跟ftp相同(上传文件和下载文件功能)
(3)配置密钥对验证
流程:在客户端创建密钥对(有公钥文件和私钥文件)
将公钥文件上传到服务器(有两种方法:一种是远程复制到服务器中,再将服务器端导入私钥文件到公钥对中;另一种方法是直接在客户端导入,服务端直接使用即可)
最后在客户端进行密钥对验证,还可以设置免密登录(ssh-agent bash 、ssh add)
(4)TCP wrappers
两种访问策略文件:/etc/hosts.allow 、/etc/hosts.deny
访问的过程:先检查/etc/hosts.allow文件,有则访问,无则继续访问/etc/hosts.deny文件,若有则拒绝,无则允许访问
(5)可以查看是否有人在连续攻击你(查看
失败的ssh)