Part.4_SSH
一、ssh概念和账户密码登陆
ssh:secure shell 建立在应用层上的安全远程管理协议
ssh 是目前较为可靠的传输协议,专为远程登录会话和其他网络服务提供安全性。利用 ssh 协议可以有效防止远程管理过程中的信息泄露问题。ssh可用于大多数UNIX和类UNIX操作系统中,能够实现字符界面的远程登录管理,它默认使用22端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet协议,具有更高的安全性。
公钥 私钥
二、ssh密钥对验证模式
1、首先需要在 Client 上创建一对密钥,并且需要把公钥放在需要访问的 Server 上
2、当 Client 需要连接 Server 时,Client 端的软件就会向 Server 端发出登录请求,请求使用密钥对中的的公钥进行安全验证。
3、Server 收到请求之后,会在该用户的家目录下查询公文件,拿 Client 发送过来的公和自己家目录下的公3进行比较
4、如果两个公钥一致,Server 就用公钥加密“challenge (质疑)”,并把它发送给 Client 软件Client 收到加密内容之后,使用本地的私钥进行解密,再把解密结果发送给 Server 端,Server 端验证成功后,允许登录
C客户端——C服务器
C:C公钥、C私钥、S公钥
S:S公钥、S私钥、C公钥
1、.C发连接请求、.发C公钥
2、.S验证本地S公钥和接受到的C公钥是否一致——一致.生成一段challenge(质疑)并使用C公钥加密
3、.C使用C私钥进行解密,使用S公钥对challenge(质疑)进行加密并返回服务器
4、.通过2、3两次challenge(质疑)验证成功后,允许登陆
安全和效率不可兼得
和telnet相比安全性更好,但效率不行
三、ssh配置
1、环境准备
临时关闭防护功能
清空防火墙规则:iptables -F
临时关闭SELinux:setenforce 0
永久关闭防护功能
设置防火墙开机不自启动:chkconfig iptables off
永久关闭SELinux:sed -i ‘7s/enforcing/disabled’ /etc/selinux/config
注意:以上两条命令执行后,需要重启后服务器后才能生效:reboot
su root 进入root 模式
说明:
SELinux(Security-Enhanced Linux):扩张强制访问控制安全模块
SELINUX有「disabled」、「permissive」、「enforcing」3种模式可选择
.disabled:不加载SELinux,
.permissive:SELinux有效,但是即使你违反了策略的话它让你继续操作,但是把你的违反的内容记录下来。.在我们开发策略的时候非常的有用。相当于Debug模式。
Enforcing:就是你违反了策略,你就无法继续操作下去。
2、用户密码验证
Linux主机之间的远程管理工具是ssh命令,所以直接使用ssh进行远程登陆
格式
ssh 用户名@IP地址
|ssh hostname@192.168.88.20
|ssh root@192.168.88.20
|ssh 192.168.88.20 //(直接 “ssh IP地址”也可以,这样默认为root登陆 )
Windows远程登陆Linux主机一般使用第三方工具,比如Xshell等工具
格式:
|ssh root@192.168.88.20
注意:提前修改主机名,方便识别。
|hostname //查看主机名
|hostname name1 //更改主机名为name1
3、密钥对验证
Ⅰ、Linux主机之间的密钥对登陆验证**
①、客户端生成密钥对
ssh-keygen -t rsa -b 2048
-t 指定加密类型(rsa/dsa等)
-b 指定密钥对加密长度
rsa1024长度被暴力破解
询问1:
执行过程中会询问保存位置,一般默认保存在当前用户家目录下的.ssh/目录下。询问2:
是否对密钥文件进行加密
加密:若加密,则在调用密钥文件时需要先验证密钥的密码,密码正确才能使用密钥文件。不加密:若不加密,则密钥文件可以直接被调用,整个登录验证过程无需输入任何密码,即为免密登录。
②、客户端将公钥文件上传至服务器
ssh-copy-id 用户名@服务器IP地址
//该用户名和要用来登录服务器的用户名一致。
客户端的.ssh目录下有:
id_rsa、id_rsa.pub、known_hosts三个文件,其中id_rsa.pub就是公钥文件
服务器的.ssh目录下有:
authorized_keys
③、客户端尝试登陆服务器
ssh 用户名@服务器IP地址
//密钥对登陆验证优先级大于账户密码验证。
Ⅱ、Windows使用密钥对登陆Linux
①、使用Xshell自带的密钥对生成向导生成密钥对
密钥类型:DSA、RSA、ECDSA、ED25519
加密长度:1024、2048、(加密长度和效率之间的取舍)
过程中可以选择加密的私钥和不加密的私钥
②、将公钥导入Linux主机的指定用户下的指定公钥配置文件内
后面哪个用户登陆就放在谁家里
例如在root家目录下,找到.ssh目录,然后在里面创建authorized_keys文件,并且将公钥写入进去
③、使用windows尝试登陆指定用户
4、禁止使用密码登录
将使用密码登陆
生成环境下将账户密码登陆功能关掉
1、配置文件路径:
/etc/ssh/sshd_config
2、修改配置选项:
|PasswordAuthentication yes //将yes改为no
|PasswordAuthentication no
3、重启服务
|service sshd restart //重启服务
5、禁止使用root远程登陆
1、配置文件路径:
/etc/ssh/sshd_config
2、修改配置选项:
|PermitRootLogin yes //将yes改为no
|PermitRootLogin no
3、重启服务
|service sshd restart //重启服务
虽然使用用户登陆,但是还可以通过su -root 切换到root用户权限,变相保护root用户安全
绕一圈最后虽然都能使用root权限,主要目的是为了避免:root远程登陆。
6、修改默认端口、限制ssh监听IP
①、修改默认端口
默认情况下使用TCP的22端口,容易遭到攻击,修改端口,尽量改为高位端口(范围1~65535)
1、配置文件:/etc/ssh/sshd_config
2、配置选项:
|Port 22 //默认为22,修改为59527
|Port 59527
3、重启服务
|service sshd restart //重启服务
.使用ssh需要选择端口
|ssh 192.168.88.10 //使用默认的22端口无法使用ssh功能
|ssh 192.168.88.10 59527 //使用新的端口59527
|ssh -p 59527 root@192.168.88.10 //使用-p来指定端口
安装nmap
方法一:
yum -y install nmap
方法二:
cd /media/Packages/
rpm -ivh nmap-5.51-4.el6.x86_64.rpm
使用namp扫描
nmap -sT 192.168.88.10
nmap默认扫描低位端口、常规端口
②、限制ssh监听IP
不允许外网直接登陆,只有通过局域网才能登陆,可以在机房里设置其中一台能够被外网远程连接,其他的主机都通过这个机器进行远程连接即可
1、配置文件:/etc/ssh/sshd_config
2、配置选项:
|ListenAddress 0.0.0.0 //listen的本机的哪个网卡的IP地址,默认的0.0.0.0为所有网卡的所有IP
|ListenAddress 192.168.88.22 //本机没有22这个ip
本机想要多个IP地址,加网卡
ifconfig命令,将一个网卡设置两个ip地址
ifconfig eth0:0 192,168.88.22
3、重启服务
|service sshd restart //重启服务
4、ssh访问
|ssh 192.168.88.20 //20网卡没有监听,只监听22网卡
|ssh 192.168.88.22 //只有访问22的IP才能被处理
四、ssh服务相关命令
1、scp:安全的远程文件复制命令
概念:secure copy,用于在Linux下进行远程拷贝文件的命令,类似于命令有cp,scp传输是加密的,所以可能会稍微影响一点速度。scp非常不占用资源,不会提高多少系统负荷
scp:安全的远程文件复制命令
格式:
|scp 源文件 用户名@服务器IP:目标绝对路径
|scp /root/atguigu.txt root@192.168.88.20:/tmp //传文件到服务器
|scp root@192.168.88.20:/tmp/atguigu.txt /root/ //从服务器下载
|sco -P 2222 /root/atguigu.txt root@192.168.88.20:/tmp
-P 端口 //若端口不是默认22,则需要使用此格式指定端口,
//注意大P,小p(ssh端口指定方式为-p,scp端口指定方式为-P)
2、sftp:安全的文件传输协议
概念:Secure File Transfer Protocol,安全文件传送协议。sftp与ftp有着几乎一样的语法功能,相较于ftp,安全性更好,传输效率比普通ftp要低很多
sftp:安全的文件传输协议
格式:
|sftp 用户名@服务器IP
.pwd/lpwd //查看服务器当前路径(remote)//查看本地当前路径(local)
.cd/lcd //服务器中的目录(remote)//客户机中的目录(local)
.ls/lls //
.put //将客户机文件传到服务器
.get //将服务器端的指定文件下载到客户机的当前所在目录
.rm //删除掉服务器中的指定文件
.quit //退出sftp的交互模式,断开和服务器之间的连接
|sftp -oPort=2222 root@192.168.88.20 //被登录服务器ssh端口修改
ssh端口修改
ssh -p 端口
scp -P 端口
sftp -oPort=端口