[toc]
7-Linux-管理-1
一、初始化进程
1、初始化进程介绍
Linux
的启动一直采用init
进程。
init
进程是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。
init程序位于/sbin/init
,它的主配置文件是/etc/initab
。
因为init
进程是串行启动,只有前一个进程启动完,才会启动下一个进程。并且启动脚本复杂。红帽RHEL 7系统已经替换掉了熟悉的初始化进程服务init
,正式采用全新的systemd
初始化进程服务。centos7是Redhad
的分支,所以使用的也是systemd
。
Systemd
它的设计目标是,为系统的启动和管理提供一套完整的解决方案。
d
是守护进程(daemon
)的缩写。Systemd
这个名字的含义,就是它要守护整个系统。
使用了Systemd
,就不需要再用init
了。Systemd
取代了initd
,成为系统的第一个进程,所以它的pid
也始终为1
,其他进程都是它的子进程。
查看systemd
进程
[root@localhost ~]# ps -ef | grep systemd
root 1 0 0 13:53 ? 00:00:05 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 554 1 0 13:53 ? 00:00:01 /usr/lib/systemd/systemd-journald
………………省略部分输出………………
2、运行级别
systemd
用目标(target
)代替了init
中运行级别的概念。
查看/etc/inittab
文件
上面的含义是:
当使用systemd时不再使用inittab。在这里进行的配置对系统没有影响。
systemd
使用“目标”而不是运行级别。默认情况下,有两个主要目标:
- multi-user.target:多用户目标,类似于运行级别
3
- graphical.target:图形化目标,类似于运行级别
5
需要查看当前默认目标器,使用命令:systemctl get-default
需要设置默认目标器,使用命令:systemctl set-default TARGET.target
systemd与init的区别以及作用 | ||
---|---|---|
init运行级别 | systemd目标名称 | systemd 目标作用 |
0 | poweroff.target | 关机 |
1 | rescue.target | 单用户模式 |
2 | multi-user.target | 多用户的文本界面 |
3 | multi-user.target | 多用户的文本界面 |
4 | multi-user.target | 多用户的文本界面 |
5 | graphical.target | 多用户的图形界面 |
6 | reboot.target | 重启 |
3、systemctl
命令
systemctl
管理服务的启动、重启、停止、重载、查看状态等常用的命令。
格式:systemctl 参数 服务名
示例:使用systemctl操作防火墙
① 启动
[root@localhost ~]# systemctl start firewalld
② 重启
[root@localhost ~]# systemctl restart firewalld
③ 停止
[root@localhost ~]# systemctl stop firewalld
④ 重新加载配置文件
[root@localhost ~]# systemctl reload firewalld
⑤ 查看服务状态
[root@localhost ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 五 2021-02-19 17:13:43 CST; 2min 3s ago
Docs: man:firewalld(1)
Main PID: 8646 (firewalld)
Tasks: 2
CGroup: /system.slice/firewalld.service
└─8646 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
………………省略部分输出………………
4、切换运行级别
① 切换到命令行界面
使用systemctl isolate
命令切换:
输入:systemctl isolate multi-user.target
使用init
命令切换:
输入:init 3
使用快捷键切换:
按下:ctrl+alt+F2
② 切换到图形界面
使用systemctl isolate
命令切换:
输入:systemctl isolate graphical.target
使用init
命令切换:
输入:init 5
③ 设置默认运行级别
注意:centos7以前在/etc/inittab
文件中设置id:2:initdefault:
。现在已经改变了设置方式。
命令设置
输入:systemctl set-default multi-user.target
[root@localhost ~]# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from
/etc/systemd/system/default.target to
/usr/lib/systemd/system/multi-user.target.
设置完成使用systemctl set-default
查看
[root@localhost ~]# systemctl get-default
multi-user.target
软链接设置
如果想要将系统默认的运行目标修改为多用户,无图形
模式,可直接用ln
命令把多用户模式目标文件
连接到/etc/systemd/system/default.target
。
[root@localhost ~]# ln -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
[root@localhost ~]# systemctl get-default
graphical.target
二、用户与用户组管理
Linux
是一个多用户、多任务的操作系统,具有很好的稳定性与安全性。
任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
用户的账号一方面可以帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也可以帮助用户组织文件,并为用户提供安全性保护。
每个用户账号都拥有一个惟一的用户名和各自的密码。
用户在登录时键入正确的用户名和密码后,就能够进入系统和自己的主目录。
要想实现用户账号的管理,要完成的工作主要有如下几个方面:
- 用户账号的添加、删除、修改以及用密码的管理。
- 用户组的管理。
注意:在centos7中,用户身份有下面这些
管理员
UID
为0
:系统的管理员用户。系统用户
UID
为1~999
:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权 至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户
UID
从1000
开始:是由管理员创建的用于日常工作的用户。
用户管理操作三个相关文件:
/etc/passwod
:存储用户的关键信息/etc/group
:存储用户组的关键信息/etc/shadow
:存储用户的密码信息
1、用户管理
① 添加用户:useradd
语法格式:useradd [选项] 用户名
常用选项:
- -d:指定用户的家目录(默认为/home/username)
- -e:账户的到期时间,格式为
yyyy/mm/dd
- -u:指定该用户的默认UID
- -g:指定一个初始的用户基本(主)组(必须已存在)
- -G:指定一个或多个扩展(附加)用户组
- -c:用户的备注,登录的简短描述,在图形的登录界面会显示
示例1:创建用户,不带任何选项
[root@localhost ~]# useradd test1
验证是否添加:
- 查看
/etc/passwd
文件最后一行 - 查看家目录是否存在增加用户的文件夹
- 使用
id
命令验证
查看/etc/passwd
文件最后一行。
[root@localhost ~]# tail -n 1 /etc/passwd
test1:x:1001:1001::/home/test1:/bin/bash
说明:
用户名:密码:用户UID:用户组ID:注释:家目录:shell解析器
- 用户名:创建的新用户名称,登录时输入
- 密码: 密码一般情况下都是
x
,表示密码的占位,真实密码保存在/etc/shadow
文件中 - 用户UID:用户的识别符
- 用户组ID:标识所属的基本(主)用户组ID
- 注释:通常是关于登录的简短描述。使用
-c
参数添加,默认是用户的全名称。 - 家目录:用户登录进入系统之后的默认的位置
- shell解析器:待用户进入系统后,用户输入指令后,该解析器会收集用户输入的指令,传递给内核处理,如果没有指定使用默认的解析器
/bin/bash
示例2:创建用户,使用-u
指定用户的uid
[root@localhost ~]# useradd -u 111 test2
[root@localhost ~]# id test2
uid=111(test2) gid=1002(test2) 组=1002(test2)
新用户会按照指定的uid进行创建,同时会自行创建与用户名相同的组以及同名的家目录。
示例3:创建用户,指定基本组,指定多个附加组的的新用户
[root@localhost ~]# useradd test3 -g 1000 -G 1001,1002
[root@localhost ~]# id test3
uid=1002(test3) gid=1000(tiger) 组=1000(tiger),1001(test1),1002(test2)
注意:
指定的用户组必需存在
不会在创建与用户名一样的用户组
/etc/passwd/
文件中只会显示主组ID[root@localhost ~]# tail -n 3 /etc/passwd test1:x:1001:1001::/home/test1:/bin/bash test2:x:111:1002::/home/test2:/bin/bash test3:x:1002:1000::/home/test3:/bin/bash [root@localhost ~]#
附加组,在
/etc/group
文件中查看[root@localhost ~]# tail -n 3 /etc/group tiger:x:1000:tiger test1:x:1001:test3 test2:x:1002:test3
示例3:创建用户并指定过期日期,同时指定过期后用户过期几日后永久停权。
[root@localhost ~]# useradd test4 -e "2021/02/28"
查看账户到期过期日期可使用chage
命令查看,chage
代表更改时效change age
,它更改用户密码到期信息。
[root@localhost ~]# chage -l test4
最近一次密码修改时间 :2月 20, 2021
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :2月 28, 2021
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
到期后登录
[tiger@localhost root]$ su test5
密码:
您的帐户已失效;请与系统管理员取得联系
su: 用户帐户已失效
② 修改用户:usermod
语法格式:usermod [选项] 用户名
常用选项:
- -c:填写用户账户的备注信息,会在登录时显示
- -d -m:参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
- -e:账户的到期时间,格式为YYYY-MM-DD
- -g:变更所属用户主组
- -G:变更扩展用户组
- -L:锁定用户禁止其登录系统
- -U:解锁用户,允许其登录系统
- -u:修改用户的UID
示例1:更新用户test1
的备注信息,为你好 test1
[root@localhost ~]# usermod -c "你好 test1" test1
示例2:重新指定用户的家目录为test_1
并自动把旧的数据转移过去
[root@localhost ~]# usermod -m -d /home/test_1 test1
[root@localhost ~]# ls /home
test_1 test2 test3 test4 test5 tiger
示例3:更新用户到期日期为 2021年03月11日
[root@localhost ~]# usermod -e 2021/03/11 test1
[root@localhost ~]# chage -l test1
最近一次密码修改时间 :2月 20, 2021
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :3月 11, 2021
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
示例4:变更用户id、所属主组与扩展附加组
原来用户信息
[root@localhost ~]# id test1
uid=1001(test1) gid=1001(test1) 组=1001(test1)
将用户id改为1002,主组改为1000,附加组为1001,1002
[root@localhost ~]# usermod -u 1002 -g 1000 -G 1001,1002 test1
[root@localhost ~]# id test1
uid=1002(test1) gid=1000(tiger) 组=1000(tiger),1001(test1),1002(test2)
示例5:锁定用户禁止其登录系统
[root@localhost ~]# usermod -L test1
锁定之后再登录出现下面情况:
示例6:解锁用户,允许其登录系统
[root@localhost ~]# usermod -U test1
③ 设置密码:passwd
语法格式:passwd [选项] 用户名
常用选项:
- –stdin:允许通过标准输入修改用户密码,如
echo "NewPassWord" | passwd --stdin Username
- -d:使该用户可用空密码登录系统
- -e:强制用户在下次登录时修改密码
- -S:显示用户的密码是否被锁定,以及密码所采用的加密算法名称
示例1:将用户test1
密码修改为123456
[root@localhost ~]# passwd test1
更改用户 test1 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
示例2:使用标准输入修改用户密码
[root@localhost ~]# echo "tiger"|passwd --stdin test1
更改用户 test1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
示例3:强制用户在下次登录时修改密码
[root@localhost ~]# passwd -e test1
正在终止用户 test1 的密码。
passwd: 操作成功
用户登录时会出现下面提示:
[tiger@localhost root]$ su test1
密码:
您需要立即更改密码(root 强制)
为 test1 更改 STRESS 密码。
(当前)UNIX 密码:
示例4:显示test1
用户密码锁定信息及加密算法
[root@localhost ~]# passwd -S test1
test1 PS 1970-01-01 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
③ 删除用户:userdel
语法格式:passwd [选项] 用户名
常用选项:
- -r:强制删除用户
- -f:同时删除用户及用户家目录
示例:删除用户test1
,以及家目录
[root@localhost ~]# userdel -rf test1
userdel:组“test1”没有移除,因为它不是用户 test1 的主组
注意:删除用户时,如果主组只有一个用户,会同时将用户的主组删除 。因为
test1
在上面示列中将主组改为了1000。所以在删除用户时未将test1组删除。
2、用户组管理
每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。不同Linux系统对用户组的规定有所不同,如Linux
下的用户属于与它同名的用户组,这个用户组在创建用户时同时创建。
用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就是对/etc/group
文件的更新。
查看/etc/group
文件
[root@localhost ~]# tail -n 3 /etc/group
tiger:x:1000:tiger
test1:x:1001:
test2:x:1002:
文件结构说明:
用户组名:密码:用户ID:组内用户名
- 密码:
x
表示占位符,用户组可设置密码,但是绝大部分情况下是不设置密码的。 - 组内用户名: 表示附加组是当前组的的所有用户名
① 添加用户组:groupadd
语法格式:groupadd [选项] 用户组名
常用选项:
- -g:指定组id
示例1:创建用户组,指定id
[root@localhost ~]# groupadd -g 1004 newg
查看/etc/group
文件最后一行。
[root@localhost ~]# tail -n 1 /etc/group
newg:x:1004:
注意:
- 创建用户组时,不指定id,给定默认的id(范围从:1000以后,最后一个id加1)。
- 指定组id时,不允许出现重复的组id。
② 修改用户组:groupmod
语法格式:groupmod [选项] 用户组名
常用选项:
- -g:修改用户组id
- -n:修改用户组名
综合示例:更新用户newg
的组名称为运维ops
,并更改组id
为1006
[root@localhost ~]# groupmod -g 1006 -n ops newg
[root@localhost ~]# tail -n 1 /etc/group
ops:x:1006:
注意:
- 指定组id时,不允许出现重复的组id。
③ 删除用户组:groupdel
语法格式:groupdel 用户组名
示例:删除上面示例中新建的组
[root@localhost ~]# groupdel ops
[root@localhost ~]# groupdel test1
[root@localhost ~]# groupdel tiger
groupdel:不能移除用户“tiger”的主组
上面示例中,删除其它组是都正常删除,在删除tiger组时删除未成功,提示不能删除用户tiger
的主组。
注意:
- 要删除用户组时,这个组如果是某个用户的主组,则不允许删除,确定需要删除时,可将用户移出该组(即改变用户主组为非当前组),然后再删除组。
三、网络设置
1、网卡配置
网卡的配置文件位置在/etc/sysconfig/network-scripts/
目录下。
[root@localhost ~]# ls /etc/sysconfig/network-scripts/
ifcfg-ens33 ifdown-ib ifdown-ppp ifdown-tunnel ifup-ib ifup-plusb ifup-Team network-functions
ifcfg-lo ifdown-ippp ifdown-routes ifup ifup-ippp ifup-post ifup-TeamPort network-functions-ipv6
ifdown ifdown-ipv6 ifdown-sit ifup-aliases ifup-ipv6 ifup-ppp ifup-tunnel
ifdown-bnep ifdown-isdn ifdown-Team ifup-bnep ifup-isdn ifup-routes ifup-wireless
ifdown-eth ifdown-post ifdown-TeamPort ifup-eth ifup-plip ifup-sit init.ipv6-global
网卡配置文件命名格式:ifcfg-网卡名称
查看网卡配置:
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet" //网络类型:Ethernet以太网类型
PROXY_METHOD="none" //代理方式:关闭状态
BROWSER_ONLY="no" //仅使用浏览器:否
BOOTPROTO="dhcp" //引导协议: dhcp(动态协议)、static(静态协议)、none(不指定)
DEFROUTE="yes" // 默认路由:启用
IPV4_FAILURE_FATAL="no" //不启用工PV4错误检查功能
IPV6INIT="yes" //启用工PV6协议
IPV6_AUTOCONF="yes" //自动配置工PV6地址
IPV6_DEFROUTE="yes" //启用IPV6默认路由
IPV6_FAILURE_FATAL="no" //不启用工PV6错误检查功能
IPV6_ADDR_GEN_MODE="stable-privacy" //IPV6地址生成模型
NAME="ens33" //网卡逻辑设备名称
UUID="0720bf0a-e3f3-406d-9ebd-f7c44b53c888" //通用唯一识别码
DEVICE="ens33" //网卡物理设备名称,必须和NAME值一样
ONBOOT="yes" 开机启动网络配置
如果将BOOTPROTO
设置为dhcp
,则每次启动系统会动态分配ip
地址,这将造成每次的ip
地址可能不同,可将参数设为static
或none
,这样就可以指定ip
,保证每次系统启动后ip
地址不变。
2、配置静态IP地址
在/etc/sysconfig/network-scripts/ifcfg-ens33
文件中增加以下配置:
BOOTPROTO="static"
###静态地址配置
IPADDR="192.168.163.136"
NETMASK="255.255.255.0" #子网掩码 此项可不设置
GATEWAY="192.168.163.2" # 网关 此项必需设置,否则无法连接网络
DNS1="223.5.5.5" #dns服务 阿里
DNS2="223.6.6.6" #dns服务 阿里备用
配置后不会立即生效,需重新启动网络服务。
3、重启网卡服务的方法
① 使用service
命令,网络服务的名称为network
[root@localhost ~]# service network restart
Restarting network (via systemctl): [ 确定 ]
② 使用前面刚学的systemctl
命令
[root@localhost ~]# systemctl restart network
③ 使用/etc/init.d/
目录下的network
服务进行启动
查看/etc/init.d/
目录
[root@localhost ~]# ls -l /etc/init.d/
总用量 40
-rw-r--r--. 1 root root 18281 5月 22 2020 functions
-rwxr-xr-x. 1 root root 4569 5月 22 2020 netconsole
-rwxr-xr-x. 1 root root 7928 5月 22 2020 network
-rw-r--r--. 1 root root 1160 10月 2 01:08 README
使用路径启动
[root@localhost ~]# /etc/init.d/network restart
Restarting network (via systemctl): [ 确定 ]
四、SSH
服务
1、SSH
简介
SSH(Secure Shell)
是一种能够以安全的方式提供远程登录的协议,也是目前远程管理Linux系统的首选方式。
在此之前,一般使用FTP
或Telnet
来进行远程登录。但是因为它们以明文的形式在网络中传输账户密码和数据信息,因此很不安全,很容易受到黑客发起的中间人攻击,这轻则篡改传输的数据信息,重则直接抓取服务器的账户密码。
想要使用SSH
协议来远程管理Linux
系统,则需要部署配置sshd
服务程序。
sshd
是基于SSH
协议开发的一款远程管理服务程序,不仅使用起来方便快捷,而且能够提供两种安全验证的方法:
- 基于口令的验证—用账户和密码来验证登录;
- 基于密钥的验证—需要在本地生成密钥对,然后把密钥对中的公钥上传至服务器,并与服务器中的公钥进行比较;该方式相较来说更安全。
2、sshd
服务配置
查看sshd
配置文件
“Linux系统中的一切都是文件”,因此在Linux
系统中修改服务程序的运行参数,实际上就是在修改程序配置文件的过程。
sshd
服务的配置信息保存在/etc/ssh/sshd_config
文件中。
[root@localhost ~]# cat /etc/ssh/sshd_config
………………省略部分输出………………
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
………………省略部分输出………………
sshd
服务的配置很多,常用的参数配置有以下几个:
sshd服务配置文件中包含的常参数以及作用 | |
---|---|
参数 | 作用 |
Port 22 | 默认的sshd服务端口 |
ListenAddress 0.0.0.0 | 设定sshd服务器监听的IP地址 |
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 | 是否允许空密码登录(很不安全) |
注意:sshd服务的默认端口号为22
,可以进行修改,需注意两个事项:
- 端号号范围从0-65535
- 不能使用已被占用的端口号
3、启动停止sshd
服务
查看状态
命令:service sshd status
[root@localhost ~]# service sshd status
Redirecting to /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: active (running) since 六 2021-02-20 08:51:59 CST; 1h 20min ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 1247 (sshd)
Tasks: 1
………………省略部分输出………………
启动
命令:service sshd start
[root@localhost ~]# service sshd start
Redirecting to /bin/systemctl start sshd.service
重新启动
命令:service sshd restart
[root@localhost ~]# service sshd restart
Redirecting to /bin/systemctl restart sshd.service
停止
命令:service sshd stop
[root@localhost ~]# service sshd stop
Redirecting to /bin/systemctl stop sshd.service
[root@localhost ~]# service sshd status
Redirecting to /bin/systemctl status sshd.service
● sshd.service - OpenSSH server daemon
Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
Active: inactive (dead) since 六 2021-02-20 10:15:26 CST; 22s ago
Docs: man:sshd(8)
man:sshd_config(5)
Process: 6206 ExecStart=/usr/sbin/sshd -D $OPTIONS (code=exited, status=0/SUCCESS)
………………省略部分输出………………
4、远程终端
终端工具主要帮助运维人员连接远程的服务器,常见终端工具有Xshell
、secureCRT
、Putty
。
这里使用Xshell
。
4.1、安装Xshell
软件
① 启动安装程序
② 安装完成解决升级新版本提示问题
直接使用nslicense.dll
文件替换xshell中的文件,可绕过更新。
③ 启动程序进入主界面
4.2、使用终端连接服务
4.2.1、图形界面创建会话连接
① 新建会话
② 在弹出窗口点击连接
③ 点击接受保存
④ 输入用户名点击确定
⑤ 输入密码点击确定
⑥ 登录到服务器
4.2.2、使用SSH
命令进行连接
① 登录
命令:ssh 用户名:密码@主机IP地址
[c:\~]$ ssh root:root@192.168.163.137
Connecting to 192.168.163.137:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Sat Feb 20 10:17:38 2021
[root@localhost ~]#
② 退出
命令:exit
[root@localhost ~]# exit
登出
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.168.163.137:22) at 10:21:46.
Type `help' to learn how to use Xshell prompt.
[c:\~]$
4.2.3、安全密钥验证
加密是对信息进行编码和解码的技术,它通过一定的算法(密钥)将原本可以直接阅读的明文信息转换成密文形式。密钥即是密文的钥匙,有私钥和公钥之分。在传输数据时,如果担心被他人监听或截获,就可以在传输前先使用公钥对数据加密处理,然后再行传送。这样,只有掌握私钥的用户才能解密这段数据,除此之外的其他人即便截获了数据,一般也很难将其破译为明文信息。
在生产环境中使用密码进行口令验证终归存在着被暴力破解或嗅探截获的风险。如果正确配置了密钥验证方式,那么sshd服务程序将更加安全。
配置客户端公/私钥
① 在客户端主机中生成密钥对
② 设置密钥类型和长度,点击下一步
③ 生成公钥私钥对
④ 输入秘钥的密码,这个密码是xshell
内部保密使用的,与秘钥本身无关
⑤ 生成密钥,并保存在了xShell
中,点击完成
选择保存为文件,保存公钥,然后单击完成。
⑥ 如果需要导出私钥,可以单击导出,不需要可跳过此步
配置服务端
① 上传生成的公钥到服务器,加入公钥
cat id_rsa_2048.pub >> ./.ssh/authorized_keys
② 对服务器进行设置,使其只允许密钥验证,拒绝传统的口令验证方式。记得在修改配置文件后保存并重启sshd服务程序。
修改/etc/ssh/sshd_config
文件,并重新启动sshd
服务。
使用xshell
进行登录
登录成功
注:
也可在服务器主机生成公钥私钥,然后将私钥导入xshell,将公钥加入到服务器端。
- 生成密钥命令:
ssh-keygen
- 发送公钥到服务端:
ssh-copy-id 服务端ip
- 也可直接将公钥内容追加到
~/.ssh/authorized_keys
文件中
5、SSH
服务文件传输
使用XFtp
可视化工具进行文件传输
5.1、安装xFtp
软件
① 启动安装程序
② 输入产品密钥
xftp:产品密钥:101210-450789-147200
③ 安装完成打开主界面
5.2、使用xftp
终端传输文件
5.2.1、创建会话
使用
XFTP
创建会话
① 点击新建打开会话窗口
② 点击连接
③ 输入用户名
④ 输入密码
如果配置了公钥与私钥,并且关闭了允许密码验证,那么只能通过私钥证书进行登录,如果xhell
已经设置,那么xftp
会自动读取。
⑤ 连接成功界面,会在右边窗口显示用户家目录。
出现中文乱码解决方法:使用UTF-8编码的复选框勾上
注意:如果已经使用xshell已经登录,可在xshell窗口直接打开xftp程序,xftp会以xshell当前登录用户的账号信息,这样就无需进行重复登录。
5.2.2、上传文件
① 在右边窗体选择上传到那个目录,在左边窗体选择上传文件,右键打开菜单,选择传输菜单,单击上传
② 上传成功
5.2.3、下载文件
① 在左边窗体选择下载到那个目录,在右边窗体选择下载文件,右键打开菜单,选择传输菜单,单击开始下载
② 下载成功
5.3、使用命令行
传输文件
传输工具:PSCP.exe
(必须在cmd
命令行打开)
用法:
pscp 选项 用户名@linux主机地址:资源路径 windows本地的地址(下载到win)
pscp 选项 资源路径 用户名@linux主机地址:远程路径(上传到linux)
pscp 选项 -ls 用户名@linux主机地址(列出远程路径下结构)
常用参数:
-r
:递归复制目录文件-P
:端口号-i
:用户认证的私钥文件,如果使用公钥私钥安全加密方式使用此参数
5.3.1、允许普通密码登录模式下上传下载
示例1:将用户家目录文件下载到本地d:\tmp
下
pscp -r -P 22 root@192.168.163.137:/root d:\tmp
示例2:将本地d:\作业.txt
文件上传到家目录下
pscp -P 22 d:\作业.txt root@192.168.163.137:/root
5.3.2、不允许普通密码登录模式下上传下载
注意:使用私钥进行登录时,需先将私钥使用puttygen.exe
工具将私钥保存为.ppk
格式文件,如果直接使用id_rsa
文件则会报以下错误:
转换文件格式
① 下载puttygen.exe
工具
② 打开工具,选择导入私钥文件选项
③ 选择文件导入,保存私钥为.ppk
类型文件
④ 保存后的文件
示例1:将用户家目录文件下载到本地d:\tmp
下
pscp -r -P 22 -i d:\pri.ppk root@192.168.163.137:/root d:\tmp
示例2:将本地d:\作业.txt
文件上传到家目录下
pscp -P 22 -i d:\pri.ppk d:\作业.txt root@192.168.163.137:/root
注:同是linux系统下可使用:scp
命令进行传输,格式同win
。