一:概述
对于Linux系统来说,系统管理员可以通过SSH协议远程管理Linux进行安全通信.通常情况下,Linux系统管理员会同时管理多台Linx主机。通过SSH协议,用户就可以在多一台主机远程上管理所有的Linux系统。
二:SSH进行安全通信之因
关于SSH,相信你进行远程登录的时候已经有了一点赘述。我们使用SSH命令登录到远程主机中并在远程主机上执行命令,还有scp命令可以将文件在远程主机之间来回传输。SSH是scp是OpenSSH客户端,命令服务器是sshd,由OpenBSD项目开发。
使用ssh命令登录到远程主机或远程主机上执行命令,然后使用scp命令将文件复制到远程主机中。当用户安装了Linux后首次引导(CentOS中)或在安装openssh-server软件包(Ubuntu中)时执行ssh-keygen命令来更改主机的私钥和公钥对。该密钥对ssh默认设置中使用,因此用户可以通过密码进行身份验证登录系统并使用ssh。OpenSSH主要用户身份验证方法如下:
- 基于主机身份的验证
- 公钥认证
- 密码认证
根据客户端请求的优先级依次尝试服务器端提供的方法,客户端的默认优先级为基于主机身份验证、公钥身份验证和密码身份认证。基于主机的身份验证是一种公用密钥身份验证,它使用在/etc/ssh目录下生成的主机私钥和公用密钥的密钥对,基于主机的身份验证和公用密钥身份验证均在客户端执行。这种方式需要对每个用户使用基于主机身份验证和公钥身份验证进行设置,因此在安装过程中只能对将密码验证用作默认设置。
SSH客户端的公开文件~/.ssh/hosts存储ssh服务器的主机名、IP地址和公用密钥。客户端对ssh服务器进行身份验证的过程中ssh登录显示公钥。用户可以在/etc/ssh/sshd_config文件中指定服务器sshd守护程序使用的公用密钥加密方法的优先级,client ssh命令使用的加密方法的优先级可以在/.ssh/config文件或者配置文件/etc/ssh/ssh_config中指定。加密通信路径的顺序如下:
- 客户端通过ssh命令连接到服务器(sshd守护程序)。
- 服务器将其在/etc/ssh下的主机公钥发送到客户端。
- 客户端通过将其存储在~/.ssh/know_hosts文件中的服务器公钥进行比较来验证服务器公钥。在服务器和客户按之间生成共享临时公用密钥。
- 使用服务器和客户端之间约定的通用密钥加密方法对通信路径加密。
- 客户端用基于主机的身份验证、公钥身份验证和密码身份验证或密码身份验证登录服务器。
ssh服务器和ssh客户端都使用/etc/ssh目录,ssh客户端引用的该目录下的文件ssh_known_hosts存储了本地系统所有用户使用ssh服务器的公钥。由于/etc/ssh目录下的ssh_known_hosts文件是所有用户执行的ssh命令所引用的文件,因此它必须具有所用用户的读取权限。
SSH是建立在应用层上的安全协议,可靠性还是有保障的,毕竟是专门为远程登录和其他网络服务提供的安全协议。因此,使用SSH进行远程登录还是比较靠谱的。
三:ssh服务器和客户端的默认配置
ssh服务器的配置文件是/etc/ssh/sshd_config,通过目录指定公共密钥认证、密码认证等认证方式的设置以及root的登录许可和拒绝等重要设置。sshd_config文件中的主要指令如下表所示。
指令 | 说明 |
AuthorizedKeysFile | 用于用户身份验证的公钥存储文件 |
PasswordAuthentication | 密码验证 |
PermitRootLogin | 根登录 |
Port | 备用端口号 |
PubkeyAuthentication | 公钥认证 |
sshd_config文件在安装时的主要默认设置(CentOS),如下表所示:
指令和设定值 | 说明 |
#Port | 默认端口号为22 |
#PermitRootLogin yes | yes表示允许root直接登录,默认 |
#PubkeyAuthentication yes | Yes表示允许公钥认证 |
#AuthorizedKeysFile | 备用端口号 |
.ssh/authorized_keys | 在CentOS中默认值变更为仅.ssh/authorized_keys |
#PasswordAuthentication yes | 允许密钥验证 |
#PermitEmptyPasswords no | 不允许密钥登录 |
看过了CentOS中的默任配置,在看看Ubuntu默认配置是什么样子的。/etc/ssh/sshd_config文件默认设置如下表所示。
指令和设定值(Ubuntu) | 说明 |
#Port22 | 默认端口号是22 |
#PermitRootLogin prohibit-password | prohibit-password表示不允许通过输入密码进行root登录 |
#PubkeyAuthentication yes | Yes表示允许公钥认证 |
#AurhorizedKeysFile | 备用端口号 |
.ssh/authorized_keys | 公钥认证 |
.ssh/authorized_keys2 | 使用默认值 |
#PasswordAuthentication yes | 允许密钥验证 |
#PermitEmptyPassword no | 不允许密码登录 |
在Ineternet上设置ssh设置服务器时,更改以下设置可以增强安全性:
#PermitRootLogin yes更改为PermitRootLogin no,
#PasswordAuthentication yes更改为PasswordAuthentication no。
<2>ssh服务器上面的默认配置比客户端要复杂的多,有关客户端的配置文件如下:
可以在用户配置文件/.ssh/config或系统配置文件/etc/ssh/ssh_config中设置执行ssh命令时的用户名、端口号和协议等信息。ssh配置文件不仅可以设置与ssh命令选项对应的目录,还可以设置在登录中使用的各种目录.config文件目录信息如下表所示:
指令 | 选项 | 说明 |
identityFile | -i | 身份文件 |
Port | -p(scp命令是-p) | 端口号 |
Protocol | -1或-2 | 协议版本 |
User | -l | 用户名 |
客户端上的用户通过ssh命令远程登录时,ssh命令会和服务器那边取得联系验证密钥是否正确,只有正确的情况况下才允许登录。