SSH
第一章SSH
1、ssh介绍
SSH是secure shell protocol :在进行传输数据之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行传输,确保了传递的数据安全。
SSH服务端主要提供两个服务:一个是SSH服务,另一个是SP-SERVER客户端:借助SSH服务协议来传输数据的,提供更安全的SFTP服务(vsftp,proftp)
类似CRT,XSHELL特别提醒:SSH客户端(ssh命令)
还包括一个很有用的远程安全拷贝命令scp,也是通过ssh协议工作的

知识点小结:
- SSH是安全的加密协议,用于远程连接linux服务器
- SSH默认的端口是22,安全协议版本SSH2,除了2之外还有SSH1(有漏洞)
- SSH服务端主要包含两个服务功能SSH远程连接,SFTP服务
- LINUX SSH客户端包含SSH远程连接命令,以及远程拷贝scp命令等
1.1、 SSH结构
SSH服务由服务端软件OpenSSH(openssl)和客户端(常见的有SSH LINUX, SecureCTR,Xshell)组成,
SSH服务端软件
[root@backup 192.168.126.131]# rpm -qa openssh openssl
openssl-1.0.1e-30.el6.x86_64
openssh-5.3p1-104.el6.x86_64
less /etc/ssh/sshd_config查看SSH服务
1.2、ssh1x讲解


1x:不安全之处在于没有验证秘钥的机制,黑客可能截取秘钥后伪装进入。
1.3、SSH 2X
在SSH1.x的联机过程中,当Server接受Clinent端的Private key后,就不在针对该次联机的Key pair进行检验,此时若有恶意黑客针对该联机的Key pair对插入的程序代码时,由于服务端你不会在检验联机的正确性,因此可能会接收该程序代码,从而造成系被黑掉的问题
为了改正这个缺点:SSH version 2 多加了一个确认联机正确性的Diffie-Hellman机制,在每次传输数据中,Server都会以该机制检查数据的来源是不是正确。
SSH入侵网友案例:
http://phenixikki.blog.51cto.com/7572938/1546669
如何防止SSH登录入侵:
1、用密钥登录,不用密码登陆。
2、牤牛阵法:解决SSH安全问题
3、防火墙封闭SSH,指定源限制(局域网)
4、开启SSH只监听本地IP
1.4 SSH服务认证类型
一种是:基于口令安全认证,要知道服务器的SSH;连接账号和口令(当然也要知道对应服务器的IP及开放的端口,默认是22),就可以通过SSH客户端登陆到这台远程主机。
举例说明SecureCRT及SSH客户端连接
[root@Stone ~]# ssh -p22 root@192.168.126.131
The authenticity of host '192.168.126.131 (192.168.126.131)' can't be established.
RSA key fingerprint is 28:65:f6:93:9e:07:e6:82:2d:1d:67:77:bd:7e:96:f7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.126.131' (RSA) to the list of known hosts.
root@192.168.126.131's password:
Last login: Sat Sep 19 15:24:19 2015 from 192.168.126.1
ctrl +d 可退出当前系统。同logout
第二种:基于秘钥的安全验证
事先建立一对密钥对,然后把公用秘钥(Public key)放在需要访问的目标服务器上,还需要把私有秘钥(Private key)放到SSH的客户端或对应的客户端服务器上。
一对秘钥对(锁公用秘钥(Public key)和钥匙私有秘钥(Private key))
1.5启动SSH服务
端口默认的是22端口:
[root@Stone ~]# netstat -lntup|grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1071/sshd
tcp 0 0 :::22 :::* LISTEN 1071/sshd
服务开启的命令:
[root@Stone ~]# /etc/init.d/sshd status (restart)
openssh-daemon (pid 1071) 正在运行...
查看开机启动服务:
[root@Stone ~]# chkconfig --list sshd
sshd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
企业面试题:给你一个端口,你如何用命令行查出对应的服务是什么?
解答:
lsof –I :52113
ss –lntup|grep 52113
netstat –lntup|grep 52113
企业面试题:如果给你一个进程名,如何查看对应的端口是什么?
netstat –lntup|grep sshd
1.6更改ssh默认登录配置
#Port 22 :指定sshd进程监听的端口号,默认为22,可以使用多条指令监控多个端口。默认将在本机的所有网络接口上监听,但是可以通过ListenAddress指定在某个特定的接口上监听
#PermitRootLogin yes:是否使用ROOT登录,可用值如下:“yes”表示允许。“no”表示禁止。“without-password”表示禁止使用密码认证登录。“force-commands-only”表示只有在指定了commond选项的情况下才允许使用公钥认证登录。同时其他认证方法全部被禁。这个值常用于做远程备份之类的事情
#PasswordAuthentication yes
#PermitEmptyPasswords no是否允许密码为空的用户远程登录。默认为“no”
PasswordAuthentication yes
GSSAPIAuthentication yes
UseDNS no:指定sshd是否应该对远程主机名进行反向解析,以检查此主机名是否与其IP地址真实对应,默认值为“yes”
1.7远程连接ssh服务配置
ssh基本语法在工作中不通过CRT直接切换机器就用该命令
[root@Stone ~]# ssh -p22 root@192.168.126.131
The authenticity of host '192.168.126.131 (192.168.126.131)' can't be established.
RSA key fingerprint is 28:65:f6:93:9e:07:e6:82:2d:1d:67:77:bd:7e:96:f7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.126.131' (RSA) to the list of known hosts.
root@192.168.126.131's password:
Last login: Sat Sep 19 15:24:19 2015 from 192.168.126.1
当第一次SSH连接的时候,本地会产生一个秘钥文件root/.ssh/known_hosts(多个秘钥)
The authenticity of host '192.168.126.131 (192.168.126.131)' can't be established.
RSA key fingerprint is 28:65:f6:93:9e:07:e6:82:2d:1d:67:77:bd:7e:96:f7.
这部分内容放在了root/.ssh/known_hosts 里(多个密钥)
还有一种用法,不切换用户直接在另一个用户执行命令(最好接全路径)例子:
[root@Web-lamp01 ~]# ssh -p22 root@192.168.126.134 /sbin/ifconfig eth0
root@192.168.126.134's password:
eth0 Link encap:Ethernet HWaddr 00:0C:29:D4:AB:50
inet addr:192.168.126.134 Bcast:192.168.126.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fed4:ab50/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:836 errors:0 dropped:0 overruns:0 frame:0
TX packets:635 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:81173 (79.2 KiB) TX bytes:69065 (67.4 KiB)
ssh基本语法使用
ssh –p22 root@192.168.126.134【命令】
#èssh连接远程主机命令的基本语法,命令要用全路径。
#è-p(小写)接端口,默认22端口时可以省略-p22
#è@前面为用户名,如果用当前用户连接,可以不指定用户
#è@后面为要连接的服务器的IP,更多语法,请man ssh
报错字符串对应的可能问题
² no route to host 可能为防火墙
² Connection refuse可能为防火墙,还可能是连接的对端服务没开
1.8客户端附带的远程拷贝scp命令
scp –P22 –r –p /data root@192.168.126.131:/tmp/推
scp –P22 –r –p root@192.168.126.131:/tmp//data 拉
-P(大写)端口传输-P表示指定端口
–r 递归表示拷贝目录
–p(小写)保持属性同命令cp一个意思
较rsync而言rsync增量拷贝更有效率但是第一次拷贝文件目录都一样
-l: limit 限制速度(案例)后面接的是 Kbit/s直接加数值
scp只是小结:
1) scp是加密A的远程拷贝,而cp仅为本地拷贝
2) 可以把数据从一台机器推送到另一台机器,也可以从其他服务器把数据拉回到本地执行命令的服务器
3) 每次拷贝都是全量完整拷贝,因此,效率不高,适合第一次拷贝用,如果要增量拷贝,用rsync
1.9ssh服务附带的sftp功能服务
a) linux下连接命令sftp –oPort=22 oldboy@192.168.126.133
b) 上传put加客户端本地路径put /etc/hosts,也可以指定路径上传
put /etc/hosts /tmp
c) 下载get服务端的内容get hosts /etc/
d) 链接到的远端目录为默认目录,也可以切换到其他有权限的目录下
e) 加参数l代表本地命令例子lpwd lls
如何把用户登录的目录限制到指定目录?
windows客户端链接sftp方法:

直接和windows电脑上直接交互
上传:put “E:\do\kk.txt” 必须有双引号put是将电脑上的文件放到sftp目录下
下载:get b.log 上传到选项会话选项-sftp标签-本地目录(设置的目录)
1.10章节重点小结
- 协议版本1.x和2.x,2.x更安全。了解SSH协议原理
- 服务端ssh远程连接服务,sftp服务,sshd守护进程,开机要自启动
- ssh客户端包含ssh,scp,sftp命令
- ssh安全验证方式:口令和密钥,这两种都是基于口令的,SSH密钥登陆的原理
- ssh服务安全优化,修改默认端口22,禁止远程root连接,禁止DNS,ssh只监听内网IP
- SSH密钥对,公钥(Public key)在服务器端,比喻就是锁头。私钥(private key)在客户端,比喻就是钥匙
2、批量管理:
在工作中我们所有的机器名和IP地址都要对应到/etc/hosts 文件里
然后通过批量分发给各个机器

浙公网安备 33010602011771号