Linux网络服务之SSH(远程访问及控制)(下)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
访问控制,不限时长
简介: 1 SSH基础1.1 什么是SSH协议?SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能;SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令;SSH 为建立在应用层和传输层基础上的安全协议。对数据进行压缩,加快传输速度。SSH使用传输层TCP协议的22号端口。SSH客户端<--------------网络---------------->SSH服务端

4 sshd客户端配置


4.1 客户端配置文件

客户端配置文件:/etc/ssh/ssh_config

客户端首次连接服务端时,系统询问是否交换公钥,进行安全确认。这是由客户端配置文件默认的,可以修改配置文件ssh_config取消询问。

网络异常,图片无法展示
|


注:

这种做法只在内网中使用,如果服务器暴露在外网中,不建议这样操作,非常危险。

4.2 sftp命令

SFTP是SSH File Transfer Protocol的缩写,安全文件传送协议。SFTP与FTP有着几乎一样的语法和功能。SFTP为SSH的其中一部分,是一种传输档案至 Blogger 伺服器的安全方式。其实在SSH软件包中,已经包含了一个叫作SFTP的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

sftp命令格式:

sftp  [用户名@]IP地址
 sftp -oPort=220 [用户名@]IP地址     //修改了默认端口的情况下,需要指定端口号
 例:
 sftp 192.168.72.129
 sftp root@192.168.72.129
 #sftp连接后,进入的是当前登录用户的家目录。例如使用root登录,则sftp连接后进入的是/root/目录.
 #文件的上传和下载,不能使用绝对路径。文件必须位于当前目录下。
复制代码


sftp连接后的常用命令:

get        #下载文件
 get -r     #下载目录
 put        #上传文件
 put -r     #上传目录
 quit、exit、bye      #退出
复制代码


sftp和ftp的区别:

  • 连接方式:FTP使用TCP端口21上的控制连接建立连接。而,SFTP是在客户端和服务器之间通过SSH协议(TCP端口22)建立的安全连接来传输文件。
  • 安全性:SFTP使用加密传输认证信息和传输的数据,所以使用SFTP相对于FTP是非常安全。
  • 效率:SFTP这种传输方式使用了加密解密技术,所以传输效率比普通的FTP要低得多。


5 免密码登录


5.1 sshd服务支持登录验证方式

  • 密码验证: 以服务器中本地系统用户的登录名称、密码进行验证。这种方式使用最为简便,但从客户机角度来看,正在连接的服务器有可能被假冒,从服务器角度来看,当遭遇密码暴力破解攻击时防御能力比较弱。
  • 密钥对验证: 要求提供相匹配的密钥信息才能通过验证,通常先在客户机中创建一对密钥文件(公钥和私钥),然后将公钥文件放到服务器中的指定位置。远程登录时,系统将使用公钥、私钥进行加密/解密关联验证,增强了远程管理的安全性。
  • 公钥和私钥是成对生成的,这两个密钥互不相同,可以互相加密和解密;
  • 不能根据一个密码来推算出另一个密钥;
  • 公钥对外公开,私钥只有私钥的持有人才知道。

5.2 设置免密码登录

免密码原理流程:

  1. 首先在客户端生成一对密钥(ssh-keygen)。
  2. 并将客户端的公钥ssh-copy-id 拷贝到服务端。
  3. 当客户端再次发送一个连接请求时,包括ip、用户名。
  4. 服务端得到客户端的请求后,会到 authorized_keys 文件中查找,如果有相应的IP和用户,就会随机生成一个字符串,例如:kfc。
  5. 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端。
  6. 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端。
  7. 服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就进行免密码登录。

相关命令:

ssh-keygen -t ecdsa
 ssh-copy-id -i id_ecdsa.pub zhangsan@192.168.72.129
 ssh-add 
复制代码


操作步骤:

1、客户端使用命令生成密钥文件。

家目录 ~/.ssh/ 下会生成两个密钥文件,一个公钥一个私钥,.pub结尾的是公钥。

[root@localhost ~]# ssh-keygen -t ecdsa     //生成密钥文件
 Generating public/private ecdsa key pair.
 Enter file in which to save the key (/root/.ssh/id_ecdsa): 
 Enter passphrase (empty for no passphrase): 
 Enter same passphrase again: 
 Your identification has been saved in /root/.ssh/id_ecdsa.
 Your public key has been saved in /root/.ssh/id_ecdsa.pub.
 The key fingerprint is:
 SHA256:7chFnJIV8f9fOJhVCk1U+F+3EtGX1NqCWaX5rZZnQEI root@localhost.localdomain
 The key's randomart image is:
 +---[ECDSA 256]---+
 |          +oE.===|
 |         + + +o=o|
 |        o + ++*+o|
 |         +  o*o+*|
 |        S o   *.B|
 |       . +   = B.|
 |        o . o B =|
 |             . +o|
 |                .|
 +----[SHA256]-----+
 [root@localhost ~]# cd ~/.ssh          //切换到sshd服务的家目录下
 [root@localhost .ssh]# ls 
 id_ecdsa  id_ecdsa.pub  known_hosts    //同时生成公钥和私钥文件
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


2、将客户端的公钥文件拷贝到服务端。注意路径不要写错。

[root@localhost .ssh]# ssh-copy-id -i /root/.ssh/id_ecdsa.pub root@192.168.72.129
 /usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_ecdsa.pub"
 /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
 root@192.168.72.129's password: 
 Number of key(s) added: 1
 Now try logging into the machine, with:   "ssh 'root@192.168.72.129'"
 and check to make sure that only the key(s) you wanted were added.
 [root@localhost .ssh]#
复制代码


网络异常,图片无法展示
|


3、测试远程连接服务端时,是否免密码。

[root@localhost .ssh]# ssh 192.168.72.129
 Last failed login: Wed Mar 23 01:32:09 CST 2022 from 192.168.72.10 on ssh:notty
 There were 13 failed login attempts since the last successful login.
 Last login: Tue Mar 22 23:57:20 2022 from 192.168.72.10
 [root@192 ~]# 
复制代码


网络异常,图片无法展示
|


6 TCP Wrappers 访问控制


TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接的特定服务进行安全检测并实现访问控制,凡是包含有libwrap.so库文件的的程序就可以受TCP_Wrappers的安全控制。它的主要功能就是控制谁可以访问,常见的程序有 rpcbind、vsftpd、sshd、telnet。

有些进程不受tcp_wrappers管理,例如 httpd、smb、squid等。

6.1 工作原理

TCP_Wrappers有一个TCP的守护进程叫作tcpd。以ssh为例,每当有ssh的连接请求时,tcpd即会截获请求,先读取系统管理员所设置的访问控制文件,符合要求,则会把这次连接原封不动的转给真正的ssh进程,由ssh完成后续工作;如果这次连接发起的ip不符合访问控制文件中的设置,则会中断连接请求,拒绝提供ssh服务。

网络异常,图片无法展示
|


保护机制实现方式:

  • 方式1:通过tcpd程序对其他服务程序进行包装
  • 方式2:由其他服务程序调用libwrap.so.*链接库

6.2 访问控制策略的配置文件

白名单:/etc/hosts.allow

黑名单:/etc/hosts.deny

示例:

1)设置白名单

[root@192 ~]# vim /etc/hosts.allow
 ---------------
 sshd:192.168.72.10,192.168.72.20    //允许这两个地址使用sshd服务进行访问
 sshd:192.168.4.0/255.255.255.0      //允许该网段的所有地址使用sshd服务进行访问
复制代码


2)设置黑名单

[root@192 ~]# vim /etc/hosts.deny
 ---------------
 sshd:ALL            //禁止所有地址使用sshd服务进行访问
 sshd:192.168.0.0/255.255.255.0  EXCEPT 192.168.0.10   //禁止该网段的所有地址使用sshd服务进行访问,除了192.168.0.10 
复制代码


小贴士:

  1. 白名单的优先级高于黑名单,如果一个地址既在白名单也在黑名单中,该地址是可以访问的。
  2. 实际工作中一般通过防火墙的方式来实现同样功能。
相关文章
|
2月前
|
Linux
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
在Linux中,怎么把脚本添加到系统服务里,即用 service 来调用?
|
1月前
|
NoSQL Linux Redis
Linux Redis 服务设置开机自启动
【9月更文挑战第2天】在 Linux 系统中,可使用两种方法设置 Redis 开机自启动:一是通过创建 `redis.service` 文件并利用 systemd 进行管理,包括定义服务参数和启动脚本;二是编辑 `/etc/rc.local` 文件,在其中添加启动命令。推荐使用 systemd 方法,因为它更符合现代 Linux 系统的设计理念。设置完成后,可通过 `sudo systemctl status redis.service` 检查服务状态。
|
10天前
|
编解码 Linux 开发工具
Linux平台x86_64|aarch64架构RTMP推送|轻量级RTSP服务模块集成说明
支持x64_64架构、aarch64架构(需要glibc-2.21及以上版本的Linux系统, 需要libX11.so.6, 需要GLib–2.0, 需安装 libstdc++.so.6.0.21、GLIBCXX_3.4.21、 CXXABI_1.3.9)。
|
2月前
|
网络安全 Windows
在Windows电脑上启动并配置SSH服务
在Windows电脑上启动并配置SSH服务
58 0
|
2月前
|
网络安全 Windows
windows安装ssh服务
windows安装ssh服务
24 0
|
2月前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
2月前
|
安全 Linux 数据安全/隐私保护
在Linux中,使用rsync服务模式时,如果指定了⼀个密码文件,那么这个密码文件的权限应该设置成多少才可以?
在Linux中,使用rsync服务模式时,如果指定了⼀个密码文件,那么这个密码文件的权限应该设置成多少才可以?
|
安全 网络安全 数据安全/隐私保护
|
安全 网络协议 网络安全
SSH服务详解
第1章 SSH服务 1.1 SSH服务协议说明 SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。
2106 0
|
4月前
|
安全 Linux Shell
Linux中SSH命令介绍
Linux中SSH命令介绍
下一篇
无影云桌面