新版的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生成的指纹格式一样了。

  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是写),假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力。