我是靠谱客的博主 如意小蚂蚁,最近开发中收集的这篇文章主要介绍Linux系列教程(13)- 使用 ssh 服务管理远程主机,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用 ssh 服务管理远程主机

配置 sshd 服务

SSH(Secure Shell)是一种能够以安全的方式提供远程登录的协议,也是目前远程管理
Linux 系统的首选方式。在此之前,一般使用 FTP 或 Telnet 来进行远程登录。但是因为它们
以明文的形式在网络中传输账户密码和数据信息,因此很不安全。

想要使用 SSH 协议来远程管理 Linux 系统,则需要部署配置 sshd 服务程序。sshd 是基于 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 是否允许空密码登录(很不安全)

sshd 服务的配置信息保存在/etc/ssh/sshd_config 文件中。

# cat /etc/ssh/sshd_config

密码登录

在 RHEL 7 系统中,已经默认安装并启用了 sshd 服务程序。接下来使用 ssh 命令进行远
程连接,其格式为“ssh [参数] 主机 IP 地址”。要退出登录则执行 exit 命令。

[root@linuxprobe ~]# ssh 192.168.10.10
root@192.168.10.20's password:
[root@linuxprobe ~]# exit

命令

状态
# systemctl status sshd
重启
# systemctl restart sshd
开机启动
# systemctl enable sshd

公钥密钥登录

可以实现免输入密码进行登录。

在客户端主机中生成“密钥对”,在.ssh目录。

# ssh-keygen
一直回车

把客户端主机中生成的公钥文件传送至远程主机。

ssh-copy-id -p port user@remotr

# ssh-copy-id 192.168.10.10
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.10.10's password:输入远程服务器密码

在客户端尝试登录到服务器,此时无须输入密码也可成功登录。

远程传输命令

scp(secure copy)是一个基于 SSH 协议在网络之间进行安全传输的命令,其格式为“scp
[参数] 本地文件 远程帐户@远程 IP 地址:远程目录”。

由于 scp 命令是基于 SSH 协议进行文件传送的,上节又设置好了密钥验证,因
此当前在传输文件时,并不需要账户和密码。

[root@linuxprobe ~]# echo "Welcome to LinuxProbe.Com" > readme.txt
[root@linuxprobe ~]# scp /root/readme.txt 192.168.10.20:/home
输入远程root管理员密码

此外,还可以使用 scp 命令把远程主机上的文件下载到本地主机,其命令格式为“scp [参
数] 远程用户@远程 IP 地址:远程文件 本地目录”。例如,可以把远程主机的系统版本信息文
件下载过来,这样就无须先登录远程主机,再进行文件传送了,也就省去了很多周折。

[root@linuxprobe ~]# scp 192.168.10.20:/etc/redhat-release /root
root@192.168.10.20's password: root
redhat-release 100% 52 0.1KB/s 00:00
[root@linuxprobe ~]# cat redhat-release

远程登录客户端

Linux 系统中是通过 ssh 服务实现的远程登录功能,默认 ssh 服务端口号为 22。

Window 系统上 Linux 远程登录客户端有Xshell ,SecureCRT, Putty, SSH Secure Shell 等

xshell上使用公钥登陆Linux服务器

1.设置连接

设置协议=SSH、IP、端口

2.设置用户身份验证

方法=public key 用户名=root

3.生成公钥

点击浏览生成,一直下一步,输入密码123456

最后保存成文件如:id_rsa_2048.pub,然后填写生成公钥过程中输入的密码 ,文件内容如下

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAn6gjMhvBsm5lghzmWNlQlrL0DByMtslErHbzrmp4l8qCdOgRMhJH8zI3IoBPqnFv+9Vf5+qGlMdG+DfW17HEiz8tnqvhjdjviGK0ZVBANNIjVaTst5GsMVfOdR9pBdudMQa6bffV6wV7UiJ0XLQYD3GSEjBDH+ZTt7cU/zTV5ph8n4evaK301IwGcBU90pQmoMSmkYqu+wnkS8OApyX9OEsoTe4H7l8EImVdzw5nCrnSKBgPMd1JGqo1wpBrK+3ZwdDhc/Q/TNX1TpNd/nbB2JJGdOzBdugVZyW/8hoVAaWt6uVRStq4jWoSRUagmuA1Anrs2lPyIQVEmX/GxUZ9GQ==

4.上传公钥文件到linux服务器的~/.ssh/目录

5.执行命令cat id_rsa_2048.pub >> authorized_keys,如果没有authorized_keys,则自己创建一个

6.修改权限chmod 600 authorized_keys

7.打开之前设置的连接就可以使用公钥连上服务器了

sftp 服务程序

sftp采用的是ssh加密隧道,安全性方面比ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装,默认已经安装,可以

# ssh -V
# sftp 127.0.0.1
Connected to 127.0.0.1.
sftp> ls

众所周知sftp账号是基于ssh账号的,所以在默认情况下访问服务器的权限是非常大的,进行sftp用户权限设置

你的openssh-server版本至少得失4.8p1。

1、创建sftp用户组

groupadd sftp

2、创建ftp用户

useradd -g sftp -s /sbin/nologin -M sftpuser
passwd sftpuser

3、创建家目录并指定权限

注释:给家目录更改属主并授权家目录属主必须是root,权限可以是755或者750

mkdir -p /opt/data 
usermod -d /opt/data sftpuser

chown root:root /opt/data
chmod 755 /opt/data

4、创建可写目录

mkdir /opt/data/file -p
chown sftpuser:sftp /opt/data/file

5、编辑配置文件/etc/ssh/sshd_config

注释掉X11Forwarding yes 这句话,大概在101行
注释掉Subsystem sftp /usr/libexec/openssh/sftp-server 这句话,大概在132行

并在文件末尾添加如下语句:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory /opt/data
ForceCommand    internal-sftp
AllowTcpForwarding no
X11Forwarding no

# systemctl restart sshd

6、验证

# sftp sftpuser@127.0.0.1

注释:文件只能删除至/opt/data/file目录下,可以上传和删除。默认端口22

使用 vsftpd 服务传输文件

文件传输协议

今天的互联网是由几千万台个人计算机、工作站、服务器、小型机、大型
机、巨型机等具有不同型号、不同架构的物理设备共同组成的,而且即便是个人计算机,也
可能会装有 Windows、Linux、UNIX、Mac 等不同的操作系统。为了能够在如此复杂多样的
设备之间解决问题解决文件传输问题,文件传输协议(FTP)应运而生。

FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20、21
号端口,其中端口 20(数据端口)用于进行数据传输,端口 21(命令端口)用于接受客户端
发出的相关 FTP 命令与参数。

FTP 协议有下面两种工作模式。
➢ 主动模式:FTP 服务器主动向客户端发起连接请求。
➢ 被动模式:FTP 服务器等待客户端发起连接请求(FTP 的默认工作模式)。

防火墙一般是用于过滤从外网进入内网的流量,因此有些时候需要将 FTP 的工作模式设置为

主动模式,才可以传输数据。

vsftpd(very secure ftp daemon,非常安全的 FTP 守护进程)是一款运行在 Linux 操作系
统上的 FTP 服务程序,不仅完全开源而且免费,此外,还具有很高的安全性、传输速度,以
及支持虚拟用户验证等其他 FTP 服务程序不具备的特点。

# yum install vsftpd

vsftpd 服务程序的主配置文件(/etc/vsftpd/vsftpd.conf)

[root@linuxprobe ~]# mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_bak
[root@linuxprobe ~]# grep -v "#" /etc/vsftpd/vsftpd.conf_bak > /etc/vsftpd/vsftpd.conf
[root@linuxprobe ~]# cat /etc/vsftpd/vsftpd.conf

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES

配置参数说明:

listen=[YES|NO]  是否以独立运行的方式监听服务
listen_address=IP 地址  设置要监听的 IP 地址
listen_port=21  设置 FTP 服务的监听端口
download_enable=[YES|NO]  是否允许下载文件
userlist_enable=[YES|NO]
userlist_deny=[YES|NO]
设置用户列表为“允许”还是“禁止”操作
max_clients=0  最大客户端连接数,0 为不限制
max_per_ip=0  同一 IP 地址的最大连接数,0 为不限制
anonymous_enable=[YES|NO]  是否允许匿名用户访问
anon_upload_enable=[YES|NO]  是否允许匿名用户上传文件
anon_umask=022  匿名用户上传文件的 umask 值
anon_root=/var/ftp  匿名用户的 FTP 根目录
anon_mkdir_write_enable=[YES|NO] 是否允许匿名用户创建目录
anon_other_write_enable=[YES|NO]
是否开放匿名用户的其他写入权限(包括重命名、删
除等操作权限)
anon_max_rate=0  匿名用户的最大传输速率(字节/秒),0 为不限制
local_enable=[YES|NO]  是否允许本地用户登录 FTP
local_umask=022  本地用户上传文件的 umask 值
local_root=/var/ftp  本地用户的 FTP 根目录
chroot_local_user=[YES|NO]  是否将用户权限禁锢在 FTP 目录,以确保安全
local_max_rate=0  本地用户最大传输速率(字节/秒),0 为不限制

vsftpd 服务程序

vsftpd 作为更加安全的文件传输的服务程序,允许用户以三种认证模式登录到 FTP 服务
器上。
➢ 匿名开发模式 :是一种最不安全的认证模式,任何人都可以无需密码验证而直接登录
到 FTP 服务器。
➢本地用户模式 :是通过 Linux 系统本地的账户密码信息进行认证的模式,相较于匿名
开放模式更安全,而且配置起来也很简单。但是如果被黑客破解了账户的信息,就可
以畅通无阻地登录 FTP 服务器,从而完全控制整台服务器。
➢ 虚拟用户模式:是这三种模式中最安全的一种认证模式,它需要为 FTP 服务单独
建立用户数据库文件,虚拟出用来进行口令验证的账户信息,而这些账户信息在
服务器系统中实际上是不存在的,仅供 FTP 服务程序进行认证使用。这样,即使
黑客破解了账户信息也无法登录服务器,从而有效降低了破坏范围和影响。
ftp 是 Linux 系统中以命令行界面的方式来管理 FTP 传输服务的客户端工具。

# yum install vsftpd
# systemctl restart vsftpd.service # 重启服务
# systemctl start vsftpd.service  # 启动服务
# systemctl status vsftpd.service  # 服务状态查看

匿名开放模式

无需密码验证而直接登录到 FTP 服务器。这种模式一般用来访问不重要的公开文件。

vsftpd 服务程序默认开启了匿名开放模式,我们需要做的就是开放匿名用户的上传、下
载文件的权限,以及让匿名用户创建、删除、更名文件的权限。添加配置

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
......
[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd

现在就可以在客户端执行 ftp 命令连接到远程的 FTP 服务器了。在 vsftpd 服务程序的匿
名开放认证模式下,其账户统一为 anonymous,密码为空。而且在连接到 FTP 服务器后,默
认访问的是/var/ftp 目录。我们可以切换到该目录下的 pub 目录中,然后尝试创建一个新的目
录文件,以检验是否拥有写入权限

[root@linuxprobe ~]# ftp 192.168.10.10
ftp> cd pub
250 Directory successfully changed.
ftp> mkdir files
550 Permission denied.

下面将目录的所有者身份改成系统账户 ftp 即可

[root@linuxprobe ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 3 root root 16 Jul 13 14:38 /var/ftp/pub
[root@linuxprobe ~]# chown -Rf ftp /var/ftp/pub
[root@linuxprobe ~]# ls -ld /var/ftp/pub
drwxr-xr-x. 3 ftp root 16 Jul 13 14:38 /var/ftp/pub

本地用户模式

相较于匿名开放模式,本地用户模式要更安全,而且配置起来也很简单。

anonymous_enable=NO 禁止匿名访问模式
local_enable=YES 允许本地用户模式
write_enable=YES 设置可写权限
local_umask=022 本地用户模式创建文件的 umask 值
userlist_enable=YES 启用“禁止用户名单”,名单文件为 ftpusers 和 user_list
userlist_deny=YES 开启用户作用名单文件功能

[root@linuxprobe ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
[root@linuxprobe ~]# systemctl restart vsftpd
[root@linuxprobe ~]# systemctl enable vsftpd

vsftpd 服务程序所在的目录中默认存放着两个名为“用户名单”的文件(ftpusers 和 user_list)。

在采用本地用户模式登录 FTP 服务器后,默认访问的是该用户的家目录。而且该目录的默认所有者、所属组都是该用户自己,因此不存在写入权限不足的情况。可以采用如下属性修改默认更目录。

local_root=/var/ftp  本地用户的 FTP 根目录

虚拟用户模式

虚拟用户模式是这三种模式中最安全的一种认证模式

数据库文件创建

创建用于进行 FTP 认证的用户数据库文件,其中奇数行为账户名,偶数行为密
码。例如,我们分别创建出 ftpuser1和 ftpuser2两个用户,密码均为 ftpuser2

# cd /etc/vsftpd/
# vi vuser.list
ftpuser1
ftpuser2
ftpuser2
ftpuser2

但是,明文信息既不安全,也不符合让 vsftpd 服务程序直接加载的格式,因此需要使
用 db_load 命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低
数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件
删除。

# db_load -T -t hash -f vuser.list vuser.db
# file vuser.db
vuser.db: Berkeley DB (Hash, version 9, native byte-order)
# chmod 600 vuser.db
# rm -f vuser.list
建立linux用户

创建 vsftpd 服务程序用于存储文件的根目录以及虚拟用户映射的系统本地
用户。FTP 服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。

由于 Linux 系统中的每一个文件都有所有者、所属组属性,例如使用虚拟账户“张三”
新建了一个文件,但是系统中找不到账户“张三”,就会导致这个文件的权限出现错误。为此,
需要再创建一个可以映射到虚拟用户的系统本地用户。简单来说,就是让虚拟用户默认登录
到与之有映射关系的这个系统本地用户的家目录中,虚拟用户创建的文件的属性也都归属于
这个系统本地用户,从而避免 Linux 系统无法处理虚拟用户所创建文件的属性权限。

为了方便管理 FTP 服务器上的数据,可以把这个系统本地用户的家目录设置为/var 目录
(该目录用来存放经常发生改变的数据)。并且为了安全起见,我们将这个系统本地用户设置
为不允许登录 FTP 服务器,这不会影响虚拟用户登录,而且还可以避免黑客通过这个系统本
地用户进行登录。

# useradd -d /var/ftproot -s /sbin/nologin virtual
# ls -ld /var/ftproot/
drwx------. 3 virtual virtual 74 Jul 14 17:50 /var/ftproot/
# chmod -Rf 755 /var/ftproot/
建立用于支持虚拟用户的 PAM 文件。

PAM(可插拔认证模块)是一种认证机制,通过一些动态链接库和统一的 API 把系统提
供的服务与认证方式分开,使得系统管理员可以根据需求灵活调整服务程序的不同认证方式。

通俗来讲,PAM 是一组安全机制的模块,系统管理员可以用来轻易地调整服务程序的认
证方式,而不必对应用程序进行任何修改。PAM 采取了分层设计(应用程序层、应用接口层、
鉴别模块层)的思想。

新建一个用于虚拟用户认证的 PAM 文件 vsftpd.vu,其中 PAM 文件内的“db=”参数为
使用 db_load 命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀:

# vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser
配置PAM认证

在 vsftpd 服务程序的主配置文件中通过 pam_service_name 参数将 PAM 认证
文件的名称修改为 vsftpd.vu,PAM 作为应用程序层与鉴别模块层的连接纽带,可以让应用程
序根据需求灵活地在自身插入所需的鉴别功能模块。当应用程序需要 PAM 认证时,则需要在
应用程序中定义负责认证的 PAM 配置文件,实现所需的认证功能。
例如,在 vsftpd 服务程序的主配置文件中默认就带有参数 pam_service_name=vsftpd,表
示登录 FTP 服务器时是根据/etc/pam.d/vsftpd 文件进行安全认证的。现在我们要做的就是把
vsftpd 主配置文件中原有的 PAM 认证文件 vsftpd 修改为新建的 vsftpd.vu 文件即可。该操作中
用到的参数以及作用如表 11-4 所示。

anonymous_enable=NO 禁止匿名开放模式
local_enable=YES 允许本地用户模式

guest_enable=YES 开启虚拟用户模式
guest_username=virtual 指定虚拟用户账户
pam_service_name=vsftpd.vu 指定 PAM 文件
allow_writeable_chroot=YES允许对禁锢的FTP 根目录执行写入操作,而且不拒绝用户的登录请求

[root@linuxprobe ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
guest_enable=YES 
guest_username=virtual
allow_writeable_chroot=YES
pam_service_name=vsftpd.vu
为虚拟用户设置不同的权限

为虚拟用户设置不同的权限。虽然账户 ftpuser1和 ftpuser1 都是用于 vsftpd 服务程
序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许ftpuser1上传、创建、修
改、查看、删除文件,只允许ftpuser2查看文件。这可以通过 vsftpd 服务程序来实现。只需新建
一个目录,在里面分别创建两个以 ftpuser1和 ftpuser2命名的文件,其中在名为 ftpuser1的文件
中写入允许的相关权限(使用匿名用户的参数):

# mkdir /etc/vsftpd/vusers_dir/
# cd /etc/vsftpd/vusers_dir/
# touch ftpuser1
# vi ftpuser1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

也可以分别设置需求用户登录后看到不同的目录,要设置权限

# cd /etc/vsftpd/vusers_dir/
# vi ftpuser1
local_root=/var/ftproot/ftpuser1

# mkdir -p /var/ftproot/ftpuser1/
# chown -R virtual:virtual /var/ftproot/ftpuser1/

然后再次修改 vsftpd 主配置文件,通过添加 user_config_dir 参数来定义这两个虚拟用户
不同权限的配置文件所存放的路径。

# vi /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
# systemctl restart vsftpd
# systemctl enable vsftpd
测试
[root@linuxprobe ~]# ftp 192.168.10.10
ftpuser1/ftpuser2
ftp> mkdir files
257 "/files" created
ftp> rename files database
350 Ready for RNTO.
250 Rename successful.
ftp> rmdir database
250 Remove directory operation successful.
ftp> exit
221 Goodbye.

附录:vi /etc/vsftpd/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
guest_enable=YES
guest_username=virtual
allow_writeable_chroot=YES
user_config_dir=/etc/vsftpd/vusers_dir

最后

以上就是如意小蚂蚁为你收集整理的Linux系列教程(13)- 使用 ssh 服务管理远程主机的全部内容,希望文章能够帮你解决Linux系列教程(13)- 使用 ssh 服务管理远程主机所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部