SSH个人小结
初学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个人小结的更多相关文章
- J2ee的SSM和SSH的小结
1.介绍SSM框架: SSM是指由Spring.SpringMVC.Mybatis三个开源框架整合的开发框架. a).Spring是一个轻量级的容器框架,核心是控制反转(IoC)和面向切面(AOP). ...
- 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击
VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门 ...
- ssh/openssh
http://www.cnblogs.com/wwufengg/articles/ssh-openssh-detail.html http://www.cnblogs.com/jjkv3/archiv ...
- Linux ssh命令详解
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ...
- Linux ssh命令
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息. ...
- Spring第三天
Spring第三天 整体课程安排(3天+2天): 第一天:Spring框架入门.IoC控制反转的配置管理.Spring Web集成.Spring Junit集成. 第二天:Spring AOP面向切面 ...
- Python之paramiko
一.基础 paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X ...
- 【python】-- Socket
socket socket本质上就是在2台网络互通的电脑之间,架设一个通道,两台电脑通过这个通道来实现数据的互相传递. 我们知道网络 通信 都 是基于 ip+port 方能定位到目标的具体机器上的具体 ...
- Linux命令(持续更新)
1. tail 命令 tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件. tail -f filename 会把 filename 文件里的最尾部的内 ...
随机推荐
- 在linux下搭建l2tp隧道
搭一个l2tp隧道,拓扑如下 两台机器是CentOS5,内核选上CONFIG_LEGACY_PTYS选项后自己编译的,l2tp是已经停更的l2tpd-0.69.先在LS上配置IP地址,iptables ...
- 多测师讲解selenium ——切换窗口——打印句柄_高级讲师肖sir
(一)同一个窗口打开两个浏览器 from selenium import webdriverfrom time import sleepdrvier=webdriver.Chrome()url='ht ...
- Elasticsearch修改字段类型 (_reindex)
1.设置索引t2为想要的数据类型 2.将t1 reindex到t2 3.数据reindex完成删除t1 4.设置索引t1为想要的数据类型 5.将t2 reindex到t1 如果 _reindex 超时 ...
- 【C语言程序设计】小游戏之俄罗斯方块(一)!适合初学者上手、练手!
俄罗斯方块的核心玩法非常简单,所以制作起来并不是很复杂,我准备先用2篇文字的篇幅详细讲解一下俄罗斯方块的制作方法. 今天咱们算是第一篇,主要讲解俄罗斯方块中如何定义方块,以及如何实现方块的移动.旋转. ...
- BASH提示符颜色、显示返回值,终端标题显示当前目录与正在执行的命令
BASH的PS1变量控制提示符相关的东西,善用它可以让BASH用起来舒服很多 提示符颜色 提示符显示上一个命令的返回值(exit code),并根据是否0调整颜色 提示符生成的时间(这样就知道上一条命 ...
- oh my zsh 安装
date: "2020-10-18T12:36:00+08:00" title: "oh my zsh 安装" tags: ["zsh",& ...
- PHP转Go系列:数组与切片 转
数组的定义# 用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直变态. Copy $array = [1, ...
- linux(centos8):firewalld使用ipset管理ip地址的集合
一,firewalld中ipset的用途: 1,用途 ipset是ip地址的集合, firewalld使用ipset可以在一条规则中处理多个ip地址, 执行效果更高 对ip地址集合的管理也更方便 2 ...
- react渲染数据3种方式
直接渲染,()类似于模板字符串,包裹一个dom元素 ReactDOM.render( (<div> <h2>现在时间:{new Date().toLocaleTimeStrin ...
- 实现LNMP架构
LNMP简介 WEB资源类型: 静态资源:服务器端和客户端看到的是一样的 动态资源:服务器端放的是程序,客户端看到的是结果,并不是程序本身 和页面的静或者动没有关系 WEB相关语言 HTML JAVA ...