一、SSH 远程管理
SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入 的用户口令。与早期的 Telent(远程登录)、RSH(Remote Shell,远程执行命令)、RCP (Remote File Copy,远程文件复制)等应用相比,SSH 协议提供了更好的安全性。
二、配置服务端
1.服务监听选项
[root@localhost ~]# setenforce 0
注意:如果不关闭selinux,不能修改端口号
[root@localhost ~]# vi /etc/ssh/sshd_config
修改
Port 22 ##监听的端口
ListenAddress 192.168.10.10 ##监听的IP
Protocol 2 ##ssh的v2版本
UseDNS no ##禁用dns反向解析
[root@localhost ~]# systemctl restart sshd
客户端登陆验证
linux客户端
[root@localhost Packages]# ssh root@192.168.10.10
注意:服务端可以修改端口号,但在远程连接时,服务器要关防火墙
[root@localhost ~]# ssh -p 16666 root@192.168.10.10
2.用户登录控制
[root@localhost ~]# vi /etc/ssh/sshd_config
修改
LoginGraceTime 2m ##允许一次登录花费登陆验证的时间
PermitRootLogin yes ##为了后面的实验,不禁用root
MaxAuthTries 6 ##登陆次数(输错密码的次数)
PermitEmptyPasswords no ##禁止空密码用户登录
#StrictModes yes##严格模式如果StrictModes为yes必需保证存放公钥的文件夹的与登陆用户名是相同的
AllowUsers zhangsan aaa lisi@192.168.10.20 ##只允许或拒绝时用,添加。lisi只能从10.20登陆
[root@localhost ~]# systemctl restart sshd
客户端登陆验证
[root@localhost ~]# ssh zhangsan@192.168.10.10
注:allowusers会限制你登陆的用户,所以后面试验中所有希望ssh登陆的用户,都要在这里添加,包括密钥对登陆的用户,如果不想限制,可以不用添加该行。
客户端在ssh登录的时候,默认使用3次密码尝试,所以在测试这个MaxAuthTries参数时,可以让客户端多尝试几次密码,可以用以下语句让客户端登录时尝试指定次数的密码
[root@192 ~]# ssh -o NumberOfPasswordPrompts=8 192.168.10.101
三、使用ssh客户端程序
1.客户端的ssh操作
[root@localhost ~]# ssh aaa@192.168.10.10
aaa@192.168.10.10's password:
[aaa@localhost ~]$ ifconfig
[aaa@localhost ~]$ exit
2.客户端的scp操作
[root@localhost ~]# scp -o port=16666 root@192.168.10.10:/etc/passwd /opt/bbb.txt ##下载
[root@localhost ~]# scp -P 16666 -r /opt/aaa.txt root@192.168.10.10:/opt/vvv.txt ##上传
3.客户端的sftp操作
[root@localhost ~]# sftp aaa@192.168.10.10
Connecting to 192.168.10.10...
aaa@192.168.10.10's password:
sftp> ls
sftp> put /etc/profile ##上传到了aaa的宿主目录下,普通用户只能将数据上传到宿主目录,
root可以上传到其他地方直接用cd切换目录
Uploading /etc/profile to /home/aaa/profile
/etc/profile 100% 1796 1.8KB/s 00:00
sftp> ls
profile
sftp> get profile ##下载,下载到当前位置
sftp> bye
注释:如果远程服务器修改了端口号,可用下列方法登录sftp
[root@localhost ~]# sftp -o port=8888 root@192.168.10.101
4.Xshell工具(lrzsz)
注意:
rz命令可以上传文件
sz命令可以下载文件:sz /etc/passwd
如果这个命令不能用,就yum install lrzsz
四、构建密钥对验证ssh体系(方法一)
密钥对验证:要求提供相匹配的密钥信息才能通过验证。通常先在客户端中创建一 对密钥文件(公钥、私钥),然后将公钥文件放到服务器中的指定位置。远程登录 时,系统将使用公钥、私钥进行加密/解密关联验证,大大增强了远程管理的安全 性。该方式不易被假冒,且可以免交互登录,在 Shell 中被广泛使用。
1.服务器端设置登陆验证方式
[root@localhost ~]# vi /etc/ssh/sshd_config
修改(都是默认值,不用修改)
PasswordAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys ##指定公钥数据库
[root@localhost ~]# systemctl restart sshd
2.在客户端创建密钥对
[root@localhost ~]# useradd bbb
[root@localhost ~]# passwd bbb
[root@localhost ~]# su bbb
[bbb@localhost root]$ ssh-keygen -t rsa ##创建密钥
秘钥短语:用于第一次使用该秘钥时解锁秘钥用的
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/zhangsan/.ssh/id_ecdsa):
//指定私钥位置
Created directory '/home/zhangsan/.ssh'.
Enter passphrase (empty for no passphrase):
//设置私钥短语
Enter same passphrase again:
//确认所设置的短语
Your identification has been saved in /home/zhangsan/.ssh/id_ecdsa.
Your public key has been saved in /home/zhangsan/.ssh/id_ecdsa.pub.
The key fingerprint is:
……
//省略部分内容
3.将公钥文件上传到服务器
[bbb@localhost root]$ scp ~/.ssh/id_rsa.pub root@192.168.10.10:/tmp
4.在服务器中导入公钥文本
[root@localhost ~]# useradd aaa
[root@localhost ~]# passwd aaa
[root@localhost ~]# mkdir -p /home/aaa/.ssh/ ##想登陆谁的账号,就导入到谁里面
[root@localhost ~]# cat /tmp/id_rsa.pub >> /home/aaa/.ssh/authorized_keys
[root@localhost ~]# tail -l /home/aaa/.ssh/authorized_keys
[root@localhost ~]# ls -l /home/aaa/.ssh/authorized_keys
5.在客户端使用密钥对验证
[bbb@localhost root]$ ssh aaa@192.168.10.10 ##在服务器上allowusers中要添加aaa账号
[aaa@localhost ~]$ ifconfig
[aaa@localhost ~]$ ls -l /home/aaa/.ssh/authorized_keys
[aaa@localhost ~]$ tail -l /home/aaa/.ssh/authorized_keys
[aaa@localhost ~]$ exit
五、免密登录(方法二)
以下命令在客户端操作
[root@localhost ~]# ssh-keygen -t rsa
[root@localhost ~]# yum -y install openssh-clients
[root@localhost ~]# ssh-copy-id root@192.168.10.101
六、TCP Wrappers访问控制 (TCP封装)
[root@localhost ~]# vi /etc/hosts.allow
添加
sshd:61.63.65.67 192.168.10.*
注意:如果不想要192.168.10.0的主机远程,就不要添加
[root@localhost ~]# vi /etc/hosts.deny
添加(大小写不区分)
sshd:ALL