概述
使用 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 服务管理远程主机所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复