SSH基本概述

SSH服务协议说明

SSH 是 Secure Shell Protocol 的简写,由 IETF 网络工作小组(Network Working Group )制定
在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
SSH是专为远程登录会话和其他网络服务提供的安全性协议。利用 SSH 协议可以有效的防止远程管理过程中的信息泄露问题,在当前的生产环境运维工作中,绝大多数企业普遍采用SSH协议服务来代替传统的不安全的远程联机服务软件,如telnet(23端口,非加密的)等。
在默认状态下,SSH服务主要提供两个服务功能:
一是提供类似telnet远程联机服务器的服务,即上面提到的SSH服务。
另一个是类似FTP服务的sftp-server,借助SSH协议来传输数据的.提供更安全的SFTP服务(vsftp,proftp)。

SSH远程服务主要功能

提供远程连接服务器的服务
对传输的数据进行加密

远程连接方式有哪些

ssh属于密文连接方式 监听在本地22/tcp端口
telnet属于明文连接方式 监听在本地23/tcp端口

ssh知识要点

ssh是安全的加密协议,用于远程链接linux服务器
ssh 默认端口是22,安全协议版本sshv2,出来2之外还有1(有漏洞)
ssh服务端主要包括两个服务功能 ssh远程链接和sftp服务
linux ssh 客户端包括ssh 远程链接命令,以及远程拷贝scp命令

私钥和公钥

ssh实现安全链接建立,利用钥匙和锁头
1. 钥匙=私钥 锁头=公钥,私钥可以解密公钥
2. 公钥可以再网络中传输,私钥再本地主机保存

SSH相关命令

SSH是典型的客户端和服务端的交互模式, 客户端广泛的支持各个平台
WIndows有很多工具可以支持SSH连接功能, 建议使用Xshell

openssh软件分析

(与数据加密相关的软件--openssl)

[root@backup ~]# rpm -ql openssh-server
/etc/ssh/sshd_config --- ssh服务配置文件
/usr/sbin/sshd --- ssh服务进程启动命令
[root@backup ~]# rpm -ql openssh-clients
/usr/bin/scp --- 远程拷贝命令
/usr/bin/sftp --- 远程文件传输命令
/usr/bin/slogin --- 远程登录命令
/usr/bin/ssh --- 远程连接登录命令
/usr/bin/ssh-copy-id --- 远程分发公钥命令

ssh客户端包含ssh以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全FTP文件传输)等应用程序。

ssh远程登录服务器命令

ssh -p22 nfsnobody@10.0.0.150 [命令]
# SSH连接远程主机命令的基本语法;
# ssh 命令
# -p(小写), 用于指定远程主机端口,默认22端口可省略
# nfsnobody@remotehost
# "@"前面为用户名,如果用当前用户连接,可以不指定用户
# "@"后面为要连接的服务器的IP

scp命令详解

scp复制数据至远程主机命令(全量复制)

SSH连接远程主机命令的基本语法;
scp 命令
-P(大写) 指定端口,默认22端口可不写
-r 表示递归拷贝目录
-p 表示在拷贝文件前后保持文件或目录属性不变
-l 限制传输使用带宽(默认kb)

推:PUSH,上传

# scp -P22 -rp /tmp/nfsnobody nfsnobody@10.0.0.150:/tmp
# /tmp/nfsnobody为本地的目录。
# “@”前为用户名
# “@”后为要连接的服务器的IP。
# IP后的:/tmp目录,为远端的目标目录。
# 说明: 以上命令作用是把本地/tmp/nfsnobody推送至远端服务器10.0.0.150的/tmp目录

拉:PULL,下载

# scp -P22 -rp root@10.0.0.7:/tmp/nfsnobody /opt/
# 还可以将远端目录或文件拉取至本地

SCP命令结论

scp通过加密进行远程拷贝文件或目录的命令。
scp拷贝权限为连接的用户对应的权限。
scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。

Sftp命令详解

Sftp远程数据传输命令
sftp连接远程
sftp root@192.168.56.12
sftp -oPort=52113 root@10.0.0.41 <-sftp的特殊端口连接
下载文件, 至于本地服务器
sftp> get conf.txt /tmp/
上传本地服务器文件, 至远程服务器
sftp> put /root/t1.txt /root/
sftp-->XFTP
1.支持批量上传文件
2.支持单个文件超过4G
3.支持断点续传

SSH服务软件详细说明

什么是ssh服务

SSH服务端是一个守护讲程 (daemon).他在后台运行并响应来自客户端的连接请求。 SSH服务端的讲程名为sshd,负责实时监听远程SSH客户端的远程连接请求,并进行处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接等。这个SSH服务就是我们前面基础系统优化中保留开机自启动的服务之。
ssh客户端包含ssh以及像scp(远程拷贝) slogin(远程登陆) sftp(安全FTP文件传输)等应用程序。
ssh的工作机制大致是本地的ssh客户端先发送一个连接请求到远程的ssh服务端,服务端检查连接的客户端发送的数据包和IP地址,如果确认合法,就会发送密钥给 SSH的客户端,此时,客户端本地再将密钥发回给服务端,自此连接建立。

ssh软件安装

客户端

[root@nfs01 ~]# rpm -qf `which ssh`
openssh-clients-5.3p1-122.el6.x86_64 服务端软件 [root@nfs01 ~]# rpm -qf `which sshd`
openssh-server-5.3p1-122.el6.x86_64
注意:使用sshd采用绝对路径进行启动
[root@test ~]# sshd
sshd re-exec requires execution with an absolute path

SSH连接方式

基于账户密码远程登录

基于口令的安全验证的方式就是大家现在一直在用的,只要知道服务器的SSH连接帐号和口令(当然也要知道对应服务器的 IP及开放的 SSH端口,默认为22 ),就可以通过 ssh客户端登录到这台远程主机。此时,联机过程中所有传输的数据都是加密的。
知道服务器的IP端口,账号密码, 即可通过ssh客户端登陆远程主机, 远程主机联机过程中传输数据库都是加密的。

~ ssh -p22 root@10.0.0.60
root@10.0.0.60's password:
[root@m01 ~]#

ssh分发公钥实质执行过程

①. 管理服务器创建私钥和公钥(密钥对
②. 将公钥文件远程传送复制到被管理服务器相应用户~/.ssh/id_dsa.pub下,并修改.ssh目录权限为700
③. 修改公钥文件文件名称为authorized_keys,授权权限为600
④. 利用ssh服务配置文件的配置参数,进行识别公钥文件authorized_keys
⑤. 进而实现基于密钥远程登录服务器(免密码登录/非交互方式登录)

基于秘钥远程登录

默认情况下,通过ssh客户端登陆远程服务器, 需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性, 建议使用密钥验证方式.

1.在管理服务器上生成密钥,-t密钥类型, -C指定用户邮箱
[root@m01 ~]# ssh-keygen -t rsa -C nfsnobody@qq.com
...
默认一路回车即可, 当然也可以根据不同需求进行修改
...
2.将A服务器上的公钥推送至B服务器
命令示例: ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id 命令
-i 指定下发公钥的路径
[user@] 以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
machine 下发公钥至那台服务器, 填写远程主机IP地址
秘钥分发, [会将A服务器的公钥写入B服务器~/.ssh/authorized_keys文件中]
[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
3.A服务器通过密钥方式连接B服务器
远程登录对端主机方式
[root@m01 ~]# ssh root@172.16.1.41
[root@nfs ~]# 不登陆远程主机执行命令
[root@m01 ~]# ssh root@172.16.1.41 "hostname -i"
172.16.1.41 可能遇到错误
1.no route to host 防火墙
2.Connection refused 防火墙或服务未启用

telnet连接

telnet连接 不加密  无法使用root用户连接

安装telnet服务,然后使用root登录测试
[root@web01 ~]# yum install telnet-server -y
[root@web01 ~]# systemctl start telnet.socket
使用xshell的新建标签,输入如下指令[登录不上]
[e:\~]$ telnet 10.0.0.7
Kernel 3.10.0-862.el7.x86_64 on an x86_64
web01 login: root
Password:
Login incorrect
创建一个普通用户,再次使用telnet登录测试
[root@web01 ~]# useradd od
[root@web01 ~]# echo "1" | passwd --stdin od [e:\~]$ telnet 10.0.0.7
web01 login: od
Password:
Last login: Mon Sep 10 09:57:39 from ::ffff:10.0.0.1
[od@web01 ~]$

SSH服务密钥分发实战

角色 外网IP 内网IP 用户
m01分发密钥 eth0:10.0.0.61 eth1:172.16.1.61 root
nfs被控端 eth0:10.0.0.31 eth1:172.16.1.31 root
backup被控端 eth0:10.0.0.41 eth1:172.16.1.41 root
1.实现m01服务器通过密钥登录backup和nfs服务器
2.实现m01服务器查看backup和nfs的服务器的状态信息(无需密码)
在m01控制端生成密钥
[root@m01 ~]# ssh-keygen -t rsa -C A-Server.com
分发密钥,如果SSH不是使用默认22端口, 使用-P指定对应端口
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "-p6666 root@172.16.1.31"
[root@m01 ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub "-p6666 root@172.16.1.41"
在m01管理机上测试是否成功登陆两台服务器
[root@m01 ~]# ssh -p6666 root@1172.16.1.41
[root@nfs01 ~]# [root@m01 ~]# ssh -p6666 root@1172.16.1.31
[root@backup ~]#

SSH练习案例

1.使用root用户完成一把钥匙开多把锁A钥匙,BC锁
创建公钥和私钥(A)
[root@manager ~]# ssh-keygen
分发A公钥至(BC)
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
[root@manager ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41
2.在不破坏题1的前提下,完成多把钥匙开一把锁BC钥匙,A锁
1.生成公钥和私钥(B)
[root@nfs01 ~]# ssh-keygen
2.B下发公钥给A
[root@nfs01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61 3.生成公钥和私钥(C)
[root@nfs01 ~]# ssh-keygen
4.C下发公钥给A
[root@backup ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.61
3.如何实现从A指定目录或文件分发到BC服务器
[root@manager ~]# scp manager-web root@172.16.1.31:/tmp
manager-web 100% 0 0.0KB/s 00:00
[root@manager ~]# scp manager-web root@172.16.1.41:/tmp
manager-web 100% 0 0.0KB/s 00:00
4.如何快速查看所有机器的load,CPU,Memory等信息(思考:如果服务器数量多,如何并发查看和分发数据)
[root@manager ~]# cat test.sh
#!/usr/bin/bash
[ $# -ne 1 ] && echo "请输入执行的命令" && exit 1 for i in 31 41
do
echo "#########172.16.1.$i#####"
ssh root@172.16.1.$i "$1"
done

SSH访问控制

远程服务访问控制手段

1.更改SSH服务远程登录端口
2.更改SSH服务监听本地内网IP
3.更改SSH服务禁止ROOT管理员登录
4.更改SSH服务密码登录认证为密钥登录
5.重要服务器都不使用公网IP地址
6.使用防火墙限制来源IP地址

SSH入侵网友案例

1.SSH服务登录防护手段配置文件/etc/ssh/sshd_config
Port 6666 # 变更SSH服务远程连接端口
ListenAddress 10.0.0.61 # 绑定本地内网地址
PermitRootLogin # 是否允许root用户远程登录
PasswordAuthentication # 是否允许使用密码登录
UseDNS # 是否进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication # 是否进行认证,影响ssh连接效率参数 SSH配置实例, 添加如下配置至/etc/ssh/sshd_config, 根据业务需求调整配置
###SSH###
Port 6666
ListenAddress 10.0.0.61
#PasswordAuthentication no
#PermitRootLogin no
GSSAPIAuthentication no
UseDNS no ###END###

ssh服务配置文件

配置文件中所有注释信息,表示默认参数配置
配置文件中#空格 后面内容表示说明信息
              #参数 表示配置参数信息
配置文件参数信息修改后,一旦变为注释,即还原为默认配置

ssh服务的配置文件路径

vim  /etc/ssh/sshd_config
修改SSH服务的运行参数,是通过修改配置文件/etc/ssh/sshd_config实现的。
一般来说SSH服务使用默认的配置已经能够很好的工作了,如果对安全要求不高,仅仅提供SSH服务的情况,可以不需要修改任何配置。

配置文件中常用配置说明

[root@backup ~]# vim /etc/ssh/sshd_config
# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ # This is the sshd server system-wide configuration file. See
# sshd_config(5) for more information. # This sshd was compiled with PATH=/usr/local/bin:/bin:/usr/bin # The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value. # OpenSSH is to specify options with their default value where
# possible, but leave them commented. Uncommented options change a
# default value. Port 25113 #端口
ListenAddress 10.0.0.41 #监听地址(本地网卡地址),指定本地网卡那个网卡提供服务
PermitRootLogin no #是否允许root用户登陆
#PermitEmptyPasswords no #禁止空密码登陆
#UseDNS no #不使用DNS
GSSAPIAuthentication no #API认证
连接慢的解决
#AddressFamily any #指定监听ipv4地址,或是ipv6地址,或者所有都监听

配置文件内容说明:
井号(#)注释的参数信息为默认配置
井号(#)后面有空格的为描述信息
井号(#)后面没有空格的为参数信息
另外:配置文件参数信息修改后,一旦变为注释,即还原为默认配置

配置文件语法检查方法

使用sshd -t 命令 对配置文件的语法进行检查

正确↓
[root@backup ~]# sshd -t /etc/ssh/sshd
Extra argument /etc/ssh/sshd.
语法格式有错误↓
[root@test ~]# sshd -t /etc/ssh/sshd_config
/etc/ssh/sshd_config: line 50: Bad configuration option: uthorizedKeysFile
/etc/ssh/sshd_config: terminating, 1 bad configuration options

SSH配置文件相关参数

命令参数 参数说明
Port 指定sshd进程监听的端口号,默认为22.可以使用多条指令监听多个端口.
默认将在本机的所有网络接□上监听,但是可以通过ListenAddress指走只在某个特定的接口上监听.
PermitEmptyPasswords 是否允许密码为空的用户远程登录.默认为"no"
PermitRootLogin 是否允许root登录.可用值如下:"yes"(默认)表示允许."no"表示禁止.
"without-password"表示禁止使用密码认证登录."forced-commands-only"表示只有在指走了command选项的情况下才允许使用公钥认证登录.同时其它认证方法全部被禁止.这个值常用于做远程备份之类的事情.
1.多开一个窗口
2.临时多部署一条连接方式
3.给普通用户sudo权限
UseDNS 指定定sshd是否应该对远程主机名进行反向解折,以检查此主机名是否与其IP地址真实对应.默认值为"yes”.
ListenAddress 指定监听并提供服务相应的网卡地址信息

SSHD的更多相关文章

  1. sshd 指定端口,指定秘钥文件

     scp -i ~/test -P22219 SRC/ root@10.2.227.76:/data/ #sshd的端口指定的是22219,  -i 指定秘钥文件   指定秘钥文件需要注意的是,需要提 ...

  2. SSHD服务搭建

    SSH协议:安全外壳协议.为Secure Shell 缩写.SSH为建立在应用层和传输层基础上的安全协议.   1.检查SSH服务端安装情况 [root@rhel6_84 ~]# rpm -qpi / ...

  3. sshd 错误

    140669086946976:error:0E079065:configuration file routines:DEF_LOAD_BIO:missing equal sign:conf_def. ...

  4. 开源服务专题之------sshd服务安装管理及配置文件理解和安全调优

    本专题我将讨论一下开源服务,随着开源社区的日趋丰富,开源软件.开源服务,已经成为人类的一种公共资源,发展势头可谓一日千里,所以不可不知.SSHD服务,在我们的linux服务器上经常用到,很重要,涉及到 ...

  5. sshd安装

    centos yum install openssh-server #chkconfig --level 2345 sshd on #service sshd restart 重新启动 #netsta ...

  6. [Linux] 学习笔记之安装学习环境(sshd, lrzsz)

    紧接前一篇,在VMWare安装完Linux,这个时候我们要使用远程工具连接到虚拟机上去了,以前一直使用Putty,后来到新公司之后,推荐使用SecureCRT,使用之后,觉得效果不错,但是每次连接都失 ...

  7. BackTrack 5 开启SSHD服务

    BackTrack 5 开启SSHD服务 1 service ssh start 但启动后,仍然无法从远程连接,会有提示: 1 Read from socket failed: Connection ...

  8. linux防止sshd被爆破(安装denyhosts)

    这是一篇收集在日志里的文档,当初查看服务器sshd日志发现很多不明IP尝试登陆,因此想用什么办法阻止这样的事情发生.网上找了下用denyhosts可以解决这样的问题,因而也就将其收集在日志里了.由于时 ...

  9. Fedora 启动sshd服务:

    .先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server openssh-server-.3p1-.fc12.i686 (这行 ...

  10. 改变服务器sshd 的22的端口

    [root@v01-svn-test-server ~]# vi /etc/ssh/sshd_config Port 22 Port 5001 #新增加5001端口给sshd,现在22,5001都是s ...

随机推荐

  1. H5(二)

    音视频处理   视频处理     基本内容       使用Flash技术处理HTML页面中的视频内容         包含音频.动画.网页游戏等  特点    浏览器原生不支持(IE浏览器要求安装A ...

  2. SQLServer2005如何批量修改架构名 - wuxiaokaixinguo的专栏

    原文地址:http://blog.csdn.net/wuxiaokaixinguo/article/details/8523093 ) BEGIN SET @name='原构架名.' + @name ...

  3. velocity-tools-beta1.jar与velocity-tools.jar不兼容

    今天在升级了某些依赖jar的版本启动一项目后,velocity中的有些定义在common.vm中变量居然变成了null,没能include进来导致,而没升级的环境是ok的,经过反查,最后发现是将vel ...

  4. HDU 1698 Just a Hook(线段树/区间更新)

    题目链接: 传送门 Minimum Inversion Number Time Limit: 1000MS     Memory Limit: 32768 K Description In the g ...

  5. Leetcode 342 Power of Four 数论

    题意:判断一个数是不是4的幂数,和Power of two类似. 先判断num是否大于0,再判断num是否能开根号,最后判断num开根号后的数是否是2^15的约数. 提示:4的幂数开根号就是2的幂数. ...

  6. python setup.py uninstall

    I have installed a python package with python setup.py install How do I uninstall it? ============== ...

  7. css filter详解

    css filter详解 filter 属性详解 属性 名称 类型 说明 grayscale 灰度 值为数值 取值范围从0到1的小数(包括0和1) sepia 褐色 值为数值 取值范围从0到1的小数( ...

  8. yii_wiki_204_using-cjuidialog-to-edit-rows-in-a-cgridview(通过CJuiDialog在CGridView中修改行数据)

    /*** Using CJuiDialog to edit rows in a CGridView http://www.yiiframework.com/wiki/204/using-cjuidia ...

  9. [solr] - solr5.2.1环境搭建 - 使用tomcat做为容器

    这里忽略solr其他依赖环境的搭建,这里搭建solr5.2.1.使用Java1.7.0_17,tomcat使用6.0.36版本的. 1.下载solr压缩文件 Solr是Apache基金组织在lucen ...

  10. Cocos2d-X 精灵、动作效果

    命名空间宏: USING_NS_CC; 感觉事实上挺鸡肋的. NS_CC_BEGIN. == using namespace cocos2d{ NS_CC_END ; } 推断一个精灵被点击: 1.层 ...