ssh 无密码验证

    使用SSH也不是绝对安全的,因为不可能阻止别人暴力破解你的密码。如果密码过于简单,那更容易被攻击了。

    保护主机安全是使用VPS的必修课。大多数时候,我们都使用SSH来管理系统。这时如果密码很长很复杂,谁都不乐意,不仅是登录,每次sudo都要打密码(我可不会用root裸奔)。所以较好的解决方案是使用不那么复杂的密码,而登录不输密码。两全其美。

    1. 生成ssh密钥对:  ssh-keygen -t rsa
      默认key目录是~/.ssh   其中id_rsa是私钥不可以公开,id_rsa.pub是公钥可以随意公开,然后也是需要传给目标服务器的。
      cpu7
    2. 将公钥加入目标主机的~/.ssh/authorized_key
      这里方法就好多了,最简单的是先ssh过去,然后vim ~/.ssh/authorized_key,再粘帖。不管这么低端的,来几个酷炫的。 

      • scp -P 22 ~/.ssh/id_rsa.pub [ip]:id_rsa.pub然后再ssh到目标主机,执行 cat id_rsa.pub >> ~/.ssh/authorized_key
        还是麻烦啊。
      • cat ~/.ssh/id_rsa.pub | ssh -p 22 user@ip "cat >> ~/.ssh/authorized_keys"
        好了,输完密码就能成功配置,下次ssh就不需要再打密码了。这个方法牛X啊,ssh居然还有这种用法,完全不知道啊。
      • ssh-copy-id -p 22 user@ip  最简单的。。。

    到此,目标主机已经不用输密码就可以登录了。然后还有一些技巧可以提高安全性。修改ssh配置文件:

  1.  修改ssh的默认端口,默认为Port 22,可以修改为其他的,以后登录时加上-p 或者 -P
  2. 不允许密码登录。PasswordAuthentication no     (要时刻备份密钥,否则没了就跪了)
  3. 不允许root登录。PermitRootLogin no
  4. 上面是基本的,还有其他的自己适当调整

    另外android也有很好的ssh客户端,叫server auditor,支持无密码登录内置key生成工具,可以试一试,也可以防止丢了一个私钥,做个备份。

    参考链接:

CPU MEM 画曲线

      在编程时突然想到为什么CPU会满负荷,我怎么样才能控制CPU的利用率? 感觉很有意思,我一开始是这么想的,CPU利用率跟运算类型有关,比如INT操作比float操作更费CPU。经过实验,基本没区别,看来跟这个没有关系。然后就应该是空闲时间的原因了。

       还有一个问题是现在CPU都是多线程的,操作系统会自动调度到不同线程上去,所以就算画出来效果也不是很好。还好操作系统有库让我自定义调度到哪个线程或者说那个CPU核。具体操作:

 

      关于sched具体操作,自行man:

  •       man sched.h
  •       man sched_setaffinity
  •       man cpu_set

 

      这个问题比较容易,现在已经可以试着画方波了。

 

cpu1

 

      接下去画了一下sin的,不太标准,有些问题没有解决,代码不贴,直接上图:

cpu4

      内存理论上来说比CPU简单,但是由于内存分配和释放需要一定时间,所以图像不是很准确,主要思想是运用malloc 和 free。实验中发现光malloc系统是没有真正分配内存的,只有memset或者赋值的时候,才会显示真正分配。下面来一张比较搓的图。

mem

“goto” in kernel

     Rules are for the guidance of wise men, and the obedience of fools.

————-   Douglas Bader

     很多教材上都强调不要使用goto,会让程序混乱逻辑不清。我突发奇想测试一下linux内核里有没有goto。方法:

grep goto * -r | wc -l

       在kernel 3.11.1中有110139个记录,我就吓了一跳。难道kernel的维护人员不知道这个常识。于是就搜索,发现早就有人提出过这个问题了。在linux today 一篇文章中就对此进行了讨论。

        其中有一句话让人幡然醒悟,”Rules are for the guidance of wise men, and the obedience of fools.” 规则指导智者,愚人服从规则。我是个愚人。看看上面的解释说:

 “No gotos” is a rule that makes sense in most circumstances. Great for protecting novices from shooting themselves in the foot. But to give another quote,

“The professional knows when to break the rules”. From my photography, I know that accidentally breaking the rules usually produces crap shots – stuff by people I call “snappers”. But deliberately breaking the rules can produce spectacular results.

 

       这个评论者很风趣,经常用俗语。他没有否定不能用goto的说法。但是不是一定不能用,“专业的知道什么时候该打破规则”.就像摄影一样,不小心打破规则就会出烂片,适时故意打破规则可以拍到惊艳的照片。果然我还是too naive.

      那么 什么时候该用goto呢?这个问题就好解决了,因为我已经知道goto是可以用的,而这个问题的由来是linux内核里出现很多goto,而linux内核是最牛的人在维护。那就直接看源码好了。下面的是随便截了一段代码。

 

       可以清晰的看出,goto在c语言中就是用来处理异常的。goto就非常方便,无需一步步退出反而让程序逻辑不清。大概就是这个意思。另外最近看了一点点汇编,发现goto应该是起源于汇编。

      综上,goto可以在处理异常等类似情况下使用,而用来模拟for while就是不应该的,确实会让程序混乱。