Linux中的ssh服务
一、ssh服务
1.1、ssh基础
简单说,SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信(比如Telnet、FTP都是明文的方式),一旦被截获,内容就暴露无疑。而SSH协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,是专为远程登录会话和其他网络服务提供安全性的协议。
SSH为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度,默认的SSH服务端口号为 22。
远程管理Linux系统基本上都要使用到ssh,利用SSH协议可以有效防止远程管理过程中的信息泄露问题,透过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
1.2、ssh的优点
- 数据传输是加密的,可以防止信息泄漏
- 数据传输是压缩的,可以提高传输速度
二、ssh登录方式
2.1、公钥传输原理
- 客户端发起链接请求
- 服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
- 客户端生成密钥对
- 客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
- 客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
- 服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
- 最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密。
2.2、ssh登录
2.2.1、登录方法一
ssh [远程主机用户名]@[远程服务器主机名或IP地址] -p port(端口号)
当在Linux主机上远程连接另一台Linux 主机时,如果当前所登录的用户是root的,当连接另一台主机时也是用root用户登录时,可以直接使用ssh+IP,端口默认(端口默认为22)即可,如果端口不是默认的情况下,需要使用-p指定端口。
- 本机是root用户登录,另一台主机也是root用户登录
- 本机不是root用户登录,另一台主机是root用户登录
2.2.2、登录方法2
ssh -t 中间主机IP ssh 目标主机IP·
当某些主机设置不允许我们登录是该怎么做?
假设三台主机A,B,C,由于主机C不允许主机A直接连接 但是主机C允许主机B连接,所以可以使用主机A连接主机B,主机B连接主机C,这样主机A就能与主机C相连
//主机C192.168.139.102模拟防火墙 [root@localhost ~]# iptables -A INPUT -s 192.168.139.102 -j REJECT //拒绝所有来自192.168.139.102的访问 //主机A192.168.139.100借助主机B 192.168.139.101 连接 [root@localhost ~]# ssh -t 192.168.139.101 ssh 192.168.139.102 跳板主机 目标主机
目标主机C设置
主机A 192.168.139.100
三、OpenSSH服务器
3.1、OpenSSH简介
服务名称:sshd(服务默认使用的是TCP的22端口)
服务端主程序:/usr/sbin/sshd
服务端配置文件:/etc/ssh/sshd_config
客户端配置文件:/etc/ssh/ssh.config
Centos 7系统默认已安装openssh相关软件包,并将sshd 服务添加为开机自启动。
SSHD作用:SSHD服务使用SSH协议可以用来进行远程控制,或在计算机之间传输文件。相比较之前的telnet方式传输文件要安全很多,因为telnet使用明文传输,SSH是加密传输。
3.2、SSH服务端
配置文件:/etc/ssh/sshd_config
[root@localhost ~]# vim /etc/ssh/sshd_config #Port 22//默认端口号 #AddressFamily any #ListenAddress 0.0.0.0 //监听地址设置SSHD服务器绑定的IP址,0.0.0.O表示侦听所有地址。安全建议,如果主机不需要从公网ssh访间,可以把监听址改为内网地址这个值可以写成本地工P地址,也可以写成所有地址,剧0.0.0.0表示所有IP #LoginGraceTime 2m //如果用户登录失败,在切断链接前服务器需要等待时间,单位为秒 #PermitRootLogin yes//默认允许root用户登录,ubantu不允许root远程ssh登录 #StrictModes yes//检查.ssh/文件的所有者,权限等 #MaxAuthTries 6//设置最多失败尝试登陆6次 #MaxSessions 10//同一时间最多允许10个远程连接 #PubkeyAuthentication yes//基于key验证 #PermitEmptyPasswords no//禁止空密码用户登录 PasswordAuthentication yes//基于用户和密码连接 #UseDNS no//禁用DNS反向解析,提高速度可设置为no
3.2.1、指定端口登录
将服务端端口号改为27 客户端进行连接
- 服务端端口号改为27
systemctl restart sshd ###重启sshd服务
- 客户端去连接
3.2.2、设置黑白名单
白名单:加进来允许,其余全不允许(安全性高)
黑名单:加进来不允许,其余都可以
设置白名单
不设置白名单所有用户都可以登录访问,设置了白名单后,只有白名单内的用户登录,其余任何用户都不可以登录
- 本机IP192.168.52.200,进入/etc/ssh/sshd_config 添加白名单
systemctl restart sshd 重启服务
- 主机 192.168.52.120使用my用户登录192.168.52.200
设置黑名单
3.3、ssh服务的最佳实践
- 建议使用非默认端口22
- 禁止使用protocol version 1
- 限制可登录用户
- 设定空闲会话超时时长
- 利用防火墙设置ssh访问策略
- 仅监听特定的IP地址
- 基于口令认证时,使用强密码策略,比如: tr -dc A-Za-z0-9_< /dev/urandom / head -c 12| xargs
- 使用基于密钥的认证
- 禁止使用空密码
- 禁止root用户直接登录
- 限制ssh的访问频度和并发在线数
- 经常分析日志分离
3.4、SSH客户端
3.4.1、scp-------远程安全复制
scp [-r] 其他主机的用户名@其他主机的IP:原文件 目标目录
服务端操作:
客户端操作:
四、ssh的免密登录
客户端生成密钥
客户端将公钥发给服务端
测试登录连接