Linux 远程访问及服务控制

SSH概述

SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台。SSH在正确使用时可弥补网络中的漏洞。SSH客户端适用于多种平台。几乎所有UNIX平台—包括HP-UX、Linux、AIX、Solaris、Digital UNIX、Irix,以及其他平台,都可运行SSH。

SSH协议功能

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

服务端主程序:/usr/bin/sshd
服务端配置文件: /etc/ssh/sshd_config

默认监听端口为 22

SSH配置范例

SSH验证有两种,一种是密码验证,另一种是密钥对验证

密码验证方式 查看SSH相关文件

可以在 /etc 下看到ssh相关的文件

[root@fuwuduan etc]# ll |grep ssh*
drwxr-xr-x.  2 root root      225 6月  16 00:56 ssh
[root@fuwuduan etc]# cd ssh/
[root@fuwuduan ssh]# ll
总用量 604
-rw-r--r--. 1 root root     581843 4月  11 2018 moduli
-rw-r--r--. 1 root root       2276 4月  11 2018 ssh_config
-rw-------. 1 root root       3907 4月  11 2018 sshd_config
-rw-r-----. 1 root ssh_keys    227 6月  16 00:56 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 6月  16 00:56 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 6月  16 00:56 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 6月  16 00:56 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 6月  16 00:56 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 6月  16 00:56 ssh_host_rsa_key.pub

在这里插入图片描述
为方便观察,可以先将服务端改个名

root@zhuji sbin]# hostname fuwuduan
[root@zhuji sbin]# su

首先查看一下,服务器端的用户有哪些

[root@fuwuduan ssh]# tail -5 /etc/passwd
tcpdump:x:72:72::/:/sbin/nologin
g:x:1000:1000:g:/home/g:/bin/bash
tom:x:1001:1002::/home/tom:/bin/bash
named:x:25:25:Named:/var/named:/sbin/nologin
kh1:x:1002:1003::/home/kh1:/bin/bash

我们这边就使用 kh1 用户进行实验吧

远程登录服务端

打开一台别的客户机,先尝试使用 root 用户登录到服务器

[root@localhost ~]# ssh [email protected]
The authenticity of host '20.0.0.132 (20.0.0.132)' can't be established.
ECDSA key fingerprint is SHA256:k7SljIMiRH+sv0oL3PytOMZOq94U5sbzRkcCXLBxr2M.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '20.0.0.132' (ECDSA) to the list of known hosts.
[email protected]'s password: 
Last login: Wed Jul  8 19:51:36 2020

禁止远程登录root用户

发现竟然是可以登录的,但是从别的地方随意登录 root 用户这种权限很大的用户,就很危险,所以需要更改一下,让root用户不可以从别的客户端登录,进入配置文件,对下面的配置进行修改

[root@fuwuduan ssh]# vim /etc/ssh/sshd_config    编辑服务端配置文件
#LoginGraceTime 2m                               会话时间2分钟,若保持长连接会占用资源
#PermitRootLogin yes                             PermitRootLogin yes  允许root用户登录
#StrictModes yes                                                     
#MaxAuthTries 6                                  最大尝试次数 6次
#MaxSessions 10                                  最大允许十个终端连接

那么只要把root用户登录的配置进行修改就OK了,修改完成记得重启!

PermitRootLogin no
[root@fuwuduan ssh]# systemctl restart sshd

再次登录,会发现root用户即使输入正确的密码,也不能登录了,但是使用别的用户还是可以登录的

[root@localhost ~]# ssh [email protected]
root@20.0.0.132's password: 
Permission denied, please try again.
[root@localhost ~]# ssh [email protected]
[email protected]'s password:

绕过权限远程登录root

但是这样登录有一个小小的方法可以使用root登录,那就是登录别的用户,再切换到root用户

[root@localhost ~]# ssh [email protected]
kh1@20.0.0.132's password: 
Last login: Wed Jul  8 20:15:52 2020 from 20.0.0.135
[kh1@localhost ~]$ su
密码:
ABRT 已检测到 '1' 个问题。预了解详细信息请执行:abrt-cli list --since 1594209794
[root@localhost kh1]# 

解决root远程登录绕过

那么这个问题怎么解决呢?就需要修改之前说过的 pam.d 文件了,禁止一般用户切换root
去掉如下文件的第六行注释即可

[root@localhost ~]# vi /etc/pam.d/su
      1 #%PAM-1.0
      2 auth            sufficient      pam_rootok.so
      3 # Uncomment the following line to implicitly trust users in the "wheel" group.
      4 #auth           sufficient      pam_wheel.so trust use_uid
      5 # Uncomment the following line to require a user to be in the "wheel" group.
      6 #auth           required        pam_wheel.so use_uid
      7 auth            substack        system-auth
      8 auth            include         postlogin
      9 account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
     10 account         include         system-auth
     11 password        include         system-auth
     12 session         include         system-auth
     13 session         include         postlogin
     14 session         optional        pam_xauth.so

再次尝试,就无法切换了

[kh1@localhost ~]$ su
密码:
su: 拒绝权限

修改登录密码尝试数量

还是修改配置文件里的选项

MaxAuthTries 6
[kh1@localhost ~]$ ssh kh1@20.0.0.132
kh1@20.0.0.132's password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
kh1@20.0.0.132's password: 
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

修改之后再次尝试远程登录,看看是不是六次
发现三次就不允许登录了,是因为系统默认的网络连接次数是三次,所以三次就不允许尝试了,这种也是可以改的
在客户机连接之前敲这行命令

[root@localhost ~]# ssh -o NumberOfPasswordPrompts=8 [email protected]
kh1@20.0.0.132's password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
kh1@20.0.0.132's password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
kh1@20.0.0.132's password: 
Permission denied, please try again.
[email protected]'s password: 
Received disconnect from 20.0.0.132 port 22:2: Too many authentication failures
Disconnected from 20.0.0.132 port 22
[root@localhost ~]# 

发现就是六次了

白名单与黑名单

白名单 AllowUsers:仅允许某些用户,拒绝白名单之外的所有人,安全场合高
黑名单 DenyUsers:仅拒绝某些用户,允许出黑名单外的所有人,安全场合低
这两条需要手敲!

白名单演示

[root@localhost ~]# useradd kh2
[root@localhost ~]# passwd kh2
[root@localhost ~]# vim /etc/ssh/sshd_config 
AllowUsers kh1 kh2@20.0.0.132  白名单 kh1 后面不加 ip 表示无限制  kh2只能用20.0.0.132登录
[root@localhost ~]# systemctl restart sshd


来吧!展示!

[root@localhost ~]# ssh [email protected]
kh1@20.0.0.132's password: 
Last failed login: Wed Jul  8 22:28:12 CST 2020 from 20.0.0.135 on ssh:notty
There were 5 failed login attempts since the last successful login.
Last login: Wed Jul  8 22:28:01 2020 from 20.0.0.135
[kh1@localhost ~]$ exit
登出
Connection to 20.0.0.132 closed.
[root@localhost ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

黑名单演示

[root@localhost ~]# useradd kh3
[root@localhost ~]# passwd kh3
[root@localhost ~]# vim /etc/ssh/sshd_config
AllowUsers kh1 kh2@20.0.0.132   我没有删除白名单里的kh1
DenyUsers kh1 kh3 
[root@localhost ~]# systemctl restart sshd

来吧!演示!

[root@localhost ~]# ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.

发现白名单和黑名单同时有一个用户时,是以黑名单为优先级的

密钥对验证

密钥对整体实现过程
一、由客户端的用户在本地创建密钥对
二、上传公钥文件
三、将密钥对导入到服务器某个已知用户的公钥数据库
四、以服务端那个已知用户的身份进行密钥对验证登录

基本操作

在主配置文件中保证三个选项和我一致
在这里插入图片描述在客户机中创建一个新用户,并赋予密码

[root@localhost ~]# useradd bgs
[root@localhost ~]# passwd bgs
更改用户 bgs 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# su bgs

创建加密方式

[bgs@localhost root]$ ssh-keygen -t ecdsa
Generating public/private ecdsa key pair.
Enter file in which to save the key (/home/bgs/.ssh/id_ecdsa):     #默认位置
Created directory '/home/bgs/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/bgs/.ssh/id_ecdsa.
Your public key has been saved in /home/bgs/.ssh/id_ecdsa.pub.
The key fingerprint is:
SHA256:XKkWpb9UgmA461aI9Ix4Aj0EUM4KP/I5iY/Ebgp31V8 [email protected]
The key's randomart image is:
+---[ECDSA 256]---+
|+=o  .o   .      |
|.o+ o. . + .     |
|ooo* +  + + .    |
|+o+ = .o = o     |
|ooo. .. S o E    |
|.+ +o. . o o     |
|oo*..     o      |
|+= o             |
|=..              |
+----[SHA256]-----+
[bgs@localhost root]$ 

这时候在根目录下就能看到这个隐藏文件了
在这里插入图片描述

将公钥发送给服务端

隐藏文件夹里可以看到公钥和私钥文件

[bgs@localhost ~]$ cd .ssh/
[bgs@localhost .ssh]$ ls
id_ecdsa  id_ecdsa.pub

将公钥文件发送给服务器

[bgs@localhost .ssh]$ ssh-copy-id -i id_ecdsa.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "id_ecdsa.pub"
The authenticity of host '20.0.0.132 (20.0.0.132)' can't be established.
ECDSA key fingerprint is SHA256:k7SljIMiRH+sv0oL3PytOMZOq94U5sbzRkcCXLBxr2M.
ECDSA key fingerprint is MD5:89:ef:3e:43:e2:1a:0c:44:2a:c4:7f:91:43:99:f1:18.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

这时候就可以在服务器上查看到了


[root@localhost ~]# cd /home/kh1
[root@localhost kh1]# ls -a
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  .cache  .config  .mozilla  .ssh
[root@localhost kh1]# cd .ssh/
[root@localhost .ssh]# ls -a
.  ..  authorized_keys
[root@localhost .ssh]# cat authorized_keys 

在这里插入图片描述

进行密钥对登录验证

[bgs@localhost .ssh]$ ssh [email protected]
Enter passphrase for key '/home/bgs2/.ssh/id_ecdsa': 
Enter passphrase for key '/home/bgs2/.ssh/id_ecdsa': 
Last failed login: Sat Jul 11 17:59:56 CST 2020 from 20.0.0.135 on ssh:notty
There were 3 failed login attempts since the last successful login.

免密登录

[bgs2@localhost .ssh]$ ssh-agent bash
[bgs2@localhost .ssh]$ ssh-add
Enter passphrase for /home/bgs2/.ssh/id_ecdsa: 
Identity added: /home/bgs2/.ssh/id_ecdsa (/home/bgs2/.ssh/id_ecdsa)
[bgs2@localhost .ssh]$ ssh [email protected]
Last login: Sat Jul 11 18:01:11 2020 from 20.0.0.135

远程文件控制

远程复制文件到本机

在主机中创建一个文件夹,在文件夹里创建一个文件

[kh1@zhuji shiyan]$ cd ~
[kh1@zhuji ~]$ pwd
/home/kh1
[kh1@zhuji ~]$ ll
总用量 0
[kh1@zhuji ~]$ touch fuzhi2

从客户机中复制这个文件到 /mnt

[root@localhost mnt]# scp [email protected]:/home/kh1/fuzhi2 /mnt
[email protected]'s password: 
fuzhi2                                                                              100%    0     0.0KB/s   00:00    
[root@localhost mnt]# ll
总用量 0
-rw-r--r--. 1 root root 0 7月  11 19:29 fuzhi2

复制本机文件给对方

[root@localhost mnt]# touch wenjian
[root@localhost mnt]# scp wenjian [email protected]:/home/kh1
[email protected]'s password: 
wenjian

在对方机器查看

[kh1@zhuji ~]$ ll
总用量 0
-rw-rw-rw-. 1 kh1 kh1 0 7月  11 19:20 fuzhi2
-rw-r--r--. 1 kh1 kh1 0 7月  11 19:34 wenjian
[kh1@zhuji ~]$ 

FSTP命令

[root@localhost /]# sftp [email protected]
[email protected]'s password: 
Connected to 20.0.0.132.
sftp> ll
Invalid command.
sftp> ls
fuzhi2   wenjian  

猜你喜欢

转载自blog.csdn.net/Ora_G/article/details/107214213