利用SSH实现无密码登陆

Keywords: #Linux #SSH
在一般的服务器和git等认证都需要使用SSH来实现无密码认证登陆。SSH协议本身提供两个服务器功能,一个为SSH,一个为SFTP。 SSH的加密分私钥和公钥,一个主机必然生成这两个,两者配套使用,缺一不可。 公钥:提供给远程主机等进行数据加密,公开的,一般后缀为.pub 私钥:远程主机利用你的公钥加密,你就可以使用私钥解密。 公钥加密和私钥解密,每个人都应有对方的公钥才行。 无密码的登陆 客户端建立公钥和私钥 ssh-keygen -t rsa 在windows下使用putty等生成。 把客户端生成的公钥传到远程主机的~/.ssh/authorized_keys中。首先建立.ssh文件夹,权限700.然后建立authorized_keys,并把内容加入,权限644。此文件的所属和组为~账号相同。多个账号则每行写一个。

LINUX账号操作

Keywords: #Linux
查看当前所有用户组: cat /etc/group 得到 haldaemon:x:68:haldaemon mail:x:12:mail,postfix www:x:501: 分别表示 group_name:passwd:GID:user_list #GID 用户组ID,密码由于移动到 /etc/gshadow了所以只会有x 查看当前所有用户: cat /etc/passwd 得到 root:x:0:0:root:/root:/bin/bashwww:x:501:501::/home/www:/bin/bash 分别表示 username:password:UID:GID:说明栏:home目录:SHELL #UID 0为root,1~499系统账号,500~65535可登入账号 whoami 当前登录用户 finger luca #查看相关的账号登陆信息 id www #查看相关账号的组名等 uid=501(www) gid=501(www) groups=501(www) who查看当前在线用户 last查看系统登陆的账号列表信息 lastlog查看每个账号最后一次登陆的信息 用户新增管理 useradd luca #新增一个luca账号,包括在/etc/passwd,shadow,groups和/home目录下建立文件夹。这时新建的用户的用户组属于同名的新建的用户组 useradd -g mysql mysql #-g后接已建好的群组名,把新增的用户加入某群组 useradd -r apache #-r后接系统预设账号,这时其UID不会超过500且不会建立home子目录 useradd -D #查看useradd参考档 passwd #修改当前用户的密码 passwd luca #修改luca的账号密码,当前第一次建立luca账号后,需要passwd来建立密码才可用 echo "abc543CC" | passwd --stdin luca #使用管道加入密码 passwd -l luca #把luca的账号暂时lock passwd -u luca #unlock luca的账号 此外还有usermod,userdel进行操作

相似图片检测的实现

Keywords: #simhash #算法
[TOC] 上传图片的时候总有一些傻逼上传重复的,浪费空间啊。 所以加了一个MD5检测重复,但是md5哈希只要文件变了一点点就完全不同。 所以本狗就在思考一种基于内容检测的识别,能够对应缩略图,小水印,改色这样的重复检测。 首先要解决的是图像特征的提取,图像特征的维度网上方法太多了,等下再说。 我们把图像特征映射到一串hash值上,就要求对于图片key的轻微变化,反应在value上也只有对应的轻微变化。 这里我们可以使用局部敏感哈希(Local Sensitive Hashing-LSH)+ 聚类算法来实现。 不过考虑到复杂程度,可以选择一种更加简单的方法,Detecting duplicate images using Python 使用dHash+汉明距离,文中给出了一种MYSQL的搜索方法。 SELECT pk, hash, BIT_COUNT( CONV(hash, 16, 10) ^ CONV('4c8e3366c275650f', 16, 10) ) as hamming_distance FROM image_hashes HAVING hamming_distance < 4 ORDER BY hamming_distance ASC; 不过实际中却发现在进行进制转换的时候搜索结果总是有问题,MYSQL的BIT_COUNT只支持十进制, 所以在入库的时候保存为十进制,最后问题得到圆满解决,十六位的十六进制保存的最大值正好是bigint的无符号型的最大值。 simhash方案 除了上面的连接介绍的方法外,还有一种优化过的算法phash。 这儿的hash算法都是单就图片单个特征计算出的。而事实上我们还能对图片的多个特征进行计算,比如将图片里的内容识别出来,拆分成人脸,物体,然后给每个特征向量进行加权,然后合并降维处理,形成新的hash。 抽屉原理 当把许多simhash的64位二进制特征值保存到数据库的时候,可以使用上面的sql来查询相似度,但是当数量继续增长的时候,这种方法效率就不行了。 那么现在来定义一下什么才是足够相似,比如bitcount小于等于3的时候为相似,那么根据抽屉原理,最少分成四段来存放hash才能保证至少有一段hash是可以完全一致的。 我们现在把hash分成四段,每段16位。那么我们就不必全部扫描比对,只需要依次查询四段hash,直到找到其中一段完全相同为止。然后再取出相同的依次比对,找出满足条件的图片。 参考:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/06.03.md bit_count 在两两比对抑或运算后,需要使用bit_count进行统计1的个数。这儿有几种方法。这三个效率最好的是getBitCount。来源: How to fastest count the number of set bits in php? function countSetBits($int) { return substr_count(decbin($int), '1'); } function getBitCount($value) { $count = 0; while($value) { $count += ($value & 1); $value = $value >> 1; } return $count; } function NumberOfSetBits($v) { $c = $v - (($v >> 1) & 0x55555555); $c = (($c >> 2) & 0x33333333) + ($c & 0x33333333); $c = (($c >> 4) + $c) & 0x0F0F0F0F; $c = (($c >> 8) + $c) & 0x00FF00FF; $c = (($c >> 16) + $c) & 0x0000FFFF; return $c; }

Linux常见服务手动编译操作文档——Redis

Keywords: #Linux #redis
[TOC] Redis服务应用广泛,支持kv存储原子级别操作,简直是高效Web开发一根救命稻草,这个文档会作为一个健忘症的备忘录来记录redis的日常操作。 Redis服务基本安装 系统约定/usr/local/src为用户软件源码存放目录。 下载并安装 wget http://download.redis.io/releases/redis-2.8.9.tar.gz tar xzf redis-2.8.9.tar.gz cd redis-2.8.9 make 一般到/etc/sysctl.conf里添加vm.overcommit_memory=1,然后reboot,这样会允许分配所有内存。 在redis.conf中修改下列几个: daemonize yes #转为守护进程 maxmemory 256000000 #内存限制 可以把src下面的redis-*的文件都复制到bin下。 启动 redis-server redis-conf 客户端调用 redis-cli Redis的PHP客户端 目前比较常用的是Predis和phpredis,习惯上使用phpredis,使用C语言实现的PHP模块。 1. wget https://github.com/nicolasff/phpredis/archive/master.zip 2. unzip & cd 目录 phpize ./configure [–enable-redis-igbinary] #是否使用igbinary library序列化数据 make && make install 修改php.ini,添加如下内容extension=redis.so Redis数据结构 Redis存在几个基本的数据结构,string,hash,list,set,sortset。 一般来说string用于保存简单kv键值。 hash支持一个hash集中多组键值对。 list支持队列操作,而且支持BLPOP之类阻塞list,可以依此实现驻守进程后台等待和操作队列等,可以看我以前写的这个栗子。 set集合,支持添加多个不重复值到同一个key中,并且可以方便求并交集。 sortset有序集合,在set基础上,每个key中的每个值都有一个对应的分数,可用于排序,能方便应用于整站统计排名,而且能应用并交集。 Redis文档 Redis命令 Redis命令(也还不错,不如前面一个直观,都是中文的。文档中还包括事务,订阅等) Redis 设计与实现

LNMP手动编译文档

Keywords: #Linux #MISC
[TOC] 这个文档是我们小组制定的论坛搭建生产机环境文档,服务过很大一部分中国的网站,长期积累下来安全可靠。 适用于Centos 5,Centos 6的32和64位版本 一、系统约定 软件源代码包存放位置 /usr/local/src 源码包编译安装位置(prefix) /usr/local/software_name MySQL 数据库位置 /data/mysql(可按情况设置) 网站根目录 /data/wwwroot/html(可按情况设置) 日志根目录 /data/logs(可按情况设置) 运行账户 www:www 二、系统环境部署及调整 检查系统是否正常 more /var/log/messages (检查有无系统级错误信息) dmesg (检查硬件设备是否有错误信息) ifconfig (检查网卡设置是否正确) ping www.163.com (检查网络是否正常) cat /proc/cpuinfo (检查CPU频率是否正常) top (按1检测CPU核数是否正常,内存大小是否正常) 关闭SElinux: setenforce 0 修改/etc/selinux/config文件中的SELINUX= 为 disabled 服务器时间检查和设置 date (检查时间是否正确,是否是中国时间CST) cp -f /usr/share/zoneinfo/Asia/Shanghai /etc/localtime (如果时区不对,则执行,时间正常的跳过。提示是否覆盖的时候按y) yum -y install ntp (安装ntp对时工具) ntpdate 210.72.145.44 (对时一次,纠正当前的时间) service ntpd start (启动对时服务) chkconfig ntpd on (让对时服务开机启动) 使用 yum 对系统进行更新并且安装必要软件包 yum update -y yum install make openssl openssl-devel pcre pcre-devel libpng libpng-devel libjpeg-6b libjpeg-devel-6b freetype freetype-devel gd gd-devel zlib zlib-devel gcc gcc-c++ libXpm libXpm-devel ncurses ncurses-devel libxml2 libxml2-devel imake autoconf automake screen sysstat compat-libstdc++-33 curl curl-devel flex bison -y 重新启动系统 init 6 三、编译安装L.

我的VIM基本配置(长期更新)

Keywords: #MISC #VIM #工具 #编辑器
[TOC] 我用过的编辑器很多,用的多的有Eclipse、Sublime、VIM。由于Eclipse太重量级现在已经抛弃了。 所以现在win下主要用sublime,gvim,Linux下还是用VIM。 VIM配置很麻烦,为了在以后切换环境的时候能快速搭建起编辑的环境,下了很久决心要把这一系列的操作形成一套傻逼流程,免得以后忘记了又得重新查资料。 linux环境下「简介」 在每个用户的文件夹内都有一个专属的VIM配置方案,分别放在 ~/.vim/ #插件 ~/.vimrc #插件配置 在.vimrc配置文件中,主要分两部分,第一部分为基本配置,第二部分为插件。按照按需添加的原则,目前形成了一套极简的配置方案。目前的基本配置方案如下:(”为VIM中的注释标志) set nu set expandtab "TAB转空格 set tabstop=4 "TAB为4个空格 set shiftwidth=4 "换行缩进4个空格 set smarttab "一次backspace删除shiftwidth宽度的空格 set list set listchars=tab:>-,trail:- "设置tab为>---式样 插件管理 目前使用vundle管理插件,使用了这个后能够全自动化的管理插件。下面是安装vundle的步骤:[B] 从git下载vundle git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim 把vundle下载到插件目录下,然后进行基本的配置 set nocompatible " vi不兼容, required filetype off " required,关闭文件类型检测 " 初始化插件 set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " 接下来开始让各种插件生效,格式如下,早期版本中使用的格式是 Bundle 'a/b'类似格式,目前是Plugin 'a/b' " 第一个写vundle本身的插件管理, required Plugin 'gmarik/Vundle.vim' " 下面是插件在不同地方的时候的各种写法 " 所有的插件命令都必须在这两个标记之间 vundle#begin/end. " 在GitHub的情况 Plugin 'tpope/vim-fugitive' " 在 http://vim-scripts.