SSH远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程复制等功能。SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令。
配置OpenSSH服务端
SSH服务及配置文件
在Centos6.5及以上版本中,OpenSSh服务器由openssh、openssh-server等软件包提供,默认已安装,并已将sshd添加为标准的系统服务。
sshd的配置文件默认位于/etc/ssh/
目录下的sshd_config
,正确调整相关配置项,可以进一步提高sshd远程登录的安全性。
服务监听选项
sshd服务使用的默认端口号为22
,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提高在网络中的隐蔽性。除此之外,SSH协议的版本选用V2比V1的安全性要更好,禁用DNS反向解析可以提高服务器的响应速度。
[root@ns1 /]# vi /etc/ssh/sshd_config
Port 22 监听端口为22
......
ListenAddress 0.0.0.0 监听地址为任意网络
......
UseDNS no 禁用DNS反向解析
.....
[root@ns1 /]#systemctl reload sshd 重新载入sshd
用户登录控制
sshd服务默认允许root用户登录,当在Internet中使用时这是非常不安全的。普遍的做法是:先以普通用户远程登入,进入安全Shell环境后,根据实际需要使用su命令切换为root用户。
关于sshd服务的用户登录控制,通常禁止root用户或密码为空的用户登录。另外。可以限制登录验证的时间(默认为两分钟)及最大重试次数,若超过限制后仍未能登录则断开连接。
[root@ns1 /]# vi /etc/ssh/sshd_config
LoginGraceTime 2m 登录验证时间为两分钟
PermitRootLogin no 禁止root用户登录
MaxAuthTries 6 最大重试次数为6
PermitEmptyPasswords no 禁止空密码用户登录
.....
AllowUsers lisi robin@192.168.127.254 白名单,只允许lisi和robin能够从192.168.127.254
主机登录
DenyUsers zzq 黑名单,禁止用户zzq远程登录
.....
登录验证方式
密码验证
以服务器中本地用户的登录名称、密码进行验证。这种方法使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举(暴力破解:跑字典)攻击时防御能力比较弱。
密钥对验证
要求提供相匹配的密钥信息才能通过验证,通常现在客户机创建一对密钥文件(私钥、公钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全性
公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密
不能根据一个密钥来推算出另一个密钥
公钥对外公开,私钥只有私钥的持有人才知道
当密码验证、密钥对验证都启用时,服务器将优先使用密钥对验证
[root@ns1 /]# vi /etc/ssh/sshd_config
PasswordAuthentication yes 启用密码验证
PubkeyAuthentication yes 启用密钥对验证
AuthorizedKeysFile .ssh/authorized_keys 指定公钥库数据文件
....
使用SSH客户端程序
在centos6.5及以上系统中。OpenSSH客户端由openssh-client软件包提供(默认已安装),其中包括ssh远程登录命令、以及scp、sftp远程复制和文件传输命令等
命令程序ssh、scp、sftp
ssh远程登录
使用ssh命令时应指定登录用户、目标主机地址作为参数。
[root@ns1 /]#ssh zzq@192.168.137.101
....... 第一次连接时需接受密钥
zzq@192.168.137.101's password: 输入密码
如果sshd服务器使用了非默认端口号(如2345),则在登录时必须通过 - p 选项指定端口号
[root@ns1 /]#ssh -p 2345 zzq@192.168.137.101
scp远程复制
[root@localhost ~]# scp root@192.168.137.101:/etc/passwd /root/pwd101.txt
root@192.168.137.101's password:
passwd 100% 2454 1.0MB/s 00:00
[root@localhost ~]# scp -r /etc/ssh/ root@192.168.137.101:/opt
root@192.168.137.101's password:
moduli 100% 568KB 48.0MB/s 00:00
ssh_config 100% 2276 2.9MB/s 00:00
ssh_host_rsa_key 100% 1675 1.7MB/s 00:00
ssh_host_rsa_key.pub 100% 382 392.7KB/s 00:00
ssh_host_ecdsa_key 100% 227 164.1KB/s 00:00
ssh_host_ecdsa_key.pub 100% 162 174.1KB/s 00:00
ssh_host_ed25519_key 100% 387 435.9KB/s 00:00
ssh_host_ed25519_key.pub 100% 82 90.2KB/s 00:00
sshd_config
sftp安全FTP
[root@localhost ~]# sftp root@192.168.137.101
root@192.168.137.101's password:
Connected to 192.168.137.101.
sftp> ls
11 2 RECOVERED_FILES anaconda-ks.cfg initial-setup-ks.cfg
tmp 下载 公共 图片 文档 桌面
模板
sftp> put /boot/config-3.10.0-1062.el7.x86_64 上传文件
Uploading /boot/config-3.10.0-1062.el7.x86_64 to /root/config-3.10.0-1062.el7.x86_64
/boot/config-3.10.0-1062.el7.x86_64 100% 149KB 25.8MB/s 00:00
sftp> ls
11 2 RECOVERED_FILES anaconda-ks.cfg
config-3.10.0-1062.el7.x86_64 initial-setup-ks.cfg tmp
下载 公共 图片 文档
桌面 模板 视频 音乐
sftp> bye 退出登录
图形工具远程登录、管理
在windows系统中,我们可以使用Xshell、SecureCRT、Putty 等工具远程访问sshd服务
构建密钥对验证的SSH体系
在客户端创建密钥对
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 指定私钥位置,不输入则默认存放为/root/.ssh/id_rsa
Enter passphrase (empty for no passphrase): 设置私钥短语
Enter same passphrase again: 确认私钥短语
Your identification has been sav
+---[RSA 2048]----+
| |
| o .. |
| o=+ |
| ..*.. |
| . So B. . |
| o . +oo =o .|
| + . o OEo ooo|
| ..+ B.+.+oo +o|
| ++o+.=oo. o+ .|
+----[SHA256]-----+
将公钥文件上传至服务器
[root@localhost ~]# scp /root/.ssh/id_rsa.pub root@192.168.137.101:/tmp
root@192.168.137.101's password:
setterm: $TERM is not defined.
id_rsa.pub 100% 408 514.6KB/s 00:00
在服务器中导入公钥文本
[root@ns1 /]# mkdir -p /root/.ssh/
[root@ns1 /]# cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
[root@ns1 /]# tail -1 /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC7kfSV2HKBiwoFhbpEQbMun4FzKX4bKNA22SE1DEc6RbphSvUQv
jyafSly/kvHhR+BvVHol0A46EihjfbhJ4OkMPvOTESYlELhS9IYLrHRS/BC052aL4Lp4t1NRIP5CZ9DPEcwqHUiK7y
H9vAp8IJMdd2CSqBwF7duv5MiWc5Qc3Tjof+eyr79cJPbJazSnfTJV40LyFleYQJ7OZqpzRJopXn8iLNQ0xmw7G
sCysasjNIAMHQtsDj/5JSR/qPM+EKkEzqPw30DgQZI1JsOibWNExuIISmC7wfiAQAyD+QRPID0MooS6o1wpm
3bpnvo5WSuw/wQ3RPKU/v7b2TtP/+9 root@localhost.localdomain
在客户端使用密钥对验证
[root@localhost ~]# ssh root@192.168.137.101
Enter passphrase for key '/root/.ssh/id_rsa': 输入私钥短语
Last login: Sat Jun 27 16:35:47 2020 from 192.168.137.1
[root@ns1 ~]# 登陆成功
上传公钥并导入可以采用另一种方法,即使用 ssh-copy-id -i 公钥文件 user@host
格式,-i选项指定公钥文件,user是之目标主机的用户。验证密码后,会将公钥自动添加到目标主机user宿主目录下的.ssh/authorized_keys文件结尾
TCP Wrappers 访问控制
TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。
TCP_Wrappers的使用主要是依靠两个配置文件/etc/hosts.allow
, /etc/hosts.deny
,用于拒绝和TCP_Wrapers控制权的序,直接编辑/etc/hosts.allow和/etc/hosts.deny就可以实现主机、ip、服务等控制
- 在配置 TCP Wrappers 服务时需要遵循两个原则:
- 编写拒绝策略规则时,填写的是服务名称,而非协议名称;
- 建议先编写拒绝策略规则,再编写允许策略规则,以便直观地看到相应的效果。
配置格式
<服务程序列表>:<客户机地址列表>
- 服务程序列表
- ALL:代表所有的服务
- 单个服务程序:如‘vsftpd’
- 多个服务组成的列表:如‘vsftpd,sshd’
2)客户机地址列表
- ALL:代表任何客户机地址
- LOCAL:代表本机地址
- 单个IP地址
- 网络段地址:如“192.168.4.0/255.255.255.0”
- 以“.“开头开始的域名:如”.kgc.cn"匹配kgc.cn域中的所有主机
- 以"."结束的网络地址:如“192.168.4."匹配整个192.168.4.0/24网段
- 嵌入通配符“*” “?” :前者代表任意长度字符,后者仅仅代表一个字符,如“10.0.8.2﹡”匹配以10.0.8.2开头的所有IP地址。不可以与“."开始或结束的模式混用
- 多个客户机地址组成的列表:如“192.168.1.,172.17.17.,.kgc.cn"
tcp_wrapper匹配机制:
1、先检查/etc/hosts.allow,如果被允许,则直接放行;
2、如果/etc/hosts.allow没有匹配项,则检查/etc/hosts.deny,如果被拒绝,则禁止访问;
3、如果二者均无匹配,则放行