服务器1之-----ssh


       #终于开始记录总结服务器了,由于经常用到sshd,也是服务器中相对简单的一个,学起来也轻松,所以整理成博客,有问题指出哦

一:相关知识解释

先说一下ssh和sshd:ssh 是客户端
                                      sshd 是服务器端

ssh: 远程主机通过ssh协议连接sshd软件,从而在远程主机开启一个bash,简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露

ssh协议:为建立在应用层基础上的安全协议,转为远程登陆会话和其他网络服务提供安全性的协议 利用ssh协议可以有效防止远程管理过程中的信息泻漏ssh由三部分组成:
传输层协议:提供了服务器认证,保密性,完整性,压缩功能,通常运行在tcp/ip连接上,该协议的认证基于主机,并且该协议不执行用户认证,更高层的用户认证协议可以设计在此协议之上
用户认证协议:用于向服务器提供客户端用户鉴别功能,运行在传输层协议上当用户认证协议开始后,他从底层协议那里接受会话标志符(从第一次密钥交换中的交换哈希h),会话标志符唯一标识此会话并且适用于标记以证明私钥的所有权
连接协议:将多个加密隧道分成逻辑通道,他们运行在用户认证协议上,它提供了交互式对话路,远程命令执行,转发tcp/ip连接和转发x11 连接
功能:传统的网络服务程序,如ftp,pop,和telnet 在本质上都是不安全的,因为他们在网络上用明文传送口令和数据,而且这些服务程序的安全验证方式也是有弱点的。容易受到中间人的攻击,中间人意思就是冒充真正服务器接受你传给服务器的数据,通过中间人做手脚,那么文件安全性遭到破坏 但是通过ssh 可以将传输的文件加密,使用ssh 还有一个好处是数据是压缩的,所以可以加快传输的速度
验证:口令的安全验证  密钥验证

sshd的安装:SSH分客户端openssh-client和服务端openssh-server,客户端通过ssh命令连接服务端

二:两种验证登陆方式

1:口令的安全验证##########

ssh    远程主机用户@远程主机ip
ssh 远程主机用户@远程主机ip -X                ##调用远程主机图形工具
ssh     远程主机用户@远程主机ip        command        ##直接在远程主机运行某条命令

如果本地用户名与远程用户名一致,登录时可以省略用户名。

SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。

$ ssh -p 2222 user@host

上面这条命令表示,ssh直接连接远程主机的2222端口。


如果你是第一次登录对方主机,系统会出现下面的提示:
      这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。  

[kiosk@foundation67 Desktop]$ ssh root@172.25.254.1
The authenticity of host '172.25.254.1 (172.25.254.1)' can't be established.
ECDSA key fingerprint is eb:24:0e:07:96:26:b1:04:c2:37:0c:78:2d:bc:b0:08.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.25.254.1' (ECDSA) to the list of known hosts.
root@172.25.254.1's password: 
Last login: Sun Jul 23 01:46:13 2017

如果密码正确,就可以登录了。
当远程主机的公钥被接受以后,它就会被保存在文件/root/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

2:密钥验证################

生成公钥私钥

ssh-keygen

[root@foundation67 .ssh]# ssh-keygen                      ##生成公钥私钥工具
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):  ##加密字符保存文件(建议用默认)如果输入密
码,则在使用密钥连接时还需密码
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
d6:db:ae:d1:95:0d:39:6c:3b:a8:97:59:91:3a:4a:06 root@foundation67.ilt.example.com
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|                 |
|             . o |
|        E     O  |
|         o   + B |
|        S + + * .|
|       . o * * . |
|          = *    |
|           +     |
|          ...    |
+-----------------+
ls /root/.ssh/                 #查看存放密钥文件目录
id_rsa  id_rsa.pub
id_rsa        ##私钥,就是钥匙
id_rsa.pub    ##公钥,就是锁

上锁给server:

[root@foundation67 .ssh]# ssh-copy-id -i id_rsa.pub root@172.25.254.1
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.25.254.1's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@172.25.254.1'"
and check to make sure that only the key(s) you wanted were added.

发钥匙给client:

scp /root/.ssh/id_rsa root@172.25.254.2:/root/.ssh/

测试:

[root@foundation2 .ssh]# ssh root@172.25.254.1
Last login: Sun Jul 23 01:48:45 2017 from 172.25.254.67           #不需要密码,直接使用密钥
[root@localhost ~]#

ssh_config和sshd_config的区别?

ssh_config和sshd_config都是ssh服务器的配置文件,二者区别在于,前者是针对客户端的配置文件,后者则是针对服务端的配置文件。两个配置文件都允许你通过设置不同的选项来改变客户端程序的运行方式

三:提升ssh登陆级别
1:通过sshd服务端配置文件进行修改(针对服务器端的用户)

/etc/ssh/sshd_config
78 PasswordAuthentication yes|no        ##是否开启用户密码认证,yes为支持no为关闭
48 PermitRootLogin yes|no            ##是否允许超级用户登陆
2:白名单和黑名单(针对于客户端ip)

vim /etc/hosts.deny
~~~~
sshd:ALL      #拒绝所有人连接sshd服务
~~~~
vim /etc/hosts.allow
~~~~
sshd:172.25.254.20  #允许250连接sshd服务


sshd:172.25.254.20, 172.25.254.120  #允许20和120连接sshd服务

sshd: ALL EXCEPT 172.25.254.200    #只不允许200
~~~~
注:白名单优先级更高

3.ssh登陆提示
vim /etc/motd                                 ##用来显示登陆后的字符
~~~~~~~
随便写:可以写入登陆此用户/ip的介绍等
~~~~~~~

四:远程同步文件

scp/rsync  root@ip:/需要拷贝的文件 /本机地址
scp/rsync /本地文件地址  root@ip:/对方地址


1:scp:scp是 secure copy的缩写, scp是linux系统下基于ssh登陆进行安全的远程文件拷贝命令。linux的scp命令可以在linux服务器之间复制文件和目录.
scp命令的用处:
scp在网络上不同的主机之间复制文件,它使用ssh安全协议传输数据,具有和ssh一样的验证机制,从而安全的远程拷贝文件。
2:rsync:rysnc是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能。
rsync   -r   ##同步目录
rsync   -l   ##同步包含链接
rsync   -p   ##同步文件权限
rsync   -t   ##同步文件时间戳
rsync   -g   ##同步文件

五:ssh的转发

绑定本地端口

既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性
假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:

$ ssh -D 8080 user@host

SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。

本地端口转发

有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。
假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
我们在host1执行下面的命令:

$ ssh -L 2121:host2:21 host3

命 令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121, 然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。

$ ftp localhost:2121

"本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。

远程端口转发

此项暂时未农明白,后续更