博文目录
1、SSH远程管理
2、使用SSH客户端程序
3、构建密钥对验证的SSH体系算法
SSH是一种安全通道协议,主要用来实现字符界面的远程登陆、远程复制等功能。SSH协议对通讯双方的数据传输进行了加密处理,其中包括用户登陆时输入的用户口令。与早期的Telent、RSH、RCP、等应用相比,SSH协议提供了更好的安全性。数据库
在Centos 7.4系统中,OpenSSH服务器由openssh、openssh-server等软件包提供(默认已安装),并已将sshd添加为标准的系统服务。执行“systemctl start sshd”命令便可启动sshd服务,包括root在内的大部分用户均可以远程登陆系统。sshd服务的配置文件默认位于/etc/ssh/sshd_config目录下,正确调整相关配置项,能够进一步提升sshd远程登陆的安全性。vim
sshd服务使用的默认端口号为22,必要时建议修改此端口号,并指定监听服务的具体IP地址,以提升在网络中的隐蔽性。V2版本要比V1版本的安全性要更好,禁用DNS反向解析能够提升服务器的响应速度。centos
[root@centos01 ~]# vim /etc/ssh/sshd_config <!--编辑sshd主配置文件--> 17 Port 22 <!--监听端口为22--> 19 ListenAddress 192.168.100.10 <!--监听地址为192.168.100.10--> 21 Protocol 2 <!--使用SSH V2协议--> 118 UseDNS no <!--禁用DNS反向解析--> ...... <!--此处省略部份内容--> [root@centos01 ~]# systemctl restart sshd <!--重启sshd服务-->
sshd服务默认容许root用户登陆,但在Internet中使用时是很是不安全的。关于sshd服务的用户登陆控制,一般应禁止root用户或密码为空的用户登陆。另外,能够限制登陆验证的时间(默认为2分钟)及最大重试次数,若超过限制后仍未能登陆则断开链接。安全
[root@centos01 ~]# vim /etc/ssh/sshd_config <!--编辑sshd主配置文件--> 37 LoginGraceTime 2m <!--登陆验证时间为2分钟--> 38 PermitRootLogin yes <!--禁止root用户登陆--> 40 MaxAuthTries 6 <!--最大重试次数为6--> 67 PermitEmptyPasswords no <!--禁止空密码用户登陆--> ...... <!--此处省略部份内容--> [root@centos01 ~]# systemctl restart sshd <!--重启sshd服务-->
对于服务器的远程管理,除了用户帐户的安全控制之外,登陆验证的方式也很是重要。sshd服务支持两种验证方式——密码验证、密钥对验证,能够设置只使用其中一种方式,也能够两种方式都启用。服务器
- 密码验证:对服务器中本地系统用户的登陆名称、密码进行验证。这种方式使用最为简便,但从客户端角度来看,正在链接的服务器有可能被假冒;从服务器角度来看,当遭遇密码穷举第三者时防护能力比较弱。
- 密钥对验证:要求提供相匹配的密钥信息才能经过验证。一般先在客户端中建立一对密钥文件(公钥、私钥),而后将公钥文件放到服务器中的指定位置。远程登陆时,系统将使用公钥,私钥进行加密/解密关联验证,大大加强了远程管理的安全性。该方式不易被假冒,且能够免交互登陆,在Shell中被普遍使用。
当密码验证,密钥对验证都启用时,服务器将优先使用密钥对验证。对于安全性要求较高的服务器,建议将密码验证方式禁用,只容许启用密钥对验证方式;若没有特殊要求,则两种方式均可以启用。网络
[root@centos01 ~]# vim /etc/ssh/sshd_config <!--编辑sshd主配置文件--> 43 PubkeyAuthentication yes <!--启用密钥对验证--> 47 AuthorizedKeysFile .ssh/authorized_keys <!--指定公钥库文件--> 66 PasswordAuthentication yes <!--启用密码验证--> ...... <!--此处省略部份内容--> [root@centos01 ~]# systemctl restart sshd <!--重启sshd服务-->
其中,公钥文件用来保存多个客户端上传的公钥文本,以便与客户端本地的私钥文件进行匹配。dom
在Centos 7.4系统中,OpenSSH客户端由openssh-clients软件包提供(默认已安装),其中包括ssh远程登陆命令,以及scp、sftp远程复制和文件传输命令等。ssh
经过ssh命令能够远程登陆sshd服务,为用户提供一个安全的Shell环境,以便对服务器进行管理和维护。使用时应指定登陆用户、目标主机地址做为参数。示例以下:ide
[root@centos02 ~]# ssh root@192.168.100.10 root@192.168.100.10's password: Last login: Mon Nov 11 19:02:50 2019 from 192.168.100.254 [root@centos01 ~]# [root@centos01 ~]# [root@centos01 ~]# ssh root@192.168.100.10 The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established. ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I. ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b. Are you sure you want to continue connecting (yes/no)? yes <!--接受密钥--> Warning: Permanently added '192.168.100.10' (ECDSA) to the list of known hosts. root@192.168.100.10's password: <!--输入密码--> Last login: Mon Nov 11 19:03:08 2019 from 192.168.100.20 [root@centos01 ~]# who <!--确认当前用户--> root pts/1 2019-11-11 19:03 (192.168.100.20) root pts/2 2019-11-11 19:04 (192.168.100.10)
若是sshd服务器使用了非默认的端口(如2222),则在登陆时必须经过“-p”选项指定端口号。示例以下:
[root@centos01 ~]# vim /etc/ssh/sshd_config<!--修改ssh主配置文件--> Port 2222 <!--修改监听端口号为2222--> [root@centos01 ~]# systemctl restart sshd <!--重启sshd服务--> [root@centos02 ~]# ssh -p 2222 root@192.168.100.10 <!--客户端登陆ssh--> root@192.168.100.10's password: <!--输入密码--> Last login: Mon Nov 11 19:20:28 2019 from 192.168.100.10 [root@centos01 ~]# <!--成功登陆-->
经过scp命令能够利用SSH安全链接与远程主机相互复制文件,使用scp命令时,除了必须指定复制源、目标以外,还应指定目标主机地址、登陆用户,执行后根据提示输入验证口令便可。示例以下:
[root@centos02 ~]# scp root@192.168.100.10:/etc/ssh/sshd_config ./ <!--将远程主机数据复制到本地数据,保存在当前位置--> root@192.168.100.10's password: <!--输入密码--> sshd_config 100% 3910 3.6MB/s 00:00 [root@centos02 ~]# scp -r ./sshd_config root@192.168.100.10:/opt <!--将本地数据上传到远程主机目录的opt中--> root@192.168.100.10's password: <!--输入密码--> sshd_config 100% 3910 1.2MB/s 00:00
经过sftp命令能够利用SSH安全链接与远程主机上传、下载文件,采用了与FTP相似的登陆过程和交互环境,便于目录资源管理。示例以下:
[root@centos01 ~]# cd /opt/ <!--进入opt目录--> [root@centos01 opt]# sftp root@192.168.100.20 <!--登陆sftp--> root@192.168.100.20's password: <!--输入密码--> Connected to 192.168.100.20. sftp> pwd <!--查看客户端登陆sftp的位置默认在宿主目录--> Remote working directory: /root sftp> put sshd_config <!--上传数据到远程主机--> Uploading sshd_config to /root/sshd_config sshd_config 100% 3910 6.4MB/s 00:00 sftp> get sshd_config <!--下载数据到本地--> Fetching /root/sshd_config to sshd_config /root/sshd_config 100% 3910 3.6MB/s 00:00 sftp> exit <!--退出登陆-->
密钥对验证方式能够远程登陆提供更好的安全性。在Linux服务器、客户端中构建密钥对验证SSH体系的基本过程。以下图所示,整个过程包括四步,首先要在SSH客户端以zhangsan用户身份建立密钥对,而且要将建立的公钥文件上传至SSH服务器端,而后要将公钥信息导入服务器端的目标用户lisi的公钥数据库,最后以服务器端用户lisi的身份登陆验证。
在客户端中,经过ssh-keygen工具为当前用户建立密钥对文件。可用的加密算法为ECDSA或DSA(ssh-keygen命令的“-t”选项用于指定算法类型)。示例以下:
[root@centos02 ~]# ssh-keygen -t dsa <!--建立密钥对--> Generating public/private dsa key pair. Enter file in which to save the key (/root/.ssh/id_dsa): <!--指定私钥位置--> Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <!--设置私钥短语--> Enter same passphrase again: <!--确认所设置的短语--> Your identification has been saved in /root/.ssh/id_dsa. Your public key has been saved in /root/.ssh/id_dsa.pub. The key fingerprint is: SHA256:zv0EdqIuOfwSovN2Dkij08y9wZ0f1+IyhY7LFNKKzkk root@centos02 The key's randomart image is: +---[DSA 1024]----+ | | | | | | | . | | o . o S.+ . | | * *.+.=.+.= | |o E.*o+==.+ o | | =o..*Oo++ + | | ++oo+*+o. . | +----[SHA256]-----+ [root@centos02 ~]# ls -lh ~/.ssh/id_dsa* <!--确认生成的密钥文件--> -rw------- 1 root root 668 11月 12 16:11 /root/.ssh/id_dsa -rw-r--r-- 1 root root 603 11月 12 16:11 /root/.ssh/id_dsa.pub
新生成的密钥对文件中,id_das是私钥文件,权限默认为600,对于私钥文件必须妥善保管,不能泄露给他人;id_dsa.pub是公钥文件,用来提供给ssh服务器。
将上一步生成的公钥文件上传至服务器,并部署到服务器端用户的公钥数据库中。上传公钥文件时能够选择SCP、FTP、HTTP甚至发送E-mail等任何方式。
root@centos02 ~]# ssh-copy-id -i ./.ssh/id_dsa.pub root@192.168.100.10 <!--将公钥文件上传至服务器并导入公钥文本--> /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "./.ssh/id_dsa.pub" The authenticity of host '192.168.100.10 (192.168.100.10)' can't be established. ECDSA key fingerprint is SHA256:PUueT9fU9QbsyNB5NC5hbSXzaWxxQavBxXmfoknXl4I. ECDSA key fingerprint is MD5:6d:f7:95:0e:51:1a:d8:9e:7b:b6:3f:58:51:51:4b:3b. Are you sure you want to continue connecting (yes/no)? yes <!--输入yes--> /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.100.10's password: <!--输入密码--> Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.100.10'" and check to make sure that only the key(s) you wanted were added.
当私钥文件(客户端)、公钥文件(服务器)均部署到位之后,就能够在客户端中进行测试了。首先确认客户端中当前的用户为root,而后经过ssh命令以服务器端用户root的身份进行远程登陆。若是密钥对验证方式配置成功,则在客户端将会要求输入私钥短语,以便调用私钥文件进行匹配(若未设置私钥短语,则直接登入目标服务器)。
[root@centos02 ~]# ssh root@192.168.100.10 <!--登陆ssh服务器--> Last login: Tue Nov 12 16:03:56 2019 from 192.168.100.254 [root@centos01 ~]# who <!--登陆成功服务器,查看都有哪些用户--> root pts/0 2019-11-12 17:35 (192.168.100.20) root pts/2 2019-11-12 16:03 (192.168.100.254)
—————— 本文至此结束,感谢阅读 ——————