第二十九天-ssh服务重要知识深入浅出讲解

目录概述:

1. SSH简介

2. SSH安全验证方式
3. 安装并测试OpenSSH

4. SSH的密匙
   4.1 生成你自己的密匙对

   4.2分发公用密匙

5. 配置SSH

   5.1 配置客户端的软件

   5.2 配置服务端的软件

6. 拷贝文件

   6.1 用"scp"拷贝文件

   6.2 用"sftp"拷贝文件

   6.3 用"rsync"拷贝文件

   6.4 用"加密通道"的ftp拷贝文件

 

1. SSH简介

  SSH的英文全称是Secure SHell。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的"通道"。

  传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到"中间人"(man-in-the-middle)这种方式的攻击。所谓"中间人"的攻击方式,就是"中间人"冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被 "中间人"一转手做了手脚之后,就会出现很严重的问题。

  最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。
  SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

2. SSH安全验证方式

  从客户端来看,SSH提供两种级别的安全验证。
  (1)第一种级别(基于口令的安全验证)

  只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到"中间人"这种方式的攻击。
  (2)第二种级别(基于密匙的安全验证)

  需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的家目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密"质询"(challenge)并把它发送给客户端软件。客户端软件收到"质询"之后就可以用你的私人密匙解密再把它发送给服务器。
用这种方式,你必须知道自己密匙的口令。但是,与第一种级别相比,第二种级别不需要在网络上传送口令。
  第二种级别不仅加密所有传送的数据,而且"中间人"这种攻击方式也是不可能的(因为他没有你的私人密匙)。但是整个登录的过程可能需要10秒。

3.安装并测试OpenSSH

  因为受到美国法律的限制,在很多Linux的发行版中都没有包括OpenSSH。但是,可以从网络上下载并安装OpenSSH

  $sudo apt-get install ssh
  安装完OpenSSH之后,用下面命令测试一下:
  ssh -l [your accountname on the remote host] [address of the remote host]
  如果OpenSSH工作正常,你会看到下面的提示信息:
  The authenticity of host [hostname] can't be established.
  Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
  Are you sure you want to continue connecting (yes/no)?
  OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入"yes"。这将把这台主机的"识别标记"加到"~/.ssh/know_hosts"文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。然后,SSH提示你输入远程主机上你的帐号的口令。输入完口令之后,就建立了SSH连接,这之后就可以象使用telnet那样使用SSH了。

4. SSH的密匙
4.1 生成你自己的密匙对

  生成并分发你自己的密匙有两个好处:
  1) 可以防止"中间人"这种攻击方式
  2) 可以只用一个口令就登录到所有你想登录的服务器上

  用下面的命令可以生成密匙:
  ssh-keygen
  如果远程主机使用的是SSH 2.x就要用这个命令:
  ssh-keygen -d
  在同一台主机上同时有SSH1和SSH2的密匙是没有问题的,因为密匙是存成不同的文件的。
  ssh-keygen命令运行之后会显示下面的信息:
  Generating RSA keys: ............................ooooooO......ooooooO
  Key generation complete.
  Enter file in which to save the key (/home/[user]/.ssh/identity):
  [按下ENTER就行了]
  Created directory '/home/[user]/.ssh'.
  Enter passphrase (empty for no passphrase):
  [输入的口令不会显示在屏幕上]
  Enter same passphrase again:
  [重新输入一遍口令,如果忘记了口令就只能重新生成一次密匙了]
  Your identification has been saved in /home/[user]/.ssh/identity.
  [这是你的私人密匙]
  Your public key has been saved in /home/[user]/.ssh/identity.pub.
  The key fingerprint is: 2a:dc:71:2f:27:84:a2:e4:a1:1e:a9:63:e2:fa:a5:89 [user]@[local machine]
  "ssh-keygen -d"做的是几乎同样的事,但是把一对密匙存为(默认情况下)"/home/[user]/.ssh/id_dsa"(私人密匙)和"/home/[user]/.ssh/id_dsa.pub"(公用密匙)。
  现在你有一对密匙了:公用密匙要分发到所有你想用ssh登录的远程主机上去;私人密匙要好好地保管防止别人知道你的私人密匙。用"ls -l ~/.ssh/identity"或"ls -l ~/.ssh/id_dsa"所显示的文件的访问权限必须是"-rw-------"。
  如果你怀疑自己的密匙已经被别人知道了,不要迟疑马上生成一对新的密匙。当然,你还要重新分发一次公用密匙。

4.2分发公用密匙

  在每一个你需要用SSH连接的远程服务器上,你要在自己的家目录下创建一个".ssh"的子目录,把你的公用密匙"identity.pub" 拷贝到这个目录下并把它重命名为"authorized_keys"。然后执行:
  chmod 644 .ssh/authorized_keys
  这一步是必不可少的。如果除了你之外别人对"authorized_keys"文件也有写的权限,SSH就不会工作。
  如果你想从不同的计算机登录到远程主机,"authorized_keys"文件也可以有多个公用密匙。在这种情况下,必须在新的计算机上重新生成一对密匙,然后把生成的"identify.pub"文件拷贝并粘贴到远程主机的"authorized_keys"文件里。当然在新的计算机上你必须有一个帐号,而且密匙是用口令保护的。有一点很重要,就是当你取消了这个帐号之后,别忘了把这一对密匙删掉。

5. 配置SSH
5.1 配置客户端的软件

  OpenSSH 有三种配置方式:命令行参数、用户配置文件和系统级的配置文("/etc/ssh/ssh_config")。命令行参数优先于配置文件,用户配置文件优先于系统配置文件。所有的命令行的参数都能在配置文件中设置。因为在安装的时候没有默认的用户配置文件,所以要把 "/etc/ssh/ssh_config"拷贝并重新命名为"~/.ssh/config"。
标准的配置文件大概是这样的:
  [lots of explanations and possible options listed]
  # Be paranoid by default
  Host *
  ForwardAgent no
  ForwardX11 no
  FallBackToRsh no
  还有很多选项的设置可以用"man ssh"查看"CONFIGURATION FILES"这一章。
  配置文件是按顺序读取的。先设置的选项先生效。
  假定你在www.foobar.com上有一个名为"bilbo"的帐号。而且你要把"ssh-agent"和"ssh-add"结合起来使用并且使用数据压缩来加快传输速度。因为主机名太长了,你懒得输入这么长的名字,用"fbc"作为"www.foobar.com"的简称。你的配置文件可以是这样的:
  Host *fbc
  HostName www.foobar.com
  User bilbo
  ForwardAgent yes
  Compression yes
  # Be paranoid by default
  Host *
  ForwardAgent no
  ForwardX11 no
  FallBackToRsh no
  你输入"ssh fbc"之后,SSH会自动地从配置文件中找到主机的全名,用你的用户名登录并且用"ssh-agent"管理的密匙进行安全验证。这样很方便吧!
用SSH连接到其它远程计算机用的还是"paranoid(偏执)"默认设置。如果有些选项没有在配置文件或命令行中设置,那么还是使用默认的"paranoid"设置。
在我们上面举的那个例子中,对于到www.foobar.com的SSH连接:"ForwardAgent"和"Compression"被设置为 "Yes";其它的设置选项(如果没有用命令行参数)"ForwardX11"和"FallBackToRsh"都被设置成"No"。
  其它还有一些需要仔细看一看的设置选项是:
  CheckHostIP yes
  这个选项用来进行IP地址的检查以防止DNS欺骗。
  CompressionLevel
  压缩的级别从"1"(最快)到"9"(压缩率最高)。默认值为"6"。
  ForwardX11 yes
  为了在本地运行远程的X程序必须设置这个选项。
  LogLevel DEBUG
  当SSH出现问题的时候,这选项就很有用了。默认值为"INFO"。

5.2 配置服务端的软件

  SSH服务器的配置使用的是"/etc/ssh/sshd_config"配置文件,这些选项的设置在配置文件中已经有了一些说明而且用"man sshd"也可以查看帮助。请注意OpenSSH对于SSH 1.x和2.x没有不同的配置文件。
  在默认的设置选项中需要注意的有:
  PermitRootLogin yes
  最好把这个选项设置成"PermitRootLogin without-password",这样"root"用户就不能从没有密匙的计算机上登录。把这个选项设置成"no"将禁止"root"用户登录,只能  用"su"命令从普通用户转成"root"。
  X11Forwarding no
  把这个选项设置成"yes"允许用户运行远程主机上的X程序。就算禁止这个选项也不能提高服务器的安全因为用户可以安装他们自己的转发器(forwarder),请参看"man sshd"。
  PasswordAuthentication yes
  把这个选项设置为"no"只允许用户用基于密匙的方式登录。这当然会给那些经常需要从不同主机登录的用户带来麻烦,但是这能够在很大程度上提高系统的安全性。基于口令的登录方式有很大的弱点。
  # Subsystem /usr/local/sbin/sftpd
  把最前面的#号去掉并且把路径名设置成"/usr/bin/sftpserv",用户就能使用"sftp"(安全的FTP)了(sftpserv在sftp 软件包中)。因为很多用户对FTP比较熟悉而且"scp"用起来也有一些麻烦,所以"sftp"还是很有用的。而且2.0.7版本以后的图形化的ftp工具"gftp"也支持"sftp"。

6. 拷贝文件
6.1 用"scp"拷贝文件

  SSH提供了一些命令和shell用来登录远程服务器。在默认情况下它不允许你拷贝文件,但是还是提供了一个"scp"命令。
  假定你想把本地计算机当前目录下的一个名为"dumb"的文件拷贝到远程服务器www.foobar.com上你的家目录下。而且你在远程服务器上的帐号名为"bilbo"。可以用这个命令:
  scp dumb bilbo@www.foobar.com:.
  把文件拷贝回来用这个命令:
  scp bilbo@www.foobar.com:dumb .
  "scp"调用SSH进行登录,然后拷贝文件,最后调用SSH关闭这个连接。
  如果在你的"~/.ssh/config"文件中已经为www.foobar.com做了这样的配置:
  Host *fbc
  HostName www.foobar.com
  User bilbo
  ForwardAgent yes
  那么你就可以用"fbc"来代替"bilbo@www.foobar.com",命令就简化为"scp dumb fbc:."。
  "scp"假定你在远程主机上的家目录为你的工作目录。如果你使用相对目录就要相对于家目录。
  用"scp"命令的"-r"参数允许递归地拷贝目录。"scp"也可以在两个不同的远程主机之间拷贝文件。
  有时候你可能会试图作这样的事:用SSH登录到www.foobar.com上之后,输入命令"scp [local machine]:dumb ."想用它把本地的"dumb"文件拷贝到你当前登录的远程服务器上。这时候你会看到下面的出错信息:
  ssh: secure connection to [local machine] refused
  之所以会出现这样的出错信息是因为你运行的是远程的"scp"命令,它试图登录到在你本地计算机上运行的SSH服务程序……所以最好在本地运行"scp"除非你的本地计算机也运行SSH服务程序。

6.2 用"sftp"拷贝文件

  如果你习惯使用ftp的方式拷贝文件,可以试着用"sftp"。"sftp"建立用SSH加密的安全的FTP连接通道,允许使用标准的ftp命令。还有一个好处就是"sftp"允许你通过"exec"命令运行远程的程序。从2.0.7版以后,图形化的ftp客户软件"gftp"就支持"sftp"。
  如果远程的服务器没有安装sftp服务器软件"sftpserv",可以把"sftpserv"的可执行文件拷贝到你的远程的家目录中(或者在远程计算机的 $PATH环境变量中设置的路径)。"sftp"会自动激活这个服务软件,你没有必要在远程服务器上有什么特殊的权限。

6.3 用"rsync"拷贝文件

  "rsync" 是用来拷贝、更新和移动远程和本地文件的一个有用的工具,很容易就可以用"-e ssh"参数和SSH结合起来使用。"rsync"的一个优点就是,不会拷贝全部的文件,只会拷贝本地目录和远程目录中有区别的文件。而且它还使用很高效的压缩算法,这样拷贝的速度就很快。

6.4 用"加密通道"的ftp拷贝文件

  如果你坚持要用传统的FTP客户软件。SSH可以为几乎所有的协议提供"安全通道"。FTP是一个有一点奇怪的协议(例如需要两个端口)而且不同的服务程序和服务程序之间、客户程序和客户程序之间还有一些差别。
  实现"加密通道"的方法是使用"端口转发"。你可以把一个没有用到的本地端口(通常大于1000)设置成转发到一个远程服务器上,然后只要连接本地计算机上的这个端口就行了。有一点复杂是吗?
  其实一个基本的想法就是,转发一个端口,让SSH在后台运行,用下面的命令:
  ssh [user@remote host] -f -L 1234:[remote host]:21 tail -f /etc/motd
  接着运行FTP客户,把它设置到指定的端口:
  lftp -u [username] -p 1234 localhost
  当然,用这种方法很麻烦而且很容易出错。所以最好使用前三种方法。

===============================================================

小结:
  1、ssh加密的远程连接协议。openssh,openssl
  2、默认端口22,建议修改
  3、到目前位置有1.x,2.x两个版本,2更安全
  4、服务端ssh 远程连接服务,sftp服务
  5、ssh客户端包含ssh命令,scp,sftp
  6、ssh安全验证:口令和秘钥,这两种都是基于用户的
  7、安全优化,修改默认端口,禁止root远程连接
  8、公钥(public key)放在服务端,相当于锁;私钥(private key)放在客户端,相当于钥匙。

扩展:
  给你一个端口,如何查出对应的服务?
  方法一:lsof -i tcp:22
  方法二:netstat -lntup|grep 22

推:push
  scp -P52113  /data/oldboy.txt  oldboy@10.0.0.7:/tmp
 
拉:pull
  scp    -P52113     oldboy@10.0.0.7:/tmp/oldboy.txt    /data/

源自:http://blog.chinaunix.net/uid-25324849-id-3187125.html

转载于:https://www.cnblogs.com/migongci0412/p/5052606.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 2141. 同时运行 N 台电脑的最长时间(二分查找)

文章目录1. 题目2. 解题1. 题目 你有 n 台电脑。给你整数 n 和一个下标从 0 开始的整数数组 batteries ,其中第 i 个电池可以让一台电脑 运行 batteries[i] 分钟。 你想使用这些电池让 全部 n 台电脑 同时 运行。 一开始,你可以给每台电脑连接 至多一个…

十二、HTML5新增标签特性详解(audio、video、input)

HTML5 第一天 一、什么是 HTML5 HTML5 的概念与定义 定义:HTML5 定义了 HTML 标准的最新版本,是对 HTML 的第五次重大修改,号称下一代的 HTML两个概念: 是一个新版本的 HTML 语言,定义了新的标签、特性和属性拥有一…

联想新电脑桌面没有计算机,联想电脑没有wifi图标不见了怎么办

1.联想笔记本电脑WiFi图标不见了,怎么回事吧,试了很多方法一、无线网卡开关未打开;1、查看周边有没有手动百机械开关,一般在前面板,上面标有无线符号。2、按一下Fn无线信号键(度F几中的一个)找打无线WIFI3、打开控制机板,右上角查…

Spring与Oauth2整合示例 spring-oauth-server

原文地址:http://www.oschina.net/p/spring-oauth-server?fromerrvpTctDBF转载于:https://www.cnblogs.com/longshiyVip/p/5052657.html

十三、CSS 3新特性详解(一)——属性、结构伪类、伪元素选择器,nth-child与nth-of-type区别,2D rotate,calc函数、滤镜filter、过渡transition

七、CSS3 属性选择器(上) 什么是 CSS3 在 CSS2 的基础上拓展、新增的样式 CSS3 发展现状 移动端支持优于 PC 端CSS3 目前还草案,在不断改进中CSS3 相对 H5,应用非常广泛 属性选择器列表 属性选择器代码演示 (1)E[att] 选择具有…

信息的表示和处理

文章目录1. 信息存储2. 整数的表示learn from 《深入理解计算机系统》 1. 信息存储 大多数计算机,一字节(最小的寻址单元) byte 8 bits 位 C语言中一个指针的值(无论它指向一个整数、一个结构或是某个其他程序对象)…

计算机等级考试试题在线测试,计算机等级考试上机练习题.pdf

计算机等级考试上机练习题一、程序设计题浙江省计算机等级考试(二级VB )上机测试的程序设计题,从2002 年秋季开始,其题型及考试要求都有较大变化。要求考生在老考生目录中,按照题目要求,自己新建一工程文件Design.Vbp &#xff0c…

十一、MySQL视图学习笔记(详解)

视图 含义:理解成一张虚拟的表,和普通表一样使用 mysql5.1版本出现的新特性,是通过表动态生成的数据 比如:舞蹈班和普通班级的对比 视图和表的区别: 名称创建语法的关键字使用占用物理空间视图create view增删改查&…

css cursor 的可选值(鼠标的各种样式)

crosshair; 十字准心 The cursor render as a crosshair游标表现为十字准线 cursor: pointer; cursor: hand;写两个是为了照顾IE5,它只认hand。 手 The cursor render as a pointer (a hand) that indicates a link游标以暗示(手指)的形式来表明有一个连…

2021年算法工作总结

2021年5月10日,我转行到互联网做算法工作,离开了工作接近8年的机械设计工作,还是要在这里感谢军哥对我的帮助和指点! 换工作后,陆续学了《流畅的python》,FastAPI框架学了点皮毛,python web 编…

学硕计算机考296算高分么,考研总分是多少算高分?考研340分是什么水平?

原标题:考研总分是多少算高分?考研340分是什么水平?每个考研的学生都想考一个高分,分数越高代表录取的希望越大,但是考研达到多少分算高分呢?有没有衡量考研分数的标准呢?小编为大家整理了关于考研总分高分相关的相关信息,一起…

HDU 4117 GRE Words

这道题不难想到这样的dp。 dp[字符串si] 以si为结尾的最大总权值。 dp[si] max(dp[sj]) &#xff0c;1.j < i&#xff0c;2.sj是si的子串。 对于第二个条件&#xff0c;是一个多模版串匹配的问题&#xff0c;可以用AC自动机。 预先O(m)把AC自动机建好&#xff0c;然后动态…

十四、CSS 3新特性详解(二)——2D转换(transform)、动画(animation)、动画序列

HTML5 第二天 一、rotate 2d旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转 使用步骤&#xff1a; 给元素添加转换属性 transform属性值为 rotate(角度) 如 transform:rotate(30deg) 顺时针方向旋转30度 div{transform: rotate(0deg); }二、三角 <!DOCTYPE html&…

pip/conda导出 requirements.txt 注意事项

pip 使用 pip freeze > ./requirements.txt 导出 requirements.txt 发现很多包没有版本号&#xff0c;而是 file:/// 使用pip list --formatfreeze > ./requirements.txt 导入安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt con…

计算机系统操作在线作业,电子科大《计算机操作系统》在线作业3

计算机操作,计算机网络14春13秋 13春电子科大《计算机操作14春13秋 13春电子科大《计算机操作系统》在线作业3 1 2试卷总分&#xff1a;100 测试时间&#xff1a;--单选题、单选题(共 20 道试题&#xff0c;共 100 分。)1. 在下列性质中,哪一个是分时系统的特征()。A. 多路性B.…

fortune命令简介

本文转自《阮志峰的网络日志》&#xff0c;原文网址&#xff1a;http://www.ruanyifeng.com/blog/2015/04/fortune.html 作者&#xff1a; 阮一峰 日期&#xff1a; 2015年4月14日 美国中餐馆的最后一道菜&#xff0c;往往是小甜饼&#xff0c;叫做"幸运饼"&#xff…

conda安装pytorch1.10.1+paddlepaddle-gpu2.2.1+cuda10.2+cudnn7.6.5

NV驱动下载安装https://www.nvidia.cn/Download/index.aspx多卡的话&#xff0c;安装 NCCL https://developer.nvidia.com/nccl/nccl-download安装conda&#xff0c;并配置通道 vim ~/.condarc show_channel_urls: truessl_verify: truechannels:- https://mirrors.tuna.tsing…

十五、CSS 3新特性详解(三)——3D转换(位移、旋转、呈现)、透视perspective、旋转rotateX、Y、Z、呈现transform-style

HTML5 第三天 一、 认识 3D 转换 3D 的特点 近大远小物体和面遮挡不可见 三维坐标系 x 轴&#xff1a;水平向右 – 注意&#xff1a;x 轴右边是正值&#xff0c;左边是负值 y 轴&#xff1a;垂直向下 – 注意&#xff1a;y 轴下面是正值&#xff0c;上面是负值 z 轴&#x…

用计算机表白的数字,用数字表白的句子大全 如何用数字表白一段话

表白总是一个让人十分难忘的经历&#xff0c;如果大家想要对喜欢的人表白&#xff0c;又不好意思直说自己的想法&#xff0c;那么今天的这份用数字表白的句子大全就对你们很有帮助了。跟我一起看看&#xff0c;如何用数字表白一段话呢&#xff1f;一、用数字表白的句子大全1、3…

python 常用 time, datetime处理

python 中 time 有三种格式&#xff1a; float, struct tuple(time.struct_time 或 datetime.datetime), str 常用的&#xff1a; float --> struct tuple: time.localtime( float ) struct time tuple --> str: time.strftime(format, struct time tuple) str --> …