草庐IT

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

站在这别动,我去给你买橘子 2023-12-18 原文

内容预知

 1.SSH的介绍及其相关知识点

1.1 SSH的简介 

 1.2 SSH的优点

 

1.3 常用的SSH软件的介绍 

1.4  SSH 的组成

1.5 SSH的密钥登录

 2. SSH的运用

2.1 ssh配置文件信息

2.1.1存放ssh服务端的配置文件

2.1.2 存放ssh客户端的配置文件

2.2  ssh在Linux中的密码登录

2.3  利用ssh协议传输文件和获取文件

2.3.1  scp传输文件

2.3.2 scp获取服务端的文件 

 2.3.3 sftp远程访问操作

 3. ssh密钥登录操作

实验目的

实验准备 

实验设计图

实验验证 

实验步骤 

第一步:在客户端中创建密钥 

 第二步:把公钥文件导入到ssh服务端

方式1:手动导公钥进服务器 

 方式2:自动导公钥入服务器

第三步:进行测试 

测试一:客户端zhangsan访问服务端root 

 测试二:客户端root访问服务端root

 测试三:客户端zhangsan  访问服务端wangwu

 4.TCP_wapper的原理和运用

4.1 TCP_wapper的工作原理

 4.2  TCP_Wrappers的运用

 假设引用

测试 

 总结


 1.SSH的介绍及其相关知识点

1.1 SSH的简介 

SSH 为 Secure shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定;SSH 为建立在应用层基础上的安全协议。SSH 是较可靠,专为远程登陆会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。 

 SSH 启用的端口为:TCP22号端口

 

 1.2 SSH的优点

SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。S S H最初是U N I X系统上的一个程序,后来又迅速扩展到其他操作平台。S S H在正确使用时可弥补网络中的漏洞。客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。 

  • 数据传输的过程是加密的,具有安全稳定的特点
  • 数据传输的方式是压缩的,可以提高传输速度

1.3 常用的SSH软件的介绍 

 SSH客户端:putty(开源工具),xshell,CRT

SSH服务端:openSSH(centos7系统默认安装)

centos7  ssh服务启动自检命令:  systemctl is-enabled    sshd

1.4  SSH 的组成

传输层协议 [SSH-TRANS]

提供了服务器认证,保密性及完整性。此外它有时还提供压缩功能。 SSH-TRANS 通常运行在TCP/IP连接上,也可能用于其它可靠数据流上。 SSH-TRANS 提供了强力的加密技术、密码主机认证及完整性保护。该协议中的认证基于主机,并且该协议不执行用户认证。更高层的用户认证协议可以设计为在此协议之上。

用户认证协议 [SSH-USERAUTH]

用于向服务器提供客户端用户鉴别功能。它运行在传输层协议 SSH-TRANS 上面。当SSH-USERAUTH 开始后,它从低层协议那里接收会话标识符(从第一次密钥交换中的交换哈希H )。会话标识符唯一标识此会话并且适用于标记以证明私钥的所有权。 SSH-USERAUTH 也需要知道低层协议是否提供保密性保护。

连接协议 [SSH-CONNECT]

将多个加密隧道分成逻辑通道。它运行在用户认证协议上。它提供了交互式登录话路、远程命令执行、转发 TCP/IP 连接和转发 X11 连接。

1.5 SSH的密钥登录

密钥是一种参数,它是在明文转换为密文或将密文转换为明文的算法中输入的参数。密钥分为对称密钥与非对称密钥。而ssh密钥就是一种非对称性的密钥。 

 ssh 远程访问控制中不仅仅可以使用用户密码登录,还可以通过 密钥进行登录。而密钥登录的产生是通过客户端与服务端进行一系列的操作过程产生的。

 密钥登录的过程:

1. ssh客户端通过ssh-keygen生成自己的公钥和私钥,将公钥发送给ssh服务端,并且放在指定的位置。

 2.公钥发送完毕后。ssh客户端再向ssh 服务端进行登录请求。

3.ssh服务端收到ssh客户端的登录请求后,ssh服务端用对应的公钥加密一些随机数返回给ssh客户端。

4.ssh客户端收加密的随机数后使用私钥对其进行解密,再将解密的结果发送给ssh服务端进行验证。

5. ssh服务端接收到ssh客户端发送过来的解密数据,将其与原数据进行比对,保持一致则允许用户进行登录

 2. SSH的运用

2.1 ssh配置文件信息

在Linux中实现ssh,是通过openSSH的sshd服务提供的。

2.1.1存放ssh服务端的配置文件

/etc/ssh/sshd_config

vim /etc/ssh/sshd_config

常用选项配置

#Port 22
#ListenAddress 0.0.0.0

 常用配置项:

#LoginGraceTime 2m         登录验证时间为两分钟
#PermitRootLogin yes       允许root用户登录(安全考虑,这里可以设置为no,禁止root用户登录)

#MaxAuthTries 6             最大重试的次数为6
PasswordAuthentication yes   允许空密码用户登录
UseDNS  no                   禁止DNS反向解析,提高服务器的响应速度

2.1.2 存放ssh客户端的配置文件

 /etc/ssh/ssh_config   (该配置基本默认保持不变,就可以了)

2.2  ssh在Linux中的密码登录

 ssh [远程主机用户名]@[远程服务器主机名或IP地址] [-p port]

[root@localhost7 ~]# ssh 192.168.73.110

exit  退出当前用户

[root@localhost7 ~]# ssh -p 22  zhangsan@192.168.73.110

 

2.3  利用ssh协议传输文件和获取文件

 ssh scp sftp 都是默认使用ssh协议,端口为 tcp 22

2.3.1  scp传输文件

 scp [-r 目录] 文件 [用户]@服务端IP:保存路径(如果端口号修改过,就用-P进行指定)

[root@localhost6 opt]# scp shiyan.zip root@192.168.73.111:/opt

2.3.2 scp获取服务端的文件 

 scp [-P] [用户]@服务端IP:保存路径 本地路径

[root@localhost6 opt]# scp root@192.168.73.111:/opt/shiyan.zip   /opt

 2.3.3 sftp远程访问操作

sftp [-P] 用户@服务端IP   (当默认端口改变时,可以用-P指定)

[root@localhost6 opt]# sftp root@192.168.73.111

 3. ssh密钥登录操作

实验目的

 上面的内容均为在密码登录的前提,但是存在着极大的安全隐患。密码登录是可以别破译密码软件进行暴力破解,从而远程访问,此时会造成相关的损失。而密钥登录,会对安全性访问更有利。

实验准备 

准备两台虚拟机,一台当作ssh客户端,一台当作ssh服务端,检查一下ssh相关服务的软件包和功能是否正常即可。 

实验设计图

实验验证 

 一组密钥对是客户端的某一个用户和服务端的某一个用户之间建立的联系,其他用户无法使用该密钥获取登录

实验步骤 

第一步:在客户端中创建密钥 

[root@localhost6 ~]# ssh-keygen -t rsa

[zhangsan@localhost ~]$ cd /home/zhangsan/.ssh
[zhangsan@localhost .ssh]$ ls

 

 第二步:把公钥文件导入到ssh服务端

方式1:手动导公钥进服务器 

[zhangsan@localhost .ssh]$ scp id_rsa.pub  root@192.168.73.111:/opt

切换到服务端,安置公钥 

cd /opt/
ls

vim /root/.ssh/authorized_keys

末行模式

:!cat /opt/id_rsa.pub 

 并且保存退出

 方式2:自动导公钥入服务器

  ssh-copy-id -i 公钥文件 用户@服务端IP

第三步:进行测试 

测试一:客户端zhangsan访问服务端root 

[zhangsan@localhost .ssh]$ ssh root@192.168.73.111

 

 测试二:客户端root访问服务端root

[root@localhost ~]# ssh root@192.168.73.111

 

 测试三:客户端zhangsan  访问服务端wangwu

[zhangsan@localhost .ssh]$ ssh wangwu@192.168.73.111

 4.TCP_wapper的原理和运用

4.1 TCP_wapper的工作原理

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

 4.2  TCP_Wrappers的运用

 /etc/hosts.allow 设置允许访问 tcp 服务程序的策略(白名单)

/etc/hosts.deny 设置禁止访问 tcp 服务程序的策略    (黑名单)

 假设引用

只允许IP地址为192.168.73.110的用户访问sshd服务,其他地址被拒绝

白名单设置: 

vim   /etc/hosts.allow 

 sshd:192.168.73.110
                                 

 

如果不确定该服务是否符合TCP_wapper的标准:

 

[root@localhost ~]# ldd $(which sshd)|grep wrap

 

 

 黑名单设置:

vim  /etc/hosts.deny

sshd:ALL

 

保存后,立即生效! 

测试 

 测试一:指定允许的客户端使用

 测试二:其他客户端进行访问

 黑名单和白名单的设置原理:先看 hosts.allow 文件中的设置,匹配上则直接放通,如果没有匹配则 再去看 hosts.deny 文件中的设置,匹配上则禁止/拒绝访问指定的tcp服务程序,如果也没有匹配上则默认允许放通

 总结

1. 熟知ssh密钥生成的过程,用于对ssh访问的加密,符合更安全的远程控制标准

2.当我们获得一台新的服务器时,为了更安全,取消掉root用户的远程访问

3.ssh中有更高效的传输获取功能,可以加以利用。

4.TCP_Wrappers中的黑白名单,可以大量高效的设置可访问服务端的用户及其能够访问的服务

有关Linux网络服务之SSH(远程访问及控制)的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  5. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  6. Ruby Readline 在向上箭头上使控制台崩溃 - 2

    当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby​​安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少

  7. ruby - Capistrano 3 在任务中更改 ssh_options - 2

    我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe

  8. ruby-on-rails - 带 Spring 锁的 Rails 4 控制台 - 2

    我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.

  9. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  10. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

随机推荐