一、SSH 原理图

二、SSH 原理描述

  2.1:什么是SSH

    SSH是专门为了远程登录会话和其他网络服务提供的安全性协议,使用SSH协议可以有效的防止远程连接会话的时候出现信息泄密,在数据传输的时候SSH会先对联机的数据包通过加密技术进行加密处理,加密后在进行数据的传输,确保了传输中的安全性,SSH服务主要提供两个服务功能:一个是远程联机的SSH服务,一个是借助SSH协议来传输数据的SFTP服务

  2.2:SSH原理阐述

    ① 服务端开启ssh服务监听22端口

    ② 客户端发送联机请求(携带IP和端口)

    ③ 客户端服务端进行联机加密认证

    ④ 认证通过联机成功

  2.3:SSH的两种认证方式

    ① 基于密码口令的认证

    ② 基于秘钥的安全认证

  2.4:SSH认证类型阐述

    基于密码口令的方式:

      基于密码的安全认证就是我们一直在用的,只要知道服务器的SSH连接账号和密码(当然也要知道服务器的IP和端口(默认22)),就可以通过客户端远程登录到主机了,所以的传输过程都是加密的

    基于秘钥的安全认证:

      ① 运行SSH服务,生成密钥对

      ② 客户端发送公钥到服务端(通过ssh-copy-id或者其他的方式)

      ③ 客户端发送连接请求

      ④ 服务端进行对密钥的验证

      ⑤ 验证成功服务端将用公钥加密质询,发送给客户端

      ⑥ 客户端用自己的私钥解密质询

      ⑦ 客户端将解密后的质询发送给服务端

      ⑧ 服务端验证质询

      ⑨ 验证通过,建立连接

  2.5:SSH联机加密过程原理阐述

    ① SSH服务端先生成一个1024-bit的公钥

    ② 客户端发送请求

    ③ 服务端把公钥发给客户端

    ④ 客户端生成256-bit的私钥,并且和服务端发过来的公钥进行整合

    ⑤ 客户端把整合的秘钥对发给服务端

    ⑥ 使用秘钥对进行联机

  PS:SSH2版本中为了修补SSH1中不验证整合秘钥对的漏洞,加入了一个确认联机正确性的Diffie-Hellman机制(每次联机都会进行秘钥对的校验)

三、SSH 搭建部署

安装ssh服务
yum -y install openssh openssl 启动服务
systemctl start sshd 配置文件
tree /etc/ssh/
/etc/ssh/
├── moduli
├── ssh_config 客户端配置文件
├── sshd_config 服务端配置文件
├── ssh_host_ecdsa_key
├── ssh_host_ecdsa_key.pub
├── ssh_host_ed25519_key
├── ssh_host_ed25519_key.pub
├── ssh_host_rsa_key
└── ssh_host_rsa_key.pub 使用
基于密码的连接
ssh root@192.168.163.129 也可以之家连接执行命令
ssh root@192.168.163.130 ifconfig ens33

四、SSH 企业级优化

在SSH 配置文件中有很多项是可以做优化的
vim /etc/sshd_config Port #默认22端口,修改其他端口
ListenAddress # 指定特定的监听地址
PermitEmptyPasswords # 是否允许密码为空的用户远程登录,默认为no
PermitRootLogin # 是否允许root登录,默认yes,改为no安全些
UseDNS # dns解析,默认yes 要改为no 提高速度
GSSAPIAuthentication # 解决linux之间使用远程连接慢的问题 快速更改优化方法使用sed命令
\cp /etc/ssh/sshd_config{,.bak}
sed -i 's%#Port 22%Port 56666%' /etc/ssh/sshd_config sed -i 's%#PermitEmptyPasswords no%PermitEmptyPasswords no%' /etc/ssh/sshd_config sed -i 's%#PermitRootLogin yes%PermitRootLogin no%' /etc/ssh/sshd_config sed -i 's%#UseDNS yes%UseDNS no%' /etc/ssh/sshd_config sed -i 's%GSSAPIAuthentication yes%GSSAPIAuthentication no%' /etc/ssh/sshd_config a=$(ifconfig | awk -F [" ":]+ 'NR==2{print $3}') | sed -i 's%#ListenAddress 0.0.0.0%ListenAddress '$a' %' /etc/ssh/sshd_config egrep "UseDNS|GSSAPIAuthentication|PermitRootLogin|PermitEmptyPasswords|ListenAddress|Port" /etc/ssh/sshd_config 一条命令搞定
a=$(ifconfig | awk -F [" ":]+ 'NR==2{print $3}') | sed -ir '13 iPort 56666\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthentication no\nListenAddress '$a'' /etc/ssh/sshd_config 重启服务
systemctl restart sshd

五、SSH 扩展(非交互式功能)

  5.1:expect

  5.2:sshpass

  5.3:pssh

六、SSH 总结

  ① SSH是安全加密协议,用于远程连接linux服务器

  ② SSH默认端口是22,安全协议版本是SSH2,除了SSH2还有SSH1,但是1有漏洞

  ③ SSH服务端只要包含两个服务,一个是SSH一个是SFTP

  ④ Linux SSH 客户端包含ssh远程连接命令,以及远程scp命令等

  ⑤ SSH配置文件的优化很重要,可以提高服务器的安全性,也可以提高远程连接的速度

七、SSH 错误及解决办法

首先、确保server端的ssh服务是开的(service shhd start)

然后在client端输入: ssh usrname@serverip (远程登录)

scp filename usrname@serverip:/URL (远程传输)

常出现的问题:

问题一

ssh登录的时候链接端口失败

提示(1):

# ssh 192.168.***.**

ssh: connect to host 192.168.***.** port 22: No route to host

这由于server端没有开机或是网络不通(这个原因很多,最简单的是网线没有插。还有就是可能会是网卡down了等)如果是网卡down了ifup相应的网卡再试试

提示(2):

# ssh zhou@192.168.***.**

ssh: connect to host 192.168.***.** port 22: Connection refused

这是由于对方server的ssh服务没有开。这个server端开启服务即可。 

如何开启ssh服务呢?

首先确保要登录的主机安装了openssh-client(ubuntu有默认安装,如果没有则sudo apt-get install openssh-client),如果要使本机开放SSH服务就需要安装 openssh-server sudo apt-get install openssh-server
然后确认sshserver是否启动了:
ps -e |grep ssh
如果看到sshd那说明ssh-server已经启动了。
如果没有则可以这样启动:sudo /etc/init.d/ssh start
ssh-server配置文件位于/ etc/ssh/sshd_config,在这里可以定义SSH的服务端口,默认端口是22,你可以自己定义成其他端口号,如222。
然后重启SSH服务:
sudo /etc/init.d/ssh stop
sudo /etc/init.d/ssh start
然后使用以下方式登陆SSH:
ssh zhou@192.168.***.** zhou为192.168.***.**机器上的用户,需要输入密码。
断开连接:exit 问题二、 ssh到server上的时候密码是对的但是报如下信息: # ssh 192.168.***.** root@192.168.***.**'s password: Permission denied, please try again. 这个是由于如果不输入用户名的时候默认的是root用户,但是安全期间ssh服务默认没有开root用户的ssh权限 解决方法: 要修改root的ssh权限,即修改 /etc/ssh/sshd_config文件中 PermitRootLogin no 改为 PermitRootLogin yes 问题三 登录是出现如下提示: ssh root@192.168.***.** @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that the RSA host key has just been changed. The fingerprint for the RSA key sent by the remote host is 76:fb:b3:70:14:48:19:d6:29:f9:ba:42:46:be:fb:77. Please contact your system administrator. Add correct host key in /home/fante/.ssh/known_hosts to get rid of this message. Offending key in /home/fante/.ssh/known_hosts:68 RSA host key for 192.168.***.** has changed and you have requested strict checking. Host key verification failed. server端密码或是其他发生改变的时候。 解决方法一般就需要删除~/.ssh/known_hosts的东西,然后再登录即可。

SSH远程连接服务的更多相关文章

  1. linux下SSH远程连接服务慢解决方案

    1.适用命令及方案如下:[远程连接及执行命令]ssh -p22root@10.0.0.19ssh -p22 root@10.0.0.19 /sbin/ifconfig[远程拷贝:推送及拉取]scp - ...

  2. 全新 Mac 安装指南(编程篇)(环境变量、Shell 终端、SSH 远程连接)

    注:本文专门用于指导对计算机编程与设计(尤其是互联网产品开发与设计)感兴趣的 Mac 新用户,如何在 Mac OS X 系统上配置开发与上网环境,另有<全新 Mac 安装指南(通用篇)>作 ...

  3. 远程连接Kali Linux使用PuTTY实现SSH远程连接

    远程连接Kali Linux使用PuTTY实现SSH远程连接 本书主要以在Android设备上安装的Kali Linux操作系统为主,介绍基于Bash Shell渗透测试.由于在默认情况下,在Andr ...

  4. CentOS 6.0修改ssh远程连接端口

    转自:系统运维 » CentOS 6.0修改ssh远程连接端口 实现目的:把ssh默认远程连接端口修改为2222 方法如下: 1.编辑防火墙配置:vi /etc/sysconfig/iptables ...

  5. 虚拟机VMware网络类型&&SSH远程连接Linux

    前言: Linux专题是16年11月开始写,说来惭愧,已经5个月没学Linux,至今感觉连入门还没达到.暑假实习有投运维开发岗位,无奈对Linux不熟悉,校招简历也被刷了.so, 我打算先花1个月内的 ...

  6. 五.ssh远程管理服务

    01. 远程管理服务知识介绍 1) SSH远程登录服务介绍说明 SSH是Secure Shell Protocol的简写,由 IETF 网络工作小组(Network Working Group)制定: ...

  7. Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第七集之SSH远程连接——克隆与更改配置】

    一.SSH远程连接 OpenSSH的安装 查看是否安装Openssh:rpm -qa | grep ssh搜索openssh安装包:yum search openssh安装openssh:yum in ...

  8. SSH远程连接Linux配置

    CentOS:   开启远程连接服务:service sshd start 添加到系统启动项:chkconfig sshd on 客户端工具:windows下连接工具putty   ========= ...

  9. Windowsclient SSH 远程连接Windowsserver(PowerShell Server)

    近期刚搞完SSH框架.又来研究研究SSH远程连接.为什么这么要弄这个呢?由于如今我如今开发主要在自己的笔记本(windows)上,然后写的后端都要部署到实验室的台式机(windows)上,这样一来,我 ...

随机推荐

  1. jquery 插入节点的方法

    方法 描述 示例 append() 向每个匹配的元素内部追加内容 HTML代码: <p>我想说:</p> jQuery代码: $("p").append(& ...

  2. Devexpress VCL Build v2013 vol 14.1.3 发布

    我修,我修,修修修. New Major Features in 14.1 What's New in VCL Products 14.1 Breaking Changes To learn abou ...

  3. KbmMW 认证管理器说明(转载)

    这是kbmmw 作者关于认证管理器的说明,我懒得翻译了,自己看吧. There are 5 parts of setting up an authorization manager: A) Defin ...

  4. 利用ajaxSubmit()方法实现Form提交表单后回调

    1.      背景 最近在工作中,需要实现网页端图片上传到FTP服务器的功能.上传文件是用Form表单提交数据的方法向后台传输文件流,在此遇到了一个问题:后台在处理完图片上传功能后,需要向前台回传是 ...

  5. 2018.09.24 bzoj4977: [[Lydsy1708月赛]跳伞求生(贪心+线段树)

    传送门 线段树好题. 这题一看我就想贪心. 先把a,b数组排序. 然后我们选择a数组中最大的b个数(不足b个就选a个数),分别贪心出在b数组中可以获得的最大贡献. 这时可以用线段树优化. 然后交上去只 ...

  6. hdu-1069(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1069 题意:一群猴子,给出n块砖的长x宽y高z,用这些砖拼起的高度最高是多少, 要求底下的砖的长宽都要 ...

  7. hdu-1253(bfs+剪枝)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1253 思路:简单的bfs,就是要注意剪枝. #include<iostream> #inc ...

  8. ESP8266-01一些内容

    系统有些指令必须特性状态下才可以执行,即先执行一些其它AT指令 1.设置station模式的IP信息 AT+CIPSTA="192.168.19.1","192.168. ...

  9. python3.4用循环往mysql5.7中写数据并输出

    #!/usr/bin/env python # -*- coding:utf-8 -*- # __author__ = "blzhu" """ pyt ...

  10. Netty学习第三节Netty的入门级学习

    1.原生NIO存在哪些缺陷     (1)NIO的类库和API繁杂,使用也比较麻烦,需要熟练掌握selector.ServerSocketChannel.SocketChannel.ByteBuffe ...