什么是ssh
ssh是一套网络协议,目的在于保证安全的网络服务以及加密远程登录信息。
linux的ssh命令是实现了ssh协议的一个操作,并且以sshd服务的形式在linux上运行。
对ssh协议管理的开源软件是主流的openssh工具。
为什么要用ssh
当使用ssh协议连接一台机器时,我们与其之间的数据是加密的,这个登录方式很安全。即使被抓取到了信息,黑客也无法破解你的密码。
以前运维人员都是用FTP协议和telent工具进行服务器登录,这两个是基于明文传输的,很容易被抓取到数据,而且数据几乎是暴露在互联网中,会对服务器造成安全隐患。
为了登录,数据传输时的安全性,加密性,因此出现了两种主流的加密方式。
- 对称加密 使用同一个要是对数据进行加密,解密也要用这个。
- 非对称加密 两把钥匙,一个公钥,一个私钥。公钥是锁,密钥是开锁的钥匙
对称加密
账号密码登录——通过密钥加密——加密数据发给服务器——服务器通过密钥解密——登录成功
对称加密强度高,难以破解,但是当机器特别大,你得大量发送单个密钥时,这个时候安全就无法很好的保障了。但凡丢一个,其他的主机安全性就会出现问题。
非对称加密
对称加密有一个密钥,非对称加密有一对密钥(公钥,私钥)。
公钥如同一把锁,私钥就是开锁的钥匙。除非私钥丢失,否则被破解的概率非常低。
ssh登录——服务器接收后发送给用户公钥——用户接收到服务器的公钥——公钥对请求进行加密——加密后再次发给服务器——服务器接收到加密信息使用私钥解密——验证用户密码无误,进入服务器。
中间人攻击
用户访问服务器——被黑客拦截使用假的公钥——公钥加密后黑客再接收到用户数据并用私钥解密——此时黑客就获得了你的账号密码。
1.拦截客户的登录请求2.向客户端发送自己的假的公钥,此时客户端如果不知情的情况下,使用该假公钥对数据加密处理3.客户端发送自己的数据给了黑客,拿到了数据,再用自己的私钥进行解密4.客户端的账号密码此时已经被黑客获取。
如何避免登录服务器时的安全隐患
如何保证服务器的目标正确
[基于口令的]
ssh-keyscan -t ecdsa 192.168.218.162 | ssh-keygen -lf - #扫描远程服务端的指纹信息通过ssh连接时的SHA265对比

[ssh重要的配置文件]
和ssh相关的配置文件主要放在该目录$HOME/.ssh/
ssh常见配置文件,作用如下:
- Know_hosts:当客户端接收到了服务器的公钥后,服务器的公钥信息就被记录在了该文件中,也就代表着客户端相信了该服务器的公钥信息,以便于下次连接,不再需要一个确认过程。
- authorized_keys:该文件是服务器将客户端的公钥信息保存在这个文件中。
- id_rsa: 私钥文件,存放了私钥的密码
- id_rsa.pub:是公钥文件,存放公钥的密码信息
登录Linux服务器的形式
[基于口令]
直接账号密码登录
[基于公钥的认证方式登录]
基于公钥认证登录,可以实现免密登录,减少运维人员的心智负担。
1.客户端发送自己的公钥给服务器,写入到服务器的authorized_keys文件中2.服务器接收到客户端的连接请求后,在自己authoriz_keys中匹配,看是否存在该客户端的公钥信息,如果存在就生成一个随机数R,再用客户端的公钥针对随机数进行加密,得到一个加密后的随机数 公钥(R) pubkey(R)3.客户端通过自己的私钥对pubkey(R)进行解密,得到一个加密后的随机数再针对这个随机数R和当前连接会话sessionkey采用MD5加密方式,生成摘要Diest1,再次发送服务器进行验证。4.服务器针对这个随机数R和sessionkey也采用同样的摘要算法计算得出Digest25.服务器对比 Digest1 Digest2 是否一致 一致则通过 登录服务器成功
SSH免密登录实战
1.客户端生成一对公钥私钥ssh-keygen -t rsa2.客户端发送自己的公钥发送给服务器,存在服务器的authorized_keys文件中ssh-copy-id root@192.168.218.1553.此时就可以免密登录了ssh root@192.168.218.1554.检查用户的公钥cat ~/.ssh/authorized_keys
服务器安全与sshd配置
在生产服务器下,运维人员一般都会禁止root用户登录服务器,最大程度的保障服务器的安全和被黑客攻击的几率,以及修改ssh的远程连接接口。
- 修改ssh端口 Port 1022
- 禁止root登录 PermitRootLogin no
- 禁止用密码登录,只能被信任的机器登录,用公钥进行登录 PasswordAuthentication no
- 设置sudoers ```shell vim /etc/ssh/sshd_config Port 1022 #修改ssh端口 AddressFamily any #支持ipv4和ipv6登录 ListenAddress 0.0.0.0 #监听该机器的所有网卡 PermitRootLogin no #禁止root用户登录 PasswordAuthentication no #禁止密码登录 PubkeyAuthentication yes #是否允许公钥登录 AuthorizedKeysFile .ssh/authorized_keys #自定义公钥的存放文件
此时千万不要重启服务
需要创建配置公私钥
vim /etc/sudoers liao123 ALL=(ALL) ALL
ssh liao@192.168.218.100 -p 1022 #使用该命令即可登录 ```
