SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux 系统的首选方式。在此之前,一般使用 FTP 或 Telnet 来进行远程登录。但是因为它们以明文的形式在网络中传输账户密码和数据信息,因此很不安全,很容易受到黑客发起的中间人攻击,轻则篡改传输的数据信息,重则直接抓取服务器的账户密码。
配置 sshd 服务
想要使用SSH 协议来远程管理 Linux 系统,则需要配置部署 sshd 服务程序。sshd 是基于SSH协议开发的一款远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法:
- 用账户和密码来验证登录;
- 需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器,并与服务器中的公钥进行比较;该方式相较来说更安全。
sshd 服务的配置信息保存在 /etc/ssh/sshd_config 文件中。运维人员一般会把保存着最主要配置信息的文件称为主配置文件,而配置文件中有许多以井号(#)开头的注释行,要想让这些配置参数生效,需要在修改参数后再去掉前面的井号。sshd 服务配置文件中包含的重要参数如表所示。
参数 | 作用 |
---|---|
Port 22 | 默认的 sshd 服务端口 |
ListenAddress 0.0.0.0 | 设定 sshd 服务监听的IP地址 |
Protocol 2 | SSH协议的版本号 |
HostKey /tc/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连接时服务器可以直接直接登录。
在客户端主机生成 “密钥对”
[root@client ~]# ssh-keygen //生成密钥对 回车或设置密钥的存储 回车设置密钥的密码 回车确认密钥设置的密钥
在客户端主机中生成的公钥文件传送至远程服务器。
[root@client ~]# ssh-copy-id 192.168.8.10 //密钥上传至服务器 //输入服务器管理员密码
对服务器进行设置,拒绝传统的密码验证方式。使其只允许密钥验证。修改后保存并重启 sshd 服务程序。
[root@RS ~]# vim /etc/ssh/sshd_config //修改配置文件 ………………省略部分输出信息……………… 71 #PasswordAuthentication yes 72 #PermitEmptyPasswords no 73 PasswordAuthentication no //密码验证关闭 ………………省略部分输出信息……………… [root@RS ~]# systemctl restart sshd //重启sshd服务
在客户端尝试登录到服务器,此时无须输入密码也可成功登录,特别方便。
[root@client ~]# ssh 192.168.8.10 //连接连接服务器无需密码 Activate the web console with: systemctl enable --now cockpit.socket Last login: Wed Dec 21 02:01:37 2022 from 192.168.8.30
远程传输命令
scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“ scp [参数] 本地文件 远程账户@远程 IP 地址:远程目录 ”。
与 cp 命令不同,cp 命令只能在本地硬盘中进行文件复制,而 scp 不仅能够通过网络传送数据,而且所有的数据都将进行加密处理。例如,如果想把一些文件通过网络从一台主机传递到其他主机,这两台主机又恰巧都是 Linux 系统,这时使用 scp 命令就可以轻松完成文件的传递了。scp 命令中可用的参数以及作用如表所示。
参数 | 作用 |
---|---|
-v | 显示详细的连接进度 |
-P | 指定远程主机的 sshd 端口号 |
-r | 用于传送文件 |
-6 | 使用IPV6协议 |
在使用 scp 命令把文件从本地复制到远程主机时:首先需要以绝对路径的形式写清本地文件的存放位置。如果要传送整个文件夹内的所有数据,还需要额外添加参数 -r 进行递归操作。然后写上要传送到的远程主机的 IP 地址,远程服务器便会要求进行身份验证了。当前用户名称为 root,而密码则为远程服务器的密码。
如果想使用指定用户的身份进行验证,可使用用户名@主机地址的参数格式。最后需要在远程主机的 IP 地址后面添加冒号,并在后面写上要传送到远程主机的哪个文件夹中。只要参数正确并且成功验证了用户身份,即可开始传送工作。由于 scp 命令是基于 SSH 协议进行文件传送的,而上边设置好了密钥验证,因此当前在传输文件时,并不需要账户和密码。
上传例子
[root@client ~]# echo "Welcome to www.zxbke.cn" > readme.txt
[root@client ~]# scp /root/readme.txt 192.168.8.10:/home
//以上命令将本地/root/readme.txt文件上传至服务器home目录下
下载例子
scp 命令把远程服务器上的文件下载到本地主机,其命令格式为“scp [参数]远程用户@远程 IP 地址:远程文件 本地目录”。
[root@client ~]# scp -r 192.168.8.10:/root /root/backup //将服务器的/root 下载至/root/backup