新版的OpenSSH客户端修改了指纹Hash方式,例如:

# ssh 192.168.10.229 -p 2222 -l root
The authenticity of host \'[192.168.10.229]:2222 ([192.168.10.229]:2222)\' can\'t be established.
ECDSA key fingerprint is SHA256:TosANrD9LxFcgw4i9u1dE837g2LnGabdNXXpjz7USKw.
Are you sure you want to continue connecting (yes/no)?

如果我们服务端不支持生成TosANrD9LxFcgw4i9u1dE837g2LnGabdNXXpjz7USKw这样的指纹,那么我们就无法做对比了(无法确认是否有中间人攻击)。一个妥协的方法,是让客户端以旧版md5方式产生证书的Hash,命令如下:

# ssh 192.168.10.229 -p 2222 -l root -o FingerprintHash=md5
The authenticity of host \'[192.168.10.229]:2222 ([192.168.10.229]:2222)\' can\'t be established.
ECDSA key fingerprint is MD5:dd:7d:0e:71:f0:2b:6a:87:89:d3:63:1c:2d:61:11:0c.
Are you sure you want to continue connecting (yes/no)?

这样就与服务端ssh-keygen -lf xxx.pub生成的指纹格式一样了。

本文转载自水景一页

CentOS 7 已经切换到 systemd,系统指令也有所变化。之前用于启动、重启、停止各种服务的 service 作为向后兼容的指令还能使用,但是将来可能会消失。同时,chkconfig 也改成了 systemctl 了。这里列举了一些常用的对应于 service 和 chkconfig 的新的 systemctl 指令。

在目前的 CentOS 7(或 RHEL 7)系统中,依然可以使用 service 指令。例如,

[root@localhost ~]# service network restart
Restarting network (via systemctl):                        [  OK  ]

[root@localhost ~]# service httpd restart
Redirecting to /bin/systemctl restart  httpd.service

[root@localhost ~]# service sshd restart
Redirecting to /bin/systemctl restart  sshd.service

但是系统会自动重定向该指令到新的指令 /bin/systemctl 来执行,并给出提示。

是时候切换到新的指令格式了,直接使用 systemctl 吧。这个指令的意思就是 system contrl。下面是一些常用的例子:

启动服务:

systemctl start httpd

停止服务:

systemctl stop httpd

重启服务(先停止,后启动):

systemctl restart httpd

重新加载(使用新的配置文件):

systemctl reload httpd

显示服务状态:

systemctl status httpd

与此同时,之前用于设定系统启动时自动运行某服务的指令 chkconfig 也改了,还是用 systemctl。

chkconfig service on

改成了,

systemctl enable httpd
chkconfig service off

改成了,

systemctl disable httpd

检查服务状态的

chkconfig service

改成了,

systemctl is-enabled httpd

列举出所有服务的指令,

chkconfig –list

改成了,

systemctl list-unit-files --type=service

以前能指定服务 runlevel 的 –levels 也没有了。慢慢适应吧。

  1. 测试磁盘写能力

    time dd if=/dev/zero of=/test.tmp bs=64k count=16k
    

    因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。

    但是这个命令得到的数据不准确,因为命令结束的时候数据还没有真正写到磁盘上去。

    time dd if=/dev/zero of=/test.tmp bs=64k count=16k conv=fsync
    

    这个还算准确,数据已经写入磁盘。

    time dd if=/dev/zero of=/test.tmp bs=64k count=4k oflag=dsync
    

    这个可以当成是模拟数据库插入操作,所以很慢。

  2. 测试磁盘读能力

    time dd if=/dev/sda1 of=/dev/null bs=8k
    

    因为/dev/sda1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,所以,这个命令的IO只发生在/dev/sda1上,也相当于测试磁盘的读能力。

  3. 测试同时读写能力

    time dd if=/dev/sda1 of=/test.tmp bs=8k
    

    这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sda1是读,对/test.tmp是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。

Cygwin下的iconv工具(在libiconv包里)不支持-o参数,只能输出到屏幕,因此网上好多方法并不能达到效果,以下是经过测试的使用方法:

for i in `find ./ -type f` ; do iconv -f GBK -t UTF-8 $i > ${i}.tmp && mv ${i}.tmp $i ; done

使用tmp文件是为了在转换失败的时候不要继续覆盖原文件。

Linux下如果/boot是独立分区,经常更新内核容易导致/boot分区空间满了。解决方法就是删除旧的内核,这里以CentOS为例。

1. 查看/boot空间

# df -h /boot

2. 查看系统正在使用的内核版本,防止删错了导致无法启动

# uname -a

3. 删除旧的内核

# rm -rf /boot/*2.6.32-279*

如果多次升级,则可能有多个版本的旧内核,注意区分,别删错了。

也可以将这些文件先转移到别的地方,防止改错后系统无法启动。

4. 修改/boot/grub/grub.conf文件,将和2.6.32-279相关的条目删除

这一步注意备份grub.conf,一旦改错了还能有后悔药。

对于所有的SSH登录来说,必须重新配置新的SSH Key,默认的Key是公共的,大家都知道,理论上不需要中间人攻击就可以破解传输的数据。
OpenWRT使用的是dropbear作为SSH服务端,因此Key的生成与OpenSSH不太一样,以下是方法:
重新生成RSA的Key:
root@Gateway:/etc/dropbear# rm dropbear_rsa_host_key
root@Gateway:/etc/dropbear# dropbearkey -t rsa -f dropbear_rsa_host_key -s 2048
重新生成DSS的Key(此Key只能是1024位):
root@Gateway:/etc/dropbear# rm dropbear_dss_host_key
root@Gateway:/etc/dropbear# dropbearkey -t dss -f dropbear_dss_host_key -s 1024
打印指定Key的MD5指纹:
root@Gateway:/etc/dropbear# dropbearkey -y -f dropbear_rsa_host_key