《SSH服务》

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《SSH服务》相关的知识,希望对你有一定的参考价值。

SSH服务

SSH介绍:
SSH是Secure Shell Protocol的简写,由IETF网络工作小组(Network Working Group)制定;在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后在进行数据传输。确保了传递的数据安全。
Ssh是专为远程会话和其他用户网络服务提供的安全性协议,代替了传统的不安全的远程联机服务,如telnet()23端口,非加密的)等;
SSH服务的主要两个功能:
1) 提供了类似telnel远程联机服务器的服务。
2) 类似于FTP服务的sftp-server,借助SSH协议来传输数据,提供更安全的SFTP(加密的FTP)服务。
注意:SSH客户端(ssh命令)还包含一个很有用的远程安全拷贝命令SCP,也是通过SSH协议工作的
小结:
1.ssh是安全气囊的加密协议,用于远程连接服务器。
2.默认端口是22,安全协议版本ssh2
3.服务端主要包含两个服务功能(1.ssh远程连接,2.SFTP功能)。
4.ssh客户端包含ssh连接命令,以及远程拷贝scp命令等。
Ssh结构:
Ssh服务由服务端软件OpenSSH和OpenSSL(负责加密的)和客户端(常见的有SSH(linux中),SecureCRT,Putty,Xshell(windows中))组成,SSH服务默认端口为22,它有两个不兼容的SSH协议版本,分别为1.x和2.x。
Ssh服务端是一个守护进程(demon),它在后台运行并响应来自客户端的请求,进程名为sshd,负责实时监听远程ssh客户端的连接请求,并进行处理,一般包括公共密钥验证、密钥交换。对称密钥加密和非安全连接等。
Ssh客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登录)、sftp(安全FTP文件传输)等应用程序。
SSH工作原理简单示意图:
技术分享图片

工作原理:(ssh1.x)
1.当ssh服务启动的时候,服务端就会自动生成一个1024字节的公钥(C5中是768),
[[email protected] ~]# grep ServerKey /etc/ssh/sshd_config
#ServerKeyBits 1024
2.当客户端请求连接时,服务端会把公钥发给客户端,客户端收到后会和之前的公钥进行比对,看是否一致,判断标准:客户端(linux)用户家目录下的known_hosts文件
[[email protected] ~]# ll ~/.ssh/
total 12
-rw-r--r--. 1 root root 794 Sep 9 04:41 known_hosts
3.客户端收到公钥会,会在本地随机产生一个公钥,然后由系统的算法,将两个公钥重新加密,生成新的公钥(密钥对),客户端再把这新的公钥发给服务端。
4.客户端发送完成后,以后就用新的公钥进行加密解密,实现数据的传递。
Ssh2.x:在一版本中,客户端将整合的密钥对发给服务端后,服务端不会再去校验密钥对,这样的话,一但密钥对被修改了,会有安全风险,所以在版本2中修复了这个缺点,增加了确定联机正确性机制(Diffie-Hellman),这样每次数据传输时,服务端都会以该机制检查数据来源的正确性,避免了联机的过程中被插入恶意程序代码的问题,所以版本2比版本1安全。
Ssh服务认证类型:
1)基于口令的安全认证:基于口令的安全认证是最常用的发那个是,需要IP,ssh服务的端口(默认22),账号及密码,联机过程中所有传输都是加密的。
[[email protected] ~]# ssh -p22 [email protected]
[email protected]‘s password:(输入远程登录用户的密码)
Last login: Sun Dec 24 15:01:29 2017 from desktop-rtg9bmp.w.mifi
2.基于密钥的安全验证:基于密钥是指需要依靠密钥,也就是必须先建立一对密钥对,然后把公钥放在需要访问的目标服务器上,;另外,还需要把私钥放到SSH客户端对应的客户端服务器上。
面试题:给一个端口查出是什么服务:
Lsof -I :端口号
Netstat -lntup| grep 端口号

查看ssh服务配置信息:
[[email protected] ~]# less /etc/ssh/sshd_config(sshd_config没d的话是客户端)

Disable legacy (protocol version 1) support in the server for new

installations. In future the default will change to require explicit

activation of protocol 1

Protocol 2(协议版本)

查看包组:
[[email protected] ~]# rpm -qa openssh openssl
openssh-5.3p1-94.el6.x86_64
openssl-1.0.1e-15.el6.x86_64
查看进程:
[[email protected] ~]# ps -ef|grep sshd
root 1210 1 0 15:01 ? 00:00:00 /usr/sbin/sshd
root 1330 1210 0 15:01 ? 00:00:00 sshd: [email protected]/0
root 1391 1362 0 15:06 pts/0 00:00:00 grep sshd
客户端远程服务器:
[[email protected] ~]# ssh -p22 [email protected]
[email protected]‘s password:
Last login: Wed Sep 6 23:47:40 2017 from 192.168.116.129

[[email protected] ~]# ssh -p22 [email protected] /sbin/ifconfig(远程执行命令,但执行完还在原来的客户端里面)

小结:
1.切换到别的机器 ssh -p端口号 用户名@ip地址
2.到其他机器上执行命令 ssh -p端口号 用户名@ip地址 要执行的命令(命令要全路径)
3.当第一次连接的时候,本地会产生一个秘钥文件 ~/.ssh/known_hosts

当连接服务器慢的时候将下面的yes改成no(此文件路径是/etc/ssh/sshd_config
GSSAPICleanupCredentials no

Scp命令:-P(大p)指定端口,-p(小p)保持原有文件的属性,-r递归(拷贝整个目录)
推;push 源 目标
[[email protected] ~]# scp -P22 /data/oldboy.txt [email protected]:/tmp
[email protected]‘s password:
oldboy.txt 100% 0 0.0KB/s 00:00
拉:pull 服务器 客户
[[email protected] ~]# scp -P22 [email protected]:/data/o.txt /data
[email protected]‘s password:
o.txt 100% 0 0.0KB/s 00:00
[[email protected] ~]# ll /data
total 0
-rw-r--r--. 1 root root 0 Sep 7 05:07 oldboy.txt
-rw-r--r--. 1 root root 0 Sep 7 05:13 o.txt

小结:
scp是加密的远程拷贝,可以把数据从一台机器推送的另一台机器,也可以从其他服务器把数据拉回到本地执行命令的服务器,但是,每次都是全量拷贝(rsync增量拷贝),因此,效率不高。

客户端连接sftp:
[[email protected] ~]# sftp -oport=22 [email protected]
Connecting to 192.168.116.128...
[email protected]‘s password:
sftp>

sftp> put /data/oldboy.txt
Uploading /data/oldboy.txt to /root/oldboy.txt
/data/oldboy.txt 100% 0 0.0KB/s 00:00
sftp> ls
a anaconda-ks.cfg b
eet.txt install.log install.log.syslog
oldboy.log oldboy.txt pldboy.log
zhou2 zhou3 zhou4

sftp> put /data/oldboy.txt /tmp(上传)
Uploading /data/oldboy.txt to /tmp/oldboy.txt
/data/oldboy.txt 100% 0 0.0KB/s 00:00
sftp> get /data/o.txt /data
Fetching /data/o.txt to /data/o.txt
ftp> get /data/b.txt ~
Fetching /data/b.txt to ~

sftp> get /data/b.txt(下载)
Fetching /data/b.txt to b.txt
sftp> get /data/b.txt /tmp
Fetching /data/b.txt to /tmp/b.txt

小结:
1.sftp -oPort=端口号 用户名@ip地址
2.上传put加客户端本地路径,也可以指定路径上传。put /etc/host /tmp
3.下载get服务端的内容,下载到本地的当前目录。

全篇小结:
1.ssh加密的远程连接协议。openssh,openssl
2.默认端口22
3.1.x,2.x,2安全。
4.ssh远程连,sftp服务.ssd守护进程开机要自启动
5.ssh客户端包含ssh命令,scp,sftp
6.ssh安全验证:口令和密钥,这两种都是基于用户.
7.安全优化,修改默认端口,禁止root远程连接。
8.公钥(public key),服务器端,私钥(private key),客户端。

ssh-keygen -t dsa 中-t参数指建立密钥的类型,这里指建立的dsa类型,也可以执行ssh-keygen -t rsa建立rsa类型。
Rsa和dsa区别:
Rsa:是一种加密算法,是由Ron Rivest、Adi Shamir和Leonard Adleman这三个人名字的第一个字母连接起来。
Dsa:就是数字签名算法的英文全称的简写,即Digsital Signature Algorithm,rsa既可以进行加密也可以进行数字签名认证,而dsa只能用于数字签名从而实现认证。

[[email protected] ~]$ ssh-keygen -t dsa(创建dsa类型的密钥)
[[email protected] ~]$ ll ~/ -al
total 24
drwx------. 3 wangwu wangwu 4096 Sep 8 02:47 .
drwxr-xr-x. 3 root root 4096 Sep 8 02:33 ..
-rw-r--r--. 1 wangwu wangwu 18 Jul 18 2013 .bash_logout
-rw-r--r--. 1 wangwu wangwu 176 Jul 18 2013 .bash_profile
-rw-r--r--. 1 wangwu wangwu 124 Jul 18 2013 .bashrc
drwx------. 2 wangwu wangwu 4096 Sep 8 02:48 .ssh
[[email protected] ~]$ ll .ssh/
total 8
-rw-------. 1 wangwu wangwu 668 Sep 8 02:48 id_dsa(私钥)
-rw-r--r--. 1 wangwu wangwu 602 Sep 8 02:48 id_dsa.pub(公钥)

分发公钥:
[[email protected] ~]$ ssh-copy-id -i .ssh/id_dsa.pub [email protected](普通分发)(特殊端口用“-p 端口号 [email protected]”)
The authenticity of host ‘192.168.116.128 (192.168.116.128)‘ can‘t be established.
RSA key fingerprint is cd:ea:05:cb:65:e2:88:76:96:9d:81:ea:39:f9:c2:07.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.116.128‘ (RSA) to the list of known hosts.
[email protected]‘s password:
Now try logging into the machine, with "ssh ‘[email protected]‘", and check in:

.ssh/authorized_keys(表示成功)

to make sure we haven‘t added extra keys that you weren‘t expecting.

脚本批量分发:
[[email protected] ~]$ vi fenfa.sh
if [$# -ne 1 ]
then
echo "/bin/sh $0 argl"
exit 1
fi

for n in 128 131
do
scp -P22 $1 [email protected]$n:~
done
脚本批量查看信息:
[[email protected] ~]$ vi chakan.sh
for n in 128 131
do
ssh -p 22 [email protected]$n $1
done

[[email protected] ~]$ sh chakan.sh "/usr/bin/free"
total used free shared buffers cached
Mem: 1004412 99060 905352 0 9772 28156
-/+ buffers/cache: 61132 943280
Swap: 1023992 0 1023992
total used free shared buffers cached
Mem: 1004412 164708 839704 0 10476 45692
-/+ buffers/cache: 108540 895872
Swap: 1023992 0 1023992

ssh批量分发与管理方案小结:
1.利用root做ssh key验证。
优点:简单,易用。
缺点:安全差,同时无法禁用root远程连接。
企业应用:80%的企业。
2.利用普通用户如oldboy来做,思路是先把分发的文件拷贝到服务器用户家目录,然后sudo提权拷贝到服务器的对应权限目录。
优点:安全
缺点:配置复杂
3.扩展:同方案2,只是不用sudo,而是设置suid对固定命令提权。
优点:相对安全
缺点:复杂,安全性较差。任何人都可以处理带有suid权限的命令。
建议:追求简单,选1.安全建议,选2

企业级生产场景批量管理,自动化管理方案:
1.最简单最常用ssh key。功能最强大的。一般中小型企业会用,50-100台以下。
2.sina cfengine较早的批量管理工具,复杂,笨重。
3.门户级别比较流行的,puppet批量管理工具,复杂,笨重。
4.saltstack批量管理工具,特点:简单,功能强大(配置复杂)。
5.http+crontab

以上是关于《SSH服务》的主要内容,如果未能解决你的问题,请参考以下文章

ssh服务

关闭ssh后,服务依旧运行

ubuntu如何开启ssh服务

SSH服务审计工具ssh-audit

如何开启ubuntu的SSH服务

ssh怎么连接服务器