SSH认证方法

天天都用SSH,几乎离不开SSH,特别是在如今这个天天在云端穿梭的互联网时代更是这样。可是对于SSH认证的方法却所知甚少,只知道最基本的集中用法,现在记录一下。以后知道新的方法,再一一补充。

1. 使用用户名/密码登录

这是最为基本的一种方法,只要知道SSH服务器的一个用户名/密码对,就可以使用SSH客户端进行登录。如:

$ ssh username@your.server

2. 使用缺省证书登录

首先创建SSH登录需要使用的证书。

$ ssh-keygen -t rsa -C username@example.com

现在我们在`~/.ssh/`下生成了一对密钥:`id_rsa`、`id_rsa.pub`。

接下来将公钥加入到SSH服务器上对应用户(这里是username)的`~/.ssh/authorized_keys`中。有两种方法可以实现添加公钥到`~/.ssh/authorized_keys`。

第一种方法:在SSH服务器上使用你最熟悉的编辑器,将公钥加入文件。

第二种方法:使用ssh-copy-id命令。

$ ssh-copy-id -i /path/to/your/public-key-file username@your.server

3. 使用指定的密钥登录

第一种指定密钥的方法是通过`ssh`的`-i`选项来完成。

$ ssh -i /path/to/your/private-key-file username@your.server

这里可以多次使用`-i`选项来指定多个密钥,登录时将会一个个来尝试。

第二种指定密钥的方法是通过ssh配置文件来完成。

在`~/.ssh/config`中添加如下配置:

Host your.server
Port 22
User username
IdentityFile /path/to/your/private-key-file

这样就可以使用`ssh your.server`登录SSH服务器了。不需要指定用户名和密码。

为Ember应用添加Loading提示

之前常常有朋友在群里面询问如何给一个Ember应用添加Loading提示,通常我们的做法都是按照http://emberjs.cn/guides/routing/loading-and-error-substates/中的方法来实现。而现在如果我们使用`ember-cli`来开发应用的话,可以借助于https://github.com/ngenworks/ember-cli-loading-slider。

友情提示!可以通过http://loading-slider.jerel.co/看看这个方案是否适合你。

首先在项目目录中执行命令npm install ember-cli-loading-slider —save将ember-cli-loading-slider安装到项目中。

接下来就可以处理如何显示Loading提示了。为了显示Loading信息,需要在application.emblem模板中添加loading-slider控件:

loading-slider isLoading=loading duration=250

Loading提示一般用于需要用户等待一段时间的操作上。例如:

  1. 路由过渡时;
  2. 发起一个`Ajax`请求。

使用ember-cli-loading-slider实现在路由过渡时,给出Loading提示非常的简单。只需要在ApplicationRoute中添加如下代码即可:

# …

actions:

  loading: ->

    controller = @controllerFor(‘application’)

    controller.set(‘loading’, true)

    @router.one ‘didTransition’, -> controller.set(‘loading’, false)

# …

通过上面的例子,你可能已经发现了,要显示Loading提示,只需要在操作开始时设置对应控制器的`loading`属性为`true`,在完成操作的时候将`loading`属性设置为`false`即可。下面来看一个保存用户的操作:

首先我们需要在`ApplicationRoute`中添加一个`finished`事件处理函数:

# …

actions:

  finished: ->

    @controllerFor(‘application’).set(‘loading’, false)  

# …

然后在保存用户对应的路由或者控制器中进行如下的操作:

# …

actions:

  saveUser: ->

    @send(‘loading’)

    user.save().finally => @send(‘finished’)

# …

最后再介绍一下`loading-slider`这个控件的接口参数:

  • isLoading:一个布尔属性,用于标识是否需要显示Loading提示。
  • duration:Loading提示持续时间,缺省值为300,单位为毫秒。当Loading提示显示操作设定时间的75%,或者提示条的长度超过屏幕宽度的66%时,Loading提示会放慢速度,直到`isLoading`变为`false`或者长度到达屏幕的宽度。
  • color:一个CSS的颜色值,用来指定Loading提示条的颜色。也可以通过定义`.loading-slider > span`的背景颜色来实现。

在命令行中管理PPTP连接

一直依赖于图形界面的方便,今天使用Qingcloud.com遇到一个需要使用的资源被墙。没有办法再继续将就下去了,问了问Google,找到了在命令行中管理PPTP连接的方法。特在这里Mark一下,也希望能够为大家提供点帮助。

首先需要检查一下ppp-generic是否存在:

modprobe ppp-generic

接下来安装需要的软件包:

$ apt-get install pptp-linux pptpd ppp curl

创建PPTP配置文件:/etc/ppp/peers/may-be-your-vpn-server-name

pty “pptp x.x.x.x —nolaunchpppd”
lock
noauth
nobsdcomp
nodeflate
name vpn-account
remotename may-be-your-vpn-server-name
ipparam may-be-your-vpn-server-name
require-mppe-128
usepeerdns
defaultroute
persist

配置登录vpn服务器的用户名与密码:

$ vi /etc/ppp/chap-secrets

在文件里面加入:

vpn-account    may-be-your-vpn-server-name    vpn-password    *

创建用来替换缺省路由的脚本,如果不创建,系统将不会启用VPN。

$ vi /etc/ppp/ip-up.local

在文件里面加入:

#!/bin/bash
H=`ps aux | grep ‘pppd pty’ | grep -v grep | awk ‘{print $14}’`
DG=`route -n | grep UG | awk ‘{print $2}’`
DEV=`route -n | grep UG | awk ‘{print $8}’`
route add -host $H gw $DG dev $DEV
route del default $DEV
route add default dev ppp0

设置脚本为可执行:

$ chmod +x /etc/ppp/ip-up.local

连接VPN:

# 这里需要注意,建立VPN连接后,原来的连接会被断开。如果你是使用ssh连接上的,请确定可以直接连接上终端,比如通过web控制台,或者使用键盘、鼠标和显示器。不然你会非常的痛苦。切记!
$ pon may-be-your-vpn-server-name

断开VPN连接:

$ poff may-be-your-vpn-server-name

安装配置http(s) proxy代理服务器

http(s) proxy是最为常用的代理服务器之一,安装一个简单的http(s) proxy非常简单,通过安装tinyproxy可以一步完成。

tinyproxy - https://banu.com/tinyproxy/

以ubuntu为例,安装tinyproxy只需要执行sudo apt-get install tinyproxy。

tinyproxy的缺省配置文件在/etc/tinyproxy.conf中。使用如下命令可以管理tinyproxy。

service tinyproxy {start|stop|restart|reload|force-reload}