基础命令学习目录
SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。
ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序)
ssh的客户端可以用 XSHELL,Securecrt, Mobaxterm等工具进行连接
SSH的工作机制
服务器启动的时候自己产生一个密钥(768bit公钥),本地的ssh客户端发送连接请求到ssh服务器,服务器检查连接点客户端发送的数据和IP地址,确认合法后发送密钥(768bits)给客户端,此时客户端将本地私钥(256bit)和服务器的公钥(768bit)结合成密钥对key(1024bit),发回给服务器端,建立连接通过key-pair数据传输。
SSH的加密技术
加密技术:传输过程,数据加密。
1.SSH1没有对客户端的秘钥进行校验,很容易被植入恶意代码
2.SSH2增加了一个确认联机正确性的Diffe_Hellman机制,每次数据的传输,Server都会检查数据来源的正确性,避免黑客入侵。
SSH2支持RSA和DSA密钥
DSA:digital signature Algorithm 数字签名
RSA:既可以数字签名又可以加密
SSH知识小结
1.SSH是安全的加密协议,用于远程连接Linux服务器
2.SSH的默认端口是22,安全协议版本是SSH2
3.SSH服务器端主要包含2个服务功能SSH连接和SFTP服务器
4.SSH客户端包含ssh连接命令和远程拷贝scp命令等
如何防止SSH登录入侵
1.密钥登录,更改端口
2.牤牛阵法
3.监听本地内网IP(ListenAddress 192.168.25.*)
SSH功能大全
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
1.登录
2.直接执行命令 -->最好全路径
3.查看已知主机
cat
/root/
.
ssh
/known_hosts
4.
ssh
远程执行
sudo
命令
5.
scp
1.功能 -->远程文件的安全(加密)拷贝
2.
scp
知识小结
scp
是加密远程拷贝,
cp
为本地拷贝
可以推送过去,也可以拉过来
每次都是全量拷贝(效率不高,适合第一次),增量拷贝用
rsync
6.
ssh
自带的
sftp
功能
1.Window和Linux的传输工具
wincp filezip
sftp
-->基于
ssh
的安全加密传输
samba
2.
sftp
客户端连接
put
/etc/hosts
/tmp
get
/etc/hosts
/home/omd
3.
sftp
小结:
2.put加客户端本地路径上传
3.get下载服务器端内容到本地
4.远程连接默认连接用户的家目录
|
ssh常见命令参数
1
2
3
4
5
6
7
|
usage:
ssh
[-1246AaCfgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-W host:port] [-w local_tun[:remote_tun]]
[user@]
hostname
[
command
]
|
关于后台ssh服务的相关
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
# 查询openssl软件
rpm -qa openssh openssl
# 查询sshd进程
ps
-ef |
grep
ssh
-->
/usr/sbin/sshd
# 查看ssh端口
netstat
-lntup |
grep
ssh
ss |
grep
ssh
(效果同上,同下,好用)
netstat
-a |
grep
ssh
(记住这个)
netstat
-lnt |
grep
22 ==> 查看22端口有没有开
/ssh
服务有没有开启
技巧:
netstat
-lnt |
grep
ssh
|
wc
-l -->只要大于2个就是
ssh
服务就是好的
# 查看ssh的秘钥目录
ll
/root/
.
ssh
/known_hosts
# 当前用户家目录的.ssh目录下
# ssh的配置文件
cat
/etc/ssh/sshd_config
# ssh服务的关闭
service sshd stop
# ssh服务的开启:
service sshd start
# ssh服务的重启
service sshd reload [停止进程后重启] ==> 推荐
service sshd restart [干掉进程后重启] ==> 不推荐
# ssh远程登录
ssh
192.168.1.100
# 默认利用当前宿主用户的用户名登录
|
ssh免密设置
1、进入用户的家目录
1
2
|
[root@localhost ~]
# cd /root/.ssh/ 【root用户就在root目录下的.ssh目录】
[root@localhost ~]
# cd /home/omd/.ssh/ 【普通用户就是在家目录下的.ssh目录】
|
2、根据DSA算法生成私钥和公钥【默认建立在当前用户的家目录】
1
2
3
|
[root@localhost .
ssh
]
# ssh-keygen -t dsa # 一路回车即可
id_dsa -->私钥(钥匙)
id_dsa.pub -->公钥(锁)
|
3.拷贝公钥给目标服务器
1
2
|
|
4. 查看目标服务器生成的文件
1
|
[omd@localhost .
ssh
]$ ll
/home/omd/
.
ssh
/authorized_keys
|
5. 免密码登录目标服务器
1
|
6. 总结一下钥匙和锁的关系
1
2
3
4
5
6
|
1.多个钥匙开一把锁
把id_dsa.pub 复制给各个服务器
2.一个钥匙开duobasuo
把id_dsa 传给各个服务器
把id_dsa 传给自己
|
ssh排查问题
1
2
3
|
1.判断物理链路是否通
ping
192.168.25.130 线路 | 防火墙 | 是否同一个网的
ping
本身是icmp协议
2.判断服务是否正常
|
1
|
telnet 192.168.25.130 22
|
1
|
3.Linux防火墙
|
1
|
service iptables status ==>
/etc/init
.d
/iptables
status
|
1
|
4.打开
ssh
的调测进行观察
|
1
|
ssh
-vvv [email protected]
|
SSH批量分发与管理方案小结
1.利用root做ssh key验证
优点:简单,易用
缺点:安全性能差,无法禁止root远程连接
2.利用普通用户omd -->推荐
思路:把要分发的文件拷贝到服务器用户的家目录,然后利用sudo提权拷贝分发的文件和对应目录
优点:安全
缺点:复杂,配置麻烦
1.sudo提权
echo 'omd All=(All) NOPASSWD:/usr/bin/rsync' >> /etc/sudoers
visudo -c
grep omd /etc/sudoers
2.ssh分发到服务器的家目录
ssh -p22 -r /etc/hosts [email protected]:~
3.ssh使用sudo复制到目标服务器的/etc
ssh -t [email protected] sudo rsync hosts /etc/
3.拓展方案2,不用sudo,而是设置suid对固定命令提权
优点:相当安全
缺点:复杂,安全性较差,任何人都可以处理带有suid权限的命令
1.which rsync
2.chmod 4755 /usr/bin/rsync
ssh章节小结
1.ssh远程的加密连接协议,相关软件openssh,openssl
2.默认端口22
3.ssh版本协议
4.服务器ssh连接,ftp连接,sshd守护进程,开机启动
5.ssh客户端重要命令:ssh(用户登录&&远程命令),scp,sftp,
6.安全验证方式:口令,密钥 学习原理
7.ssh服务优化:改端口,改监听,no root,no empty,no DNS,
8.ssh密钥对,公钥在服务器端,私钥在客户端
修改ssh服务的启动文件sshd的几个点
1
2
3
4
5
6
7
8
9
10
11
12
|
1-1修改
/etc/ssh/sshd_config
yes
解决一台服务器管理多个
ssh
服务
UseDNS no 加快响应速度因为在内网环境下
PermitRootLogin no 不运行root用户直接登录
Port 11544 更改访问端口号
ListenAddress 192.168.25.130 只监听内网的IP
Match User anoncvs 当前环境允许登录的用户
PermitRootLogin no 是否允许root用户登录,一般不允许开
1-2重启服务
service sshd restart 写入命令进内存
service sshd reload(优先) reload是一个平滑的访问,不影响用户使用
1-3查看连接端口
netstat
-an |
grep
EST
|
SSH跳过HostKeyChecking,不用输入yes
SSH跳过输入ssh跳过RSA key fingerprint输入yes/no
在配置大量的节点之间需要ssh连通的时候,如果自动复制很多节点,都需要输入yes,两两节点之间都要互通一次,这样会造成很大的麻烦
解决1;修改配置文件/etc/ssh/ssh_config
1
2
|
找 到 # StrictHostKeyChecking ask
修改为:StrictHostKeyChecking
no
|
解决2: 添加参数 –o 【o=option】
1
|
ssh [email protected] -o
"StrictHostKeyChecking no"
|
1
|
scp -o
"StrictHostKeyChecking no"
newfile.txt
|
ssh带密码登录之sshpass的安装
【下载地址】https://sourceforge.net/projects/sshpass/files/latest/download
上传文件到服务器
CentOS下安装:
1
2
3
4
|
[root@localhost ~]# tar xf sshpass-1.06.tar.gz
[root@localhost ~]# cd sshpass-1.06
[root@localhost sshpass-1.06]# ./configure
[root@localhost sshpass-1.06]# make && make install
|
检查是否安装成功:
1
2
|
[root@localhost sshpass-1.06]# which sshpass
/usr/
local
/bin/sshpass
|
远程登录主机:
1
|
sshpass -p FTL600@HH ssh [email protected] -o
"StrictHostKeyChecking no"
|
注意:如果是第一次登录,需要输入手动yes,此时sshpass并不会给提示,所以登录异常
Ubuntu下安装方法一[推荐]:简单
1
|
omd@omd-virtual-machine:~/sshpass-1.06$ sudo apt install sshpass
|
安装成功:
1
|
omd@omd-virtual-machine:~/sshpass-1.06$ which sshpass
|
Ubuntu下安装方法二:
1
2
3
4
5
|
omd@omd-virtual-machine:~$ tar xf sshpass-1.06.tar.gz
omd@omd-virtual-machine:~$ cd sshpass-1.06/
omd @omd-virtual-machine:~/sshpass-1.06$ ./configure
omd@omd-virtual-machine:~/sshpass-1.06$ sudo make && make install
其同CentOS下安装
|
ssh源码修改添加ssh访问标志位
【更多参考】https://www.cnblogs.com/ftl1012/p/9459819.html
附ssh的配置文件
1
|
/etc/ssh/sshd_config
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
|
[root@localhost .
ssh
]
# cat /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.
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::
# 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
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys
#AuthorizedKeysCommand none
#AuthorizedKeysCommandRunAs nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication
yes
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes
# GSSAPI options
#GSSAPIAuthentication no
GSSAPIAuthentication
yes
#GSSAPICleanupCredentials yes
GSSAPICleanupCredentials
yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
#UsePAM no
UsePAM
yes
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
X11Forwarding
yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
#UseDNS yes
#PidFile /var/run/sshd.pid
#MaxStartups 10
#PermitTunnel no
#ChrootDirectory none
# no default banner path
#Banner none
# override default of no subsystems
Subsystem
sftp
/usr/libexec/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# ForceCommand cvs server
|
前言
一、ssh命令
1、Ssh参数解释
2、如何连接远程主机
3、利用Xstart 在windos上连接linux桌面
4、ssh客户端配置文件
二、基于密钥认证登录
1、在客户端生成密钥对
2、把公钥文件传输至远程服务器对应用户的家目录
3、查看已传输到远程主机上文件
4、验证代理
三、ssh端口转发
什么是SSH端口转发?
1、本地端口转发
2、远程转发
3、动态端口转发
4、ssh服务器端配置文件
四、ssh服务的最佳实践
前言
Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。
传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口
令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器
的数据,然后再冒充用户把数据传给真正的服务器。而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH
协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为
FTP、POP、甚至为PPP提供一个安全的“通道”。 『维基百科』
一、ssh命令
1、ssh参数解释
格式;
ssh [user@]host [command]
选项:
-1:强制使用ssh协议版本1;
-2:强制使用ssh协议版本2;
-4:强制使用IPv4地址;
-6:强制使用IPv6地址;
-A:开启认证代理连接转发功能;
-a:关闭认证代理连接转发功能;
-b:使用本机指定地址作为对应连接的源ip地址;
-C:请求压缩所有数据;
-F:指定ssh指令的配置文件;
-f:后台执行ssh指令;
-g:允许远程主机连接主机的转发端口;
-i:指定身份文件;
-l:指定连接远程服务器登录用户名;
-N:不执行远程指令;
-o:指定配置选项;
-p:指定远程服务器上的端口;
-q:静默模式;
-X:开启X11转发功能;
-x:关闭X11转发功能;
-y:开启信任X11转发功能。
2、如何连接远程主机
[root@centos7_1 /]# ssh 172.16.252.16
[email protected]'s password:
Last login: Fri Dec 2 09:20:53 2016 from station16.magelinux.com
[root@Centos6_1 ~]#
3、利用Xstart 在windos上连接linux桌面
Xstart (和xshell一样是Xmanager其中的一个组件)
选择第7项 GNOME
输入密码即可
4、ssh客户端配置文件
/etc/ssh/ssh_config 是客户端配置文件
/ect/ssh/sshd_config 是服务器端配置文件
二、基于密钥认证登录
1、在客户端生成密钥对
2、把公钥文件传输至远程服务器对应用户的家目录
3、查看已传输到远程主机上文件
authorized_keys 这个文件就是刚刚传输的文件至于为什么名字变了这就是ssh-copy-id的原因了,如果用scp来传文件的是不会出现这种效果的这也是为什么刚刚用ssh-copy-id这条命令的原因,这条命令是专门为ssh设定的,具体的内容可以自己查询。
如果从其他方式将公钥拷贝到该目录下,只需将公钥中内容复制到authorized_keys中即可。
4、验证代理
这样以后在登陆的时候就不用输入密码了。
三、ssh端口转发
什么是SSH端口转发?
SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来
转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”( tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安
全的通道来进行传输而得名。例如, Telnet, SMTP, LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传
输。而与此同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH
进行通讯。
SSH 端口转发能够提供两大功能:
加密 SSH Client 端至 SSH Server 端之间的通讯数据
突破防火墙的限制完成一些之前无法建立的 TCP 连接
1、本地端口转发
主机A 地址 172.16.250.90/16
主机B 地址 172.16.33.166/16
主机C 地址 172.16.250.240/16 (mysql 服务器)
以上有主机A、B、C三台服务器现在A要求访问C的mysql服务但是因为各种原因暂时无法访问(你可以把它理解为三台主机并联不同
网段,由于我是实验环境所有没有设置不同网段所以各位见谅),但现在主机B可以访问,要求利用ssh的端口转发实现(iptables端口映射
也是可以实现的。)
注意:在做下面的实验时请把防火墙关掉(当然你如果不怕麻烦又可以自己配置iptables则另当别论)。
在主机A上执行以下命令:
Sshl -L 13306:172.16.250.240:3306 [email protected]
以上命令的意思是绑定本地(主机A)的13306端口,然后指定主机B将所有的数据转发到目的主机C的3306端口。(如上命令只能是绑
定主机A的环回地址)
如果此时远程连接主机A的windows主机想连接主机C的mysql服务如下图所示:
Windows 主机地址 172.16.251.16
则在主机A执行以下命令:
ssh –L 172.16.250.90:13306:172.16.250.16:3306 [email protected]
此时windows主机即可访问主机C的mysql服务。
2、远程转发
还是看上面的例子,如果此时主机B是一台内网地址,主机B可以连接主机A,相反主机A却不能连接主机B,所以此时本地端口转发就
不能用了。
解决办法是,主机B主可以连接主机A如此先让主机B连接主机A,在让主机A利用这条连接去做端口转发,便可以实现主机A连接主机C。
在主机B上执行以下命令:
ssh –R 13306:172.16.250.16:3306 172.16.250.90
以上命令R参数接收3个值,分别为远程主机端口:目标主机:目标主机端口。意思是让主机A监听它的13306端口,然后所有数据进
过主机B转发到主机C的3306端口,对于主机B来说主机A为远程端口,所以此种方法被称为“远程端口转发”.
3、动态端口转发
假设此时需要FQ访问facebook等网站,但现在没有好的FQ软件恰巧你有一台国外的虚拟主机主机B此时只需在主机A上做一个动
态端口转发即可。
在主机A上执行以下命令
Ssh –L 8080 [email protected]
此时只需在浏览器中配置主机A的ip地址为代理服务器则即可访问facebook。
4、ssh服务器端配置文件
配置文件 /ect/ssh/sshd_config
常用参数:
Port # 可修改ssh访问端口
ListenAddress ip #监听IP
PermitRootLogin yes #是否允许ssh远程登录root帐号
ClientAliveInterval 0 #客户端连接数
UseDNS yes #DNS解析
限制可登录用户的办法:
AllowUsers user1 user2 user3 #允许ssh登录用户
DenyUsers #禁止ssh登陆用户
AllowGroups #允许ssh登录用户组
DenyGroups ##禁止ssh登陆用户组
四、ssh服务的最佳实践
1、不要使用默认端口
2、禁止使用protocol version 1
3、限制可登录用户
4、设定空闲会话超时时长
5、利用防火墙设置ssh访问策略
6、仅监听特定的IP地址
7、基于口令认证时,使用强密码策略
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
8、使用基于密钥的认证
9、禁止使用空密码
10、禁止root用户直接登录
11、限制ssh的访问频度和并发在线数
12、做好日志,经常分析
连接到远程主机
# ssh [email protected] // 默认连接到目标主机的tcp 22端口1
连接到其他ssh端口
# ssh -p 10022 [email protected]
连接到远程主机,并执行一条命令
# ssh [email protected] ls -l1
在ssh命令后面,直接加上在远程主机上要执行的命令。
# ssh -v [email protected]
-v参数追踪调试建立的SSH连接,可以看到在哪个环节出了问题。
# ssh -C [email protected]
所有通过ssh发送或接收的数据将会被压缩,并且仍然是加密的。
如果你的ssh客户端有多于两个以上的IP地址,可以使用-b选项来指定一个IP地址。这个IP将会被用做建立连接的源地址。
查看是否已经添加了对应主机的ssh密钥
# ssh-keygen -F 192.168.1.1201
删除对应主机的ssh访问密钥
# ssh-keygen -R 192.168.1.1201
也可以在主机的~/.ssh/known_hosts文件中手动删除公钥。
2. 参考文章
---------------------
作者:Locutus
来源:CSDN
原文:https://blog.csdn.net/yjk13703623757/article/details/80573345
版权声明:本文为博主原创文章,转载请附上博文链接!
-------------------------------------------
个性签名: 所有的事情到最後都是好的,如果不好,那說明事情還沒有到最後~
本文版权归作者【小a玖拾柒】和【博客园】共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利!