一、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. 2018.09.27 hdu5564Clarke and digits(数位dp+矩阵快速幂)

    传送门 好题啊. 我只会写l,rl,rl,r都很小的情况(然而题上并没有这种数据范围). 但这个dp转移式子可以借鉴. 我们用f[i][j][k]f[i][j][k]f[i][j][k]表示当前在第i ...

  2. 2018.09.16 bzoj1176: [Balkan2007]Mokia(cdq分治)

    传送门 调了半天发现是输出优化打错了求心理阴影体积233 这题很简单啊. 一个修改操作x如果对一个询问操作y有贡献那么有. tx<ty,Xx<=Xy,Yx<=Yy" rol ...

  3. 浮点数转byte数组

    ; float b=34.56745f; float c=0.0; ,,,}; byte* t=fbs; float2Bytes(t,b); unsigned int addrF=(unsigned ...

  4. python 判断是否是空行或注释行

    #coding:utf-8 '''''cdays-4-exercise-6.py 文件基本操作 @note: 文件读取写入, 列表排序, 字符串操作 @see: 字符串各方法可参考hekp(str)或 ...

  5. 一种基于Redis的10行代码实现IP频率控制方法

    优点:可支持海量访问的频率控制,只需要增加Redis机器,单个Redis节点(只占用一个cpu core)即可支持10万/s以上的处理. 基于IP频率限制是种常见需求,基于Redis可以十分简单实现对 ...

  6. Robotframework-Appium 之常用API(二)

    续接上一文,更多API详细如下: 注:更多官方详情信息见 http://robotframework.org/robotframework/ 28. Name: Install App Source: ...

  7. Java子父类中的构造函数实例化过程

    其实我们发现子类继承父类操作很简单,如果要是去深入的研究下会发现,实例化过程并非是我们看到的那样,我们就以代码举例来说明: 问大家,以下代码执行会输出什么呢? package com.oop; /** ...

  8. 【算法31】寻找数组的主元素(Majority Element)

    题外话 最近有些网友来信问我博客怎么不更新了,是不是不刷题了,真是惭愧啊,题还是在刷的,不过刷题的频率没以前高了,看完<算法导论>后感觉网上很多讨论的题目其实在导论中都已经有非常好的算法以 ...

  9. 使用jetty-maven-plugin运行maven多项目

    1.准备工作 org.eclipse.jetty   jetty-maven-plugin    9.2.11.v20150529 jdk  1.7 maven  3.1 2.采用maven管理多项目 ...

  10. 谈谈XAML前端开发

    GUI的发展 在图形用户界面的操作系统(Windows,MAC)出现之前,计算机软件是命令行界面的程序,用户和程序的交互是通过输入命令,查看命令运行结果进行的.当然很不友好.后来出现了文本图形界面的程 ...