原创系统笔记

SSH服务配置 远程传输文件

本文阅读 8 分钟
首页 系统笔记 正文

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 2SSH协议的版本号
HostKey /tc/ssh/ssh_host_keySSH 协议版本为 1 时,DES 私钥存放的位置
HostKey /etc/ssh/ssh_host_rsa_keySSH 协议版本为 2 时,RSA 私钥存放的位置
HostKey /etc/ssh/ssh_host_dsa_keySSH 协议版本为 2 时,DSA 私钥存放的位置
PermitRootLogin yes设定是否允许 root 管理员直接登录
StrictModes yes当远程用户的私钥改变时直接拒绝连接
MaxAuthTries 6最大密码尝试次数
MaxSessions 10最大终端数
PasswordAuthentication yes是否允许密码验证
PermitEmptyPasswords no是否允许空密码登录(很不安全)

安全密钥验证

加密是对信息进行编码和解码的技术,它通过一定的算法(密钥)将原本能被直接阅读的明文信息转换成密文形式。密钥即是密文的钥匙,有私钥和公钥之分。在传输数据时,如果担心被他人监听或截获,就可以在传输前先使用公钥对数据加密处理,然后再进行传送。这样,只有掌握私钥的用户才能解密这段数据,除此之外的其他人即便截获了数据,一般也很难将其破译为明文信息。

下面在客户端生成密钥对,上传至服务器,使客户端ssh连接时服务器可以直接直接登录。

  1. 在客户端主机生成 “密钥对”

    [root@client ~]# ssh-keygen  //生成密钥对
    回车或设置密钥的存储
    回车设置密钥的密码
    回车确认密钥设置的密钥
  2. 在客户端主机中生成的公钥文件传送至远程服务器。

    [root@client ~]# ssh-copy-id 192.168.8.10   //密钥上传至服务器
    //输入服务器管理员密码
  3. 对服务器进行设置,拒绝传统的密码验证方式。使其只允许密钥验证。修改后保存并重启 sshd 服务程序。

    [root@RS ~]# vim /etc/ssh/sshd_config   //修改配置文件
    ………………省略部分输出信息………………
    71 #PasswordAuthentication yes
    72 #PermitEmptyPasswords no   
    73 PasswordAuthentication no   //密码验证关闭
    ………………省略部分输出信息………………
    [root@RS ~]# systemctl restart sshd   //重启sshd服务
  4. 在客户端尝试登录到服务器,此时无须输入密码也可成功登录,特别方便。

    [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
原创文章,作者:張旭,如若转载,请注明出处:http://www.zxbke.cn/66.html/