2017年6月2日星期五

Apache Jackrabbit 2.14.1 发布,包含修复与改进


Linuxeden 开源社区 --Jackrabbit
Jackrabbit

Apache Jackrabbit 2.14.1 发布了,Apache Jackrabbit 2.14.1 是一个补丁版本,其中包含了对 Jackrabbit 2.14 的修复和改进。Jackrabbit 2.14.x 版本被认为是稳定的,并且可用于生产环境。

Changes in Jackrabbit 2.14.1

Bug

  • [JCR-4100] – jackrabbit-webdav: Scope implements equals() but not  hashCode()
  • [JCR-4102] – jcr2dav: change polling thread sometimes dies with NPE
  • [JCR-4118] – RepositoryChecker creates invalid node names
  • [JCR-4121] – ConcurrentModificationException in InternalVersionHistoryImpl.fixLegacy()
  • [JCR-4133] – fix javadoc problems that are errors with JDK8

Task

  • [JCR-4104] – cleanup how command lines for test executions are  constructed
  • [JCR-4106] – fix JCR API docs link
  • [JCR-4107] – Upgrade to httpclient 4.5.3
  • [JCR-4119] – Upgrade httpcomponents/httpmime to 4.5.3
  • [JCR-4122] – align parent pom references with Oak
  • [JCR-4129] – get rid of unused org.json dependency
  • [JCR-4134] – update build instructions wrt Java versions

发布主页 和 下载地址

转自 http://ift.tt/2sjSenW

The post Apache Jackrabbit 2.14.1 发布,包含修复与改进 appeared first on Linuxeden开源社区.

http://ift.tt/2s1ibLK

黄仁勋说摩尔定律已死 NVIDIA 要用人工智能应对


Linuxeden 开源社区 --黄仁勋说摩尔定律已死 NVIDIA要用人工智能应对

学者们念叨“摩尔定律已死”这句话已经有一段时间了,不过如今这句话从 Nvidia CEO 黄仁勋口中说出,却带有别样的意味。

摩尔定律是以英特尔联合创始人戈登·摩尔(Gordon Moore)的名字命名的。他曾在 1965 年时提出,半导体芯片上集成的晶体管和电阻数量将每年增加一倍。1975 年,他又根据当时的实际情况对摩尔定律进行了修正,把” 每年增加一倍” 改为了” 每两年增加一倍”。

黄仁勋说摩尔定律已死 NVIDIA要用人工智能应对

Nvidia CEO 黄仁勋在台北电脑展上对一小拨记者和分析师说道:

“每一代芯片架构都在进步,通过调整超标量体系结构以及预测执行增加管线尺寸。然而这些技术的发展,已经跟不上每年将芯片密度提升 50%的目标了。”

他说道:

“微处理器已经无法延续过去的发展速度,我们称之为‘摩尔定律’的发展规律正在失效。半导体的物理特性决定了我们不能再按照登纳德定律进一步发展。”

黄仁勋说摩尔定律已死 NVIDIA要用人工智能应对
半导体技术与处理器性能的发展轨迹正在偏离

登纳德定律又称作 MOSFET 缩放定律,源于 1974 年罗伯特·登纳德联名发表的一篇论文。该论文指出,晶体管面积的缩小使得其所消耗的电压以及电流会以差不多相同的比例缩小。也就是说,如果晶体管的大小减半,该晶体管的静态功耗将会降至四分之一(电压电流同时减半)。

摩尔定律和登纳德定律带来的递减效应推动半导体行业步入了成熟期,在这个阶段只有极少数芯片制造商能够承受推动技术进一步发展所需的、高达数十亿美元的高昂投入。 就眼下来说,拥有足够雄厚的财力,能在 16nm 和 14nm 工艺的基础上再进一步,推出 8nm 和 7nm 工艺的厂商寥寥无几。

技术进步的停滞导致了近年来行业整合加剧,高达数十亿美元的兼并和收购案屡见不鲜。

黄仁勋说摩尔定律已死 NVIDIA要用人工智能应对
黄仁勋预测,GPU 计算将取得进一步进展

在此背景下, 黄仁勋提出了半导体行业发展的另一个方向——图形处理器。Nvidia 希望能依靠图形处理器在未来数年间继续推动半导体行业发展。黄仁勋表示,深度学习需要用到 Nvidia 的 GPU 芯片,Nvidia 将借此契机进军人工智能领域,而电脑游戏业务则将逐渐让出主导地位。

虽然摩尔定律已经失效,但是半导体行业的创新并未止步。雷锋网了解到,一些新兴的中国芯片制造商正在加码 FD-SOI。还有一些厂商认为,从二维芯片设计转向三维芯片设计将是半导体行业的未来。

Nvidia 则选择了押注人工智能,用机器学习抗争摩尔定律的衰亡。Nvidia 认为,没有必要把机器变得更强大,只需要让它更智能就行了。在 Nvidia 的观念里,智慧比力量更加重要。

瑞信信贷在台北的分析师兰迪·艾布拉姆斯(Randy Abrams)认为,Nvidia 通过人工智能推动半导体行业发展,前景看起来很乐观。

Nvidia 采用 12nm 工艺的 Volta GPU 芯片已经让人感觉到了眼前一亮。据雷锋网了解,这款芯片只有 815mm²大小,相当于 7 个 iPhone 手机处理器,并使用台积电(TSMC)的硅插入器技术连接到了 16GB 的高带宽内存。而配置了 8 个 Volta GPU 芯片的深度学习超级计算机 DGX-1 售价高达 149,000 美元。

艾布拉姆斯指出,Nvidia 的数据中心业务以每年 186%的速度增长,最近已经达到了 17 亿美元。这块业务为台积电创造了 5 亿美元的价值,约占 Nvidia 总营收的 1.5%。不过艾布拉姆斯认为,AI 成为手机的主要驱动力仍然需要时间。

转自 http://ift.tt/2s1f8mF

The post 黄仁勋说摩尔定律已死 NVIDIA 要用人工智能应对 appeared first on Linuxeden开源社区.

http://ift.tt/2qI9NNu

Node.js 8 重要功能和修复全解析


Linuxeden 开源社区 --

5 月 30 日 12 点,Node.js 8 正式发布了,这个版本具有一系列新功能和性能改进,并且这些功能和改进将获得长期支持(LTS)。

下面就来介绍 Node.js 8 版本中最重要的功能和修复。

新版本的代号是 Carbon。Node.js 8 将从 2017 年 10 月起,正式成为当前的 LTS 版本,并持续到 2019 年 12 月 31 日。这也意味着 Node.js 6 版本将在 2018 年 4 月进入到维护模式,并在 2019 年 4 月结束维护支持。

下载 Node.js 8 版本:https://nodejs.org/download/rc/v8.0.0-rc.2/

Async Hooks API 介绍

Async Hooks(以前称为 AsyncWrap)API 允许获取有关句柄对象生命周期的结构跟踪信息。

API 发出的消息会将 Node.js 中所有句柄对象的生命周期告知给 consumer。它试图解决类似于 continuation-local-storage npm package 这样的问题。

如果你正在使用 continuation-local-storage,那么已经可以用称为 cls-hook 的 async hooks 来代替使用了 – 只是目前并不是使用 async hooks 的最好时机,所以需要谨慎使用!

Async Hooks API 在 Node.js 8 中如何工作

createHooks 函数的注册功能会被每一个异步操作的不同生命周期事件调用。

const asyncHooks = require('async_hooks')
asyncHooks.createHooks({  
  init,
  pre,
  post,
  destroy
})

了解更多 Async Hooks,或查看正在进行的 工作文档 。这些函数将会根据处理程序对象的生命周期事件选择性触发。

N-API 介绍

N-API 是用于构建原生插件的 API。它独立于底层 JavaScript 运行时,并作为 Node.js 自身的一部分进行维护。这么做的目的是保证应用程序二进制接口(ABI)在不同 Node.js 版本之间能够保持稳定。

N-API 的目的是将附加组件和基础 JavaScript 引擎中的更改区分开,以便原生插件在不需要重新编译情况下,就可以运行不同的 Node.js 版本。

了解更多 N-API 信息。

Node.js 8 中的缓冲区安全性改进

在 Node.js 8 版本之前,使用 new Buffer(Number) 构造函数分配的缓冲区并未使用 ZEROS 初始化内存空间。结果导致新的 Buffer 实例可能包含敏感信息,容易导致安全问题。

虽然这是一个用于提高创建新 Buffer 性能的决定,但是对大多数人来说,并不打算这么使用。因此从 Node.js 8 开始,使用 new Buffer(Number) 或 Buffer(Number) 分配的 Buffers 会被 ZEROS 自动填充。

将 V8 升级到 5.8:TurboFan & Ingnition

使用 Node.js 8 版本,底层的 V8 JavaScript 引擎也会更新。

对于 Node.js 用户来说,最大的变化就是引入 TurboFan 和 Ignition。Ignition 是 V8 的解释器,TurboFan 是优化编译器。

“Ignition 和 TurboFan 的联合使用已经开发了近 3½年,它代表了 V8 团队集体认识的最终结果,是 V8 团队收集了 JavaScript 的实测性能并仔细分析了 Full-codegen 的缺点和 Crankshaft 的结果。这也是能够在未来几年内继续优化 JavaScript 语言体系的基础。“ – Daniel Clifford 和 V8 团队

目前 V8 的编译管道如下图所示。

这个管道的最大问题是,新的语言功能必须在管道的不同部分实现,这就增加了大量额外的开发工作。

下面是简化的管道,没有了 FullCode Generator 和 Crankshaft:

新管道大大降低了 V8 团队的技术负担,并实现了很多之前无法实现的改进。

了解更多 TurboFan and Ignition 和 TurboFan Inlining Heuristics 。

将 npm 升级到 5.0.0

新的 Node.js 8 版本还附带 npm 5 – 最新版本的 npm CLI。

新 npm 版本的亮点:

  • 一种新的标准化的锁定文件功能,用于跨包管理器的兼容性(package-lock.json),以及一种用于 shrinkwrap 的新格式和语义
  • –save 已经不再需要了,因为所有的安装将默认保存
  • node-gyp 现在支持 Windows 的 node-gyp.cmd
  • 新的发布版本将会包括 sha512 和 sha1 校验

Node.js 8 版本中的其它显著改变

Buffer

Buffer 方法现在接受 Uint8Array 作为输入

Child Process

  • Argument 和 Kill 信号验证得到改善
  • Child Process 方法接受 Uint8Array 作为输入

Console

使用控制台方法时,错误事件发送现在受到了抑制

Domains

Native Promise 实例现在是域感知的

文件系统

  • 实用程序类 fs.SyncWriteStream 已被弃用
  • 已弃用的 fs.read( ) 字符串接口已被删除

HTTP

  • 溢出的 Cookie headers 会被连接成一个字符串
  • 该 httpResponse.writeHeader( ) 方法已被弃用

Stream

Stream 现在支持 destroy( ) 和_destroy( ) API

TLS

该 rejectUnauthorized 选项现在默认为 true

URL

WHATWG URL 的实现,现在是 Node.js API 完全支持的

Node.js 8 下一步要做什么

Node.js 8 版本令我们兴奋,因为它包含了很多有趣的提升,例如 Async Hooks API,这些 API 在当前的文档状态是很难掌握的。我们将尽快开始使用新版本,并尽快提供给用户新功能的更详细说明。

原文链接:http://ift.tt/2rA9Xuq

转载请注明出自:葡萄城控件

The post Node.js 8 重要功能和修复全解析 appeared first on Linuxeden开源社区.

http://ift.tt/2qJuMDz

高效能远程会话管理工具-screen


Linuxeden 开源社区 --screen-show1
导读 Linux 是一个多用户多进程的操作系统,linux 的远程操作我们常常使用是的 ssh 进行远程的。我们可以登录打开不通的终端,但是每一个终端都是一个环节变量。你是不是经常为一些长时间运行的任务而头疼,比如系统备份、ftp 传输等等。通常情况下我们都是为每一个这样的任务开一个远程终端窗口,因为他们执行的时间太长了。必须等待它执行完毕,在此期间可不能关掉窗口或者断开连接,否则这个任务就会被杀掉,一切半途而废了。
一、分析,意外关闭终端程序挂掉的原因
Linux/Unix 中,几个相关概念:

进程组(process group):一个或多个进程的集合,每一个进程组有唯一一个进程组 ID,即进程组长进程的 ID。
会话期(session):一个或多个进程组的集合,有唯一一个会话期首进程(session leader)。会话期 ID 为首进程的 ID。

会话期可以有一个单独的控制终端(controlling terminal)。与控制终端连接的会话期首进程叫做控制进程(controlling process)。当前与终端交互的进程称为前台进程组。其余进程组称为后台进程组。

根据 POSIX.1 定义:挂断信号(SIGHUP)默认的动作是终止程序。当终端接口检测到网络连接断开,将挂断信号发送给控制进程(会话期首进程)。如果会话期首进程终止,则该信号发送到该会话期前台进程组。一个进程退出导致一个孤儿进程组中产生时,如果任意一个孤儿进程组进程处于 STOP 状态,发送 SIGHUP 和 SIGCONT 信号到该进程组中所有进程。
因此当网络断开或终端窗口关闭后,控制进程收到 SIGHUP 信号退出,会导致该会话期内其他进程退出。

会话实例

打开两个 SSH 终端窗口,在其中一个运行 top 命令。

[root@tivf09 root]# top

在另一个终端窗口,找到 top 的进程 ID 为 5180,其父进程 ID 为 5128,即登录 shell。

[root@tivf09 root]# ps -ef|grep top
root      5180  5128  0 01:03 pts/0    00:00:02 top
root      5857  3672  0 01:12 pts/2    00:00:00 grep top

使用 pstree 命令可以更清楚地看到这个关系:

[root@tivf09 root]# pstree -H 5180|grep top
|-sshd-+-sshd---bash---top

使用 ps-xj 命令可以看到,登录 shell(PID 5128)和 top 在同一个会话期,shell 为会话期首进程,所在进程组 PGID 为 5128,top 所在进程组 PGID 为 5180,为前台进程组。

[root@tivf09 root]# ps -xj|grep 5128
 5126  5128  5128  5128 pts/0     5180 S        0   0:00 -bash
 5128  5180  5180  5128 pts/0     5180 S        0   0:50 top
 3672 18095 18094  3672 pts/2    18094 S        0   0:00 grep 5128

关闭第一个 SSH 窗口,在另一个窗口中可以看到 top 也被杀掉了。

[root@tivf09 root]# ps -ef|grep 5128
root     18699  3672  0 04:35 pts/2    00:00:00 grep 5128
二、解决方案:使用工具
方案一: 使用 nohup 命令

如果我们可以忽略 SIGHUP 信号,关掉窗口应该就不会影响程序的运行了。nohup 命令可以达到这个目的,如果程序的标准输出/标准错误是终端,nohup 默认将其重定向到 nohup.out 文件。值得注意的是 nohup 命令只是使得程序忽略 SIGHUP 信号,还需要使用标记 & 把它放在后台运行。

nohup <command> [argument…] &

虽然 nohup 很容易使用,但还是比较“简陋”的,对于简单的命令能够应付过来,对于复杂的需要人机交互的任务就麻烦了。

方案二: 使用实用程序 screen

我们可以使用一个更为强大的实用程序 screen,可以从 GNU screen 的官方网站下载安装,来解决这个问题。

[root@linuxprobe ~]# rpm -qa|grep screen
xscreensaver-4.18-5.rhel4.11
screen-4.0.2-5

screen-show1

screen 工具使用方式

简单来说,Screen 是一个可以在多个进程之间多路复用一个物理终端的窗口管理器。Screen 中有会话的概念,用户可以在一个 screen 会话中创建多个 screen 窗口,在每一个 screen 窗口中就像操作一个真实的 telnet/SSH 连接窗口那样。在 screen 中创建一个新的窗口有这样几种方式:

1.直接在命令行键入 screen 命令

[root@tivf06 ~]# screen

Screen 将创建一个执行 shell 的全屏窗口。你可以执行任意 shell 程序,就像在 ssh 窗口中那样。在该窗口中键入 exit 退出该窗口,如果这是该 screen 会话的唯一窗口,该 screen 会话退出,否则 screen 自动切换到前一个窗口。

2.Screen 命令后跟你要执行的程序。

[root@tivf06 ~]# screen vi test.c

Screen 创建一个执行 vi test.c 的单窗口会话,退出 vi 将退出该窗口/会话。

3.以上两种方式都创建新的 screen 会话。我们还可以在一个已有 screen 会话中创建新的窗口。在当前 screen 窗口中键入 C-a c,即 Ctrl 键+a 键,之后再按下 c 键,screen 在该会话内生成一个新的窗口并切换到该窗口。

screen 还有更高级的功能。你可以不中断 screen 窗口中程序的运行而暂时断开(detach)screen 会话,并在随后时间重新连接(attach)该会话,重新控制各窗口中运行的程序。例如,我们打开一个 screen 窗口编辑/tmp/abc 文件:

[root@tivf06 ~]# screen vi /tmp/abc

之后我们想暂时退出做点别的事情,比如出去散散步,那么在 screen 窗口键入 C-a d,Screen 会给出 detached 提示:
暂时中断会话
1

半个小时之后回来了,找到该 screen 会话:

[root@tivf06 ~]# screen -ls
There is a screen on:
        16582.pts-1.tivf06      (Detached)
1 Socket in /tmp/screens/S-root.

重新连接会话:

[root@tivf06 ~]# screen -r 16582

看看出现什么了,太棒了,一切都在。继续干吧。

你可能注意到给 screen 发送命令使用了特殊的键组合 C-a。这是因为我们在键盘上键入的信息是直接发送给当前 screen 窗口,必须用其他方式向 screen 窗口管理器发出命令,默认情况下,screen 接收以 C-a 开始的命令。这种命令形式在 screen 中叫做键绑定(key binding),C-a 叫做命令字符(command character)。

可以通过”C-a ?” 来查看所有的键绑定,常用的键绑定有:

C-a ?      显示所有键绑定信息
C-a w   显示所有窗口列表
C-a C-a 切换到之前显示的窗口
C-a c   创建一个新的运行 shell 的窗口并切换到该窗口
C-a n   切换到下一个窗口
C-a p   切换到前一个窗口 (与 C-a n 相对)
C-a 0..9        切换到窗口 0..9
C-a a   发送 C-a 到当前窗口
C-a d   暂时断开 screen 会话
C-a k   杀掉当前窗口
C-a [   进入拷贝/回滚模式
Screen 常用选项

使用键绑定 C-a ? 命令可以看到, 默认的命令字符(Command key)为 C-a,转义 C-a(literal ^a)的字符为 a:

2

因为 screen 把 C-a 看作是 screen 命令的开始,所以如果你想要 screen 窗口接收到 C-a 字符,就要输入 C-a a。Screen 也允许你使用-e 选项设置自己的命令字符和转义字符,其格式为:

-exy x 为命令字符,y 为转义命令字符的字符

下面命令启动的 screen 会话指定了命令字符为 C-t,转义 C-t 的字符为 t,通过 C-t ? 命令可以看到该变化。

[root@tivf18 root]# screen -e^tt
自定义命令字符和转义字符

3

其他常用的命令选项有:

-c file    使用配置文件 file,而不使用默认的$HOME/.screenrc
-d|-D [pid.tty.host]    不开启新的 screen 会话,而是断开其他正在运行的 screen 会话
-h num  指定历史回滚缓冲区大小为 num 行
-list|-ls       列出现有 screen 会话,格式为 pid.tty.host
-d -m   启动一个开始就处于断开模式的会话
-r sessionowner/ [pid.tty.host] 重新连接一个断开的会话。多用户模式下连接到其他用户 screen 会话需要指定 sessionowner,需要 setuid-root 权限
-S sessionname  创建 screen 会话时为会话指定一个名字
-v      显示 screen 版本信息
-wipe [match]   同-list,但删掉那些无法连接的会话

下例显示当前有两个处于 detached 状态的 screen 会话,你可以使用 screen -r <screen_pid> 重新连接上:

[root@tivf18 root]# screen –ls
There are screens on:
        8736.pts-1.tivf18       (Detached)
        8462.pts-0.tivf18       (Detached)
2 Sockets in /root/.screen.

[root@tivf18 root]# screen –r 8736

如果由于某种原因其中一个会话意外终止,这时 screen -list 会显示该会话为 dead 状态。使用 screen -wipe 命令清除该会话:

[root@tivf18 root]# kill -9 8462
[root@tivf18 root]# screen -ls  
There are screens on:
        8736.pts-1.tivf18       (Detached)
        8462.pts-0.tivf18       (Dead ???)
Remove dead screens with 'screen -wipe'.
2 Sockets in /root/.screen.

[root@tivf18 root]# screen -wipe
There are screens on:
        8736.pts-1.tivf18       (Detached)
        8462.pts-0.tivf18       (Removed)
1 socket wiped out.
1 Socket in /root/.screen.

[root@tivf18 root]# screen -ls  
There is a screen on:
        8736.pts-1.tivf18       (Detached)
1 Socket in /root/.screen.

[root@tivf18 root]#

-d –m 选项是一对很有意思的搭档。他们启动一个开始就处于断开模式的会话。你可以在随后需要的时候连接上该会话。有时候这是一个很有用的功能,比如我们可以使用它调试后台程序。该选项一个更常用的搭配是:-dmS sessionname

启动一个初始状态断开的 screen 会话:

[root@tivf06 tianq]# screen -dmS mygdb gdb execlp_test

连接该会话:

[root@tivf06 tianq]# screen -r mygdb
管理你的远程会话

先来看看如何使用 screen 解决 SIGHUP 问题,比如现在我们要 ftp 传输一个大文件。如果按老的办法,SSH 登录到系统,直接 ftp 命令开始传输,之后。。如果网络速度还可以,恭喜你,不用等太长时间了;如果网络不好,老老实实等着吧,只能传输完毕再断开 SSH 连接了。让我们使用 screen 来试试。

SSH 登录到系统,在命令行键入 screen。

[root@tivf18 root]# screen

在 screen shell 窗口中输入 ftp 命令,登录,开始传输。不愿意等了?OK,在窗口中键入 C-a d:
管理你的远程会话
4

然后。。退出 SSH 登录?随你怎样,只要别杀掉 screen 会话。

是不是很方便?更进一步,其实我们可以利用 screen 这种功能来管理你的远程会话,保存你所有的工作内容。你是不是每次登录到系统都要开很多窗口,然后每天都要重复打开关闭这些窗口?让 screen 来帮你“保存”吧,你只需要打开一个 ssh 窗口,创建需要的 screen 窗口,退出的时候 C-a d“保存”你的工作,下次登录后直接 screen -r <screen_pid> 就可以了。

最好能给每个窗口起一个名字,这样好记些。使用 C-a A 给窗口起名字。使用 C-a w 可以看到这些窗口名字,可能名字出现的位置不同。

使用 putty:

5

使用 telnet:

6

更多 Screen 功能

Screen 提供了丰富强大的定制功能。你可以在 Screen 的默认两级配置文件/etc/screenrc 和$HOME/.screenrc 中指定更多,例如设定 screen 选项,定制绑定键,设定 screen 会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。如果你愿意的话,也可以自己指定 screen 配置文件。

以多用户功能为例,screen 默认是以单用户模式运行的,你需要在配置文件中指定 multiuser on 来打开多用户模式,通过 acl*(acladd,acldel,aclchg…)命令,你可以灵活配置其他用户访问你的 screen 会话。更多配置文件内容请参考 screen 的 man 页。

原文地址: http://ift.tt/2ryjnFN编辑:陶武杰,审核员:逄增宝

The post 高效能远程会话管理工具-screen appeared first on Linuxeden开源社区.

http://ift.tt/2swDEZt

Linux 下 ssh 高级使用– 免密登录


Linuxeden 开源社区 --
导读 在 linux 系统中密码的保存是非常重要的,在企业中的 WEB 集群环境中,进行统一的版本更新和配置文件的同步免密登录是非常重要的。在自动化运维,统一管理都是离不开 Linux 的免密登录。下面我们来看下免密登录。
1.Linux 下生成密钥

ssh-keygen 的命令手册,通过”man ssh-keygen“命令:

通过命令”ssh-keygen -t rsa“

生成之后会在用户的根目录生成一个 “.ssh”的文件夹

进入“.ssh”会生成以下几个文件

authorized_keys: 存放远程免密登录的公钥, 主要通过这个文件记录多台机器的公钥

id_rsa : 生成的私钥文件

id_rsa.pub : 生成的公钥文件

know_hosts : 已知的主机公钥清单

如果希望 ssh 公钥生效需满足至少下面两个条件:

1) .ssh 目录的权限必须是 700 2) .ssh/authorized_keys 文件权限必须是 600

2. 远程免密登录

原理图:

常用以下几种方法:

2.1 通过 ssh-copy-id 的方式

命令: ssh-copy-id -i ~/.ssh/id_rsa.put

举例:

[root@test .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135
root@192.168.91.135's   password:
Now try logging into the machine, with "ssh '192.168.91.135'", and check in:
.ssh/authorized_keys  to make sure we haven't added extra keys that you weren't expecting.
[root@test .ssh]# ssh root@192.168.91.135 
Last login: Mon Oct 10 01:25:49 2016 from 192.168.91.133 
[root@localhost ~]# 

常见错误:

[root@test ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub 192.168.91.135
-bash: ssh-copy-id: command not found //提示命令不存在

解决办法:yum -y install openssh-clients

2.2 通过 scp 将内容写到对方的文件中

命令:scp -p ~/.ssh/id_rsa.pub root@:/root/.ssh/authorized_keys

举例:

[root@test .ssh]# scp -p ~/.ssh/id_rsa.pub root@192.168.91.135:/root/.ssh/authorized_keys
 root@192.168.91.135's password:  
id_rsa.pub 100% 408 0.4KB/s 00:00
  
[root@test .ssh]#   
[root@test .ssh]# ssh root@192.168.91.135
Last login: Mon Oct 10 01:27:02 2016 from 192.168.91.133 
[root@localhost ~]# 
2.3 通过 Ansible 实现批量免密

2.3.1 将需要做免密操作的机器 hosts 添加到/etc/ansible/hosts 下:

[Avoid close]
192.168.91.132
192.168.91.133
192.168.91.134

2.3.2 执行命令进行免密操作

ansible -m authorized_key -a “user=root key=''” -k

示例:

[root@test sshpass-1.05]# ansible test -m authorized_key -a "user=root key=''" -k   
SSH password: -----> 输入密码   192.168.91.135 | success >>{   
"changed": true,    
"key": "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArZI4kxlYuw7j1nt5ueIpTPWfGBJoZ8Mb02OJHR8yGW7A3izwT3/uhkK7RkaGavBbAlprp5bxp3i0TyNxa/apBQG5NiqhYO8YCuiGYGsQAGwZCBlNLF3gq1/18B6FV5moE/8yTbFA4dBQahdtVP PejLlSAbb5ZoGK8AtLlcRq49IENoXB99tnFVn3gMM0aX24ido1ZF9RfRWzfYF7bVsLsrIiMPmVNe5KaGL9kZ0svzoZ708yjWQQCEYWp0m+sODbtGPC34HMGAHjFlsC/SJffLuT/ug/hhCJUYeExHIkJF8OyvfC6DeF7ArI6zdKER7D8M0SM  WQmpKUltj2nltuv3w== root@localhost.localdomain",  
"key_options": null,    
"keyfile": "/root/.ssh/authorized_keys",    
"manage_dir": true,    
"path": null,    
"state": "present",    
"unique": false,    
"user": "root"  
}   
[root@test sshpass-1.05]# 
2.4 手工复制粘贴的方式

将本地 id_rsa.pub 文件的内容拷贝至远程服务器的~/.ssh/authorized_keys 文件中

原文地址: http://ift.tt/2swHbHp编辑:陶武杰,审核员:逄增宝

 

The post Linux 下 ssh 高级使用– 免密登录 appeared first on Linuxeden开源社区.

http://ift.tt/2rywE1b

阿里云 SLB 下使用 Nginx 巧加 web 防火墙


Linuxeden 开源社区 --
导读 服务器大家都不陌生,随着科技的发展企业对于服务器的选择也是多种多样。云服务对我们带来了便利,架构即服务,软件即服务等。但是云服务的背后我们对服务的控制能力有时候缺有了限制。公司用的是阿里云的负载均衡器-SLB,SLB 与后端 nginx 流量为内网,这个时候面对这洪水攻击和爬虫的时候我们单从 WEB 服务器的 iptables 层很难做到隔离 IP。下面我们巧用 nginx 来实现 IP 隔离
场景原理:

场景: 前端 SLB—>nginx—->proxy

1. 首先需要配置 SLB(阿里云负载均衡)让 slb 记录用户真实 IP 功能

SLB 是阿里云的一款负载均衡服务产品,和 LVS 一样,我们可以理解为 LVS 服务,(但是我们没有对 lvs 服务器的管理权限)

此处勾选即可

2.tomcat 开启 X-Forwarded-For 日志功能

开启 tomcat 的 X-Forwarded-For,在 tomcat/conf/server.xml 中,修改 AccessLogValve 日志纪录功能为如下内容:

  <valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%{X-Forwarded-For}i %h %l %u %t %r %s %b"></valve>

提示:修改完重启生效!!

被攻击的日志检查客户真实 IP:

3.Nginx 配置隔离

在 Server 标签下添加如下几行

 set $allow true;
        if ($http_x_forwarded_for ~ "106.121.*.*|106.121.71.120|106.121.77.28|106.121.74.130|218.109.235.254"){
        set $allow false;
        }
        if ($allow = false){
        return 404;
    }
#提示:IP 添加在上面!

小结: 因为无法禁止用户进行访问,我们设置 404 可以让 IP 无法进行访问数据库。不然数据库会被查询语句进行刷爆。

原文地址: http://ift.tt/2s1flGu编辑:陶武杰,审核员:逄增宝

The post 阿里云 SLB 下使用 Nginx 巧加 web 防火墙 appeared first on Linuxeden开源社区.

http://ift.tt/2qHDOgk

使用 Vim 给文件设置密码保护


Linuxeden 开源社区 --怎样在 Linux 中用 Vim 对文件进行密码保护

Vim 是一种流行的、功能丰富的和高度可扩展的 Linux 文本编辑器 ,它的一个特殊功能便是支持用带密码各种的加密方法来加密文本文件。

本文中,我们将向你介绍一种简单的 Vim 使用技巧:在 Linux 中使用 Vim 对文件进行密码保护。我们将向你展示如何让一个文件在它创建的时侯以及为了修改目的而被打开了之后获得安全防护。

要安装 Vim 完整版,只需运行这些命令:

$ sudo apt install vim          #Debian/Ubuntu 系统
$ sudo yum install vim          #RHEL/CentOS 系统 
$ sudo dnf install vim          #Fedora 22+
怎样在 Linux 中用 Vim 对文件进行密码保护

Vim 有个 -x 选项,这个选项能让你在创建文件时用它来加密。一旦你运行下面的 vim 命令,你会被提示输入一个密钥:

$ vim -x file.txt
警告:正在使用弱加密方法;参见 :help 'cm'
输入加密密钥:*******
再次输入相同密钥:*******

如果第二次输入的密钥无误,你就能可以修改此文件了。

怎样在 Linux 中用 Vim 对文件进行密码保护

被密码保护的 Vim 文件

等你修改好之后,摁 Esc 和键入 :wq 来保存及关闭文件。下次你想打开它编辑一下,你就必须像这样去输入密钥:

$ vim file.txt
需要 "file.txt" 的加密密钥
警告:正在使用弱加密方法;参见 :help 'cm'
输入密钥:*******

假设你输了一个错误的密码(或者没输密码),你会看到一些垃圾字符。

怎样在 Linux 中用 Vim 对文件进行密码保护

Vim 中的加密内容

在 Vim 中设置一种强加密方法

注意:警告信息暗示保护文件的是弱加密方法。那么接下来,我们来看看怎么在 Vim 中设置一种强加密方法。

怎样在 Linux 中用 Vim 对文件进行密码保护

Vim 中文件弱加密

为了查看加密方式(cm)集,键入如下:

:help 'cm'

输出样例:

                                                *'cryptmethod'* *'cm'*
'cryptmethod'       string  (默认 "zip")
                            全局或本地到缓冲区 |global-local|
                            {not in Vi}
        当缓冲区写进文件中所用的加密方式:
                                                *pkzip*
            zip             PkZip 兼容方式。  一种弱加密方法。
                            与 Vim 7.2 及更老版本后向兼容。
                                                *blowfish*
            blowfish        河豚加密方式。  中级强度加密方法但有实现上
                            的瑕疵。需要 Vim 7.3 及以上版本,用它加密的文件不
                            能被 Vim 7.2 及更老版本读取。它会添加一个 “种子”,
                            每次你当你写入文件时,这个加密字节都不同。

你可以像如下所示的那样给一个 Vim 文件设置个新的加密方法(本例中我们用 blowfish2s 加密方法)

:setlocal cm=blowfish2

然后键入回车和 :wq 保存文件。

怎样在 Linux 中用 Vim 对文件进行密码保护

对 Vim 文件设置强加密

现在你再打开下面的文件时应该就看不到那条警告信息了。

$ vim file.txt
需要 "file.txt" 的加密密钥
输入加密密钥:*******

你也可以在打开 Vim 文件之后来设置密码,用 :X 命令就能像上面所示的那样去设置一个加密密码。

本文到这里就结束了!文章中我们介绍了怎么通过 Linux 下的 Vim 文本编辑器来给一个文件做加密防护。

永远记住要用强加密方式及密码来适当的保护那些可能包含了诸如用户名及密码、财务账户信息等机密信息的文本文件。


via: http://ift.tt/2qNNOIl

作者:Aaron Kili 译者:ch-cn 校对:wxy

本文由 LCTT 原创编译,Linux 中国 荣誉推出

原文地址: http://ift.tt/2s1mjeM编辑员:王毅,审核员:逄增宝

 

The post 使用 Vim 给文件设置密码保护 appeared first on Linuxeden开源社区.

http://ift.tt/2qHJlDv