ssh简介
Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH通过在网络中创建安全隧道来实现SSH客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH实现安全传输,SSH最常见的用途是远程登录系统,人们通常利用SSH来传输命令行界面和远程执行命令。SSH使用频率最高的场合是类Unix系统,但是Windows操作系统也能有限度地使用SSH。
SSH以非对称加密实现身份验证。身份验证有多种途径,例如:其中一种方法是使用自动生成的公钥-私钥对来简单地加密网络连接,随后使用密码认证进行登录;另一种方法是人工生成一对公钥和私钥,通过生成的密钥进行认证,这样就可以在不输入密码的情况下登录。任何人都可以自行生成密钥。公钥需要放在待访问的电脑之中,而对应的私钥需要由用户自行保管。认证过程基于生成出来的私钥,但整个认证过程中私钥本身不会传输到网络中。
SSH协议有两个主要版本,分别是SSH-1和SSH-2。无论是哪个版本,核实未知密钥来源都是重要的事情,因为SSH只验证提供用户是否拥有与公钥相匹配的私钥,只要接受公钥而且密钥匹配服务器就会授予许可。这样的话,一旦接受了恶意攻击者的公钥,那么系统也会把攻击者视为合法用户。
应用
SSH的经典用途是登录到远程电脑中执行命令。除此之外,SSH也支持隧道协议、端口映射和X11连接。借助SFTP或SCP协议,SSH还可以传输文件。
SSH使用客户端-服务器模型,标准端口为22。服务器端需要开启SSH守护进程以便接受远端的连接,而用户需要使用SSH客户端与其创建连接。
大多数现代操作系统(包括macOS、大部分Linux、OpenBSD、FreeBSD、Solaris等系统)都提供了SSH,包括Windows系统也提供SSH程序(在Windows 10 1809版本之后)。
SSH的安全验证
在客户端来看,SSH提供两种级别的安全验证。
第一种级别(基于密码的安全验证),知道帐号和密码,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,可能会有别的服务器在冒充真正的服务器,无法避免被“中间人”攻击。
第二种级别(基于密钥的安全验证),需要依靠密钥,也就是你必须为自己创建一对密钥,并把公有密钥放在需要访问的服务器上。客户端软件会向服务器发出请求,请求用你的密钥进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密钥,然后把它和你发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有密钥加密“质询”(challenge)并把它发送给客户端软件。从而避免被“中间人”攻击。
配置文件说明
首先我们要知道,在linux中,sshd服务是默认开启的,也就是开机自启动,端口号为22,默认允许所有人的远程登录。
sshd服务的配置信息保存在/etc/ssh/sshd_config文件中,也就是ssh的主配置文件,以下是其中主要配置。
Port 22 默认的sshd服务端口
ListenAddress 0.0.0.0 设定sshd服务器监听的IP地址
Protocol 2 SSH协议的版本号
HostKey /etc/ssh/ssh_host_key SSH协议版本为1时,DES私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_key SSH协议版本为2时,RSA私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_key SSH协议版本为2时,DSA私钥存放的位置
PermitRootLogin yes 设定是否允许root管理员直接登录(为了安全考虑,可以禁用)
StrictModes yes 当远程用户的私钥改变时直接拒绝连接
MaxAuthTries 6 最大密码尝试次数
MaxSessions 10 最大终端数
PasswordAuthentication yes 是否允许密码验证
PermitEmptyPasswords no 是否允许空密码登录(很不安全)
因为其中一些重要配置项被#号注释掉了,过滤不出来,所以就列出来了。
远程登录方式
刚才也说了,ssh有两种认证方式:密码认证和密钥对认证。
密码验证
首先来说说密码验证,远程登录请求时将自动生成的密钥对保存在本地,然后通过linux中已有用户登录。通常情况下,为了安全考虑,会将端口号更改。
在RHEL7中,已经默认安装并启用了sshd服务程序。在linux中远程登录格式为:ssh 【选项】 主机IP
[root@linus ~]# ssh 192.168.1.124
The authenticity of host '192.168.1.124 (192.168.1.124)' can't be established.
ECDSA key fingerprint is SHA256:UPiyXj1RamlkIMDY4KO4mzUtR8cm8mCzL6b5E1YIEAY.
ECDSA key fingerprint is MD5:f2:2c:7f:88:a0:e3:1e:1c:36:aa:f7:fc:bd:76:a1:eb.
Are you sure you want to continue connecting (yes/no)? yes #确认
Warning: Permanently added '192.168.1.124' (ECDSA) to the list of known hosts.
root@192.168.1.124's password: #对面主机root密码,推荐禁用root用户登录
Last login: Fri Mar 27 02:26:33 2020 from 192.168.1.11
[root@linus ~]# exit
登出
Connection to 192.168.1.124 closed.
在windows中登录就很简单了,直接使用终端控制工具,例如Xshell,直接输入IP地址即可登录。
安全密钥验证
1.在客户端中生成密钥对
[root@linus ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 按回车键或设置密钥的存储路径
Enter passphrase (empty for no passphrase): 直接按回车键或设置密钥的密码
Enter same passphrase again: 再次按回车键或设置密钥的密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:77piQNn4qxSlD5ALYfPO6dY83axnyL4FrTSuQARRmEc root@linus.linux
The key's randomart image is:
+---[RSA 2048]----+
|.=*E |
|.++o |
|. +o +. |
| .+o=o. . |
| .*+. +S. |
| o ++= *. |
| +.=o=.+. |
| ... *oo+ |
| .+.=*o. |
+----[SHA256]-----+
2.把客户端中的公钥文件传送至远程主机
[root@linus ~]# ssh-copy-id 192.168.1.124
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.1.124's password: #输入远程服务器root密码
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '192.168.1.124'"
and check to make sure that only the key(s) you wanted were added.
3.对服务器进行设置,使其只允许密钥验证,拒绝口令验证
[root@linus ~]# vim /etc/ssh/sshd_config
PasswordAuthentication no #此项被注释掉了,可以自己写入或取消注释
4.在客户端尝试登陆服务器,此时的密码就是你在生成密钥对时设置的密码,若未设置,则可以直接登陆
[root@linus ~]# ssh 192.168.1.124
Enter passphrase for key '/root/.ssh/id_rsa':
Last login: Fri Mar 27 02:34:35 2020 from 192.168.1.125
对于安全方面来说,第二种方式更加安全,免密码登录的方式在运维时非常方便,而且也具有安全性,简直不要太舒服。