初学SSH的一些总结,主要来源于谷歌搜索和鸟叔的教程http://cn.linux.vbird.org/linux_server/0310telnetssh_2.php

以及阮一峰的博客http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html。

SSH(Secure SHell protocol),安全的壳程序协议。介绍它之前,简单介绍一下“非对称密钥系统”,阮一峰的一篇博文讲的非常好,http://www.ruanyifeng.com/blog/2006/12/notes_on_cryptography.html,同时还有一篇数字签名的文章也非常好,一并贴上来http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html。

加密方法可以分为两大类。一类是单钥加密(private key cryptography),还有一类叫做双钥加密(public key cryptography)。前者的加密和解密过程都用同一套密码,后者的加密和解密过程用的是两套密码。在单钥加密的情况下,密钥只有一把,所以密钥的保存变得很重要。一旦密钥泄漏,密码也就被破解。在双钥加密的情况下,密钥有两把,一把是公开的公钥,还有一把是不公开的私钥。双密钥加密有以下特点:

a) 公钥和私钥是一一对应的关系,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之亦成立。

b) 所有的(公钥, 私钥)对都是不同的。

c) 用公钥可以解开私钥加密的信息,反之亦成立。

d) 同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的。

由于每部主机都应该有自己的密钥(公钥与私钥),且公钥用来加密而私钥用来解密,其中私钥不可外流。但因为网络联机是双向的,所以,每个人应该都要有对方的『公钥』才对。

我们如果站在客户端的角度来看,那么,首先你必须要取得服务器端的公钥,然后将自己的公钥发送给服务器端, 最终在客户端上面的密钥会是『服务器的公钥加上客户端我自己的私钥』来组成的。

SSH的联机行为简介:

  • 服务器建立公钥档:每一次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*的档案,若系统刚刚安装完成时,由于没有这些公钥档案,因此sshd会主动去计算出这些需要的公钥档案,同时也会计算出服务器自己需要的私钥档;
  • 客户端主动联机要求:若客户端想要联机到ssh服务器,则需要使用适当的客户端程序来联机,包括ssh, pietty等客户端程序;
  • 服务器传送公钥档给客户端:接收到客户端的要求后,服务器便将第一个步骤取得的公钥档案传送给客户端使用(明码传送);
  • 客户端记录/比对服务器的公钥数据及随机计算自己的公私钥:若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户家目录内的~/. ssh/known_hosts 。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。若接受此公钥数据,则开始计算客户端自己的公私钥数据;
  • 回传客户端的公钥数据到服务器端:用户将自己的公钥传送给服务器。此时服务器:『具有服务器的私钥与客户端的公钥』,而客户端则是: 『具有服务器的公钥以及客户端自己的私钥』,在此次联机的服务器与客户端的密钥系统(公钥+私钥)并不一样,所以才称为非对称式密钥系统。
  • 开始双向加解密: (1)服务器到客户端:服务器传送数据时,拿用户的公钥加密后送出。客户端接收后,用自己的私钥解密;

              (2)客户端到服务器:客户端传送数据时,拿服务器的公钥加密后送出。服务器接收后,用服务器的私钥解密。

第4 步骤中,客户端的密钥是随机运算产生于本次联机当中的,所以这次的联机与下次的联机的密钥可能就会不一样。此外在客户端的用户家目录下的~/.ssh/known_hosts 会记录曾经联机过的主机的public key ,用以确认我们是连接上正确的那部服务器。

这样一来,就确保了数据传输的保密性。

SSH指令

  • 直接登入远程主机

ssh [-o 参数项目] [-p 其他端口] 账号 @ IP

-o:可用的参数有ConnectTimeout=秒数 联机等待的秒数,还有一些其他的。

-p:如果你需要连接的端口不是22,使用该选项

ssh user@host  user指自己的用户名,host指远程主机,如果本地用户名与远程用户名一致,登录时可以省略用户名。

初次登陆需要做的事项在http://cn.linux.vbird.org/linux_server/0310telnetssh_2.php有详细描述,需要时可以参考。

  • 模拟FTP 的文件传输方式: sftp

如果你只是想要从远程服务器下载或上传档案,可以使用sftp或scp。这两个指令也都是使用ssh的通道(port 22),只是模拟成FTP与复制的动作而已。

sftp user@host

登陆后的操作与ftp基本一致。主要写一下下载和上传指令。

上传:put [本机目录或档案] [远程] 
   put [本机目录或档案] ,如果是这种格式,则档案会放置到目前远程主机的目录下
下载:get [远程主机目录或档案] [本机] 
   get [远程主机目录或档案] ,若是这种格式,则档案会放置在目前本机所在的目录当中

  • 档案异地直接复制: scp

如果已经知道服务器上的档案档名,可以直接通过scp进行复制。

上传:scp [-pr] [-l速率] file [账号@]主机:目录名

下载:scp [-pr] [-l速率] [账号@ ]主机:file 目录名

-p :保留原本档案的权限数据;
-r :复制来源为目录时,可以复制整个目录(含子目录)
-l :可以限制传输的速度,单位为Kbits/s ,例如[-l 800] 代表传输速限100Kbytes/s
注意,上面的两个指令中,目录名都是指文件要“到达”的地方;file都是指要进行操作的文件。

SSH的细节设定可以参考鸟叔的教程,这里先不写。有需要的话会加上。

SSH个人小结的更多相关文章

  1. J2ee的SSM和SSH的小结

    1.介绍SSM框架: SSM是指由Spring.SpringMVC.Mybatis三个开源框架整合的开发框架. a).Spring是一个轻量级的容器框架,核心是控制反转(IoC)和面向切面(AOP). ...

  2. 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击

    VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门 ...

  3. ssh/openssh

    http://www.cnblogs.com/wwufengg/articles/ssh-openssh-detail.html http://www.cnblogs.com/jjkv3/archiv ...

  4. Linux ssh命令详解

    SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ...

  5. Linux ssh命令

    SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ...

  6. Spring第三天

    Spring第三天 整体课程安排(3天+2天): 第一天:Spring框架入门.IoC控制反转的配置管理.Spring Web集成.Spring Junit集成. 第二天:Spring AOP面向切面 ...

  7. Python之paramiko

    一.基础 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X ...

  8. 【python】-- Socket

    socket socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递. 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体 ...

  9. Linux命令(持续更新)

    1. tail 命令    tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件. tail  -f  filename 会把 filename 文件里的最尾部的内 ...

随机推荐

  1. 在linux下搭建l2tp隧道

    搭一个l2tp隧道,拓扑如下 两台机器是CentOS5,内核选上CONFIG_LEGACY_PTYS选项后自己编译的,l2tp是已经停更的l2tpd-0.69.先在LS上配置IP地址,iptables ...

  2. 多测师讲解selenium ——切换窗口——打印句柄_高级讲师肖sir

    (一)同一个窗口打开两个浏览器 from selenium import webdriverfrom time import sleepdrvier=webdriver.Chrome()url='ht ...

  3. Elasticsearch修改字段类型 (_reindex)

    1.设置索引t2为想要的数据类型 2.将t1 reindex到t2 3.数据reindex完成删除t1 4.设置索引t1为想要的数据类型 5.将t2 reindex到t1 如果 _reindex 超时 ...

  4. 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!

    俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...

  5. BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令

    BASH的PS1变量控制提示符相关的东西,善用它可以让BASH用起来舒服很多 提示符颜色 提示符显示上一个命令的返回值(exit code),并根据是否0调整颜色 提示符生成的时间(这样就知道上一条命 ...

  6. oh my zsh 安装

    date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 安装" tags: ["zsh",& ...

  7. PHP转Go系列:数组与切片 转

    数组的定义# 用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直变态. Copy $array = [1, ...

  8. linux(centos8):firewalld使用ipset管理ip地址的集合

    一,firewalld中ipset的用途: 1,用途 ipset是ip地址的集合, firewalld使用ipset可以在一条规则中处理多个ip地址, 执行效果更高 ​对ip地址集合的管理也更方便 2 ...

  9. react渲染数据3种方式

    直接渲染,()类似于模板字符串,包裹一个dom元素 ReactDOM.render( (<div> <h2>现在时间:{new Date().toLocaleTimeStrin ...

  10. 实现LNMP架构

    LNMP简介 WEB资源类型: 静态资源:服务器端和客户端看到的是一样的 动态资源:服务器端放的是程序,客户端看到的是结果,并不是程序本身 和页面的静或者动没有关系 WEB相关语言 HTML JAVA ...