概述
假设要以用户 rainux 的身份登录运行 OpenSSH Server 的远程主机 www.rainux.org(现在几乎所有的 Linux 服务器都使用 OpenSSH Server 作为 SSH Server),那么需要做的操作如下:
生成用于 SSH 身份认证的密钥。密钥由公钥和私钥组成,一个公钥只对应一个私钥,一个私钥也只对应一个公钥。
将 OpenSSH 格式的公钥文本追加到远程主机上的
~rainux/.ssh/authorized_keys文件里(~rainux意为用户 rainux 的 HOME 目录)。注意公钥文本中应该没有换行符,一行就是一个公钥。确保
~rainux/.ssh/authorized_keys权限为 600,~/rainux/.ssh目录权限为 700,并且它们的所有者都是 rainux。指定 SSH 客户端使用对应的私钥并以用户 rainux 的身份登录 www.rainux.org,此时无需输入 rainux 在 www.rainux.org 上的密码。
注意,如果私钥是以加密形式存储的(强烈建议使用一个强壮的密码加密私钥,这样即使私钥文件被窃取,也无法被直接使用),第四步仍然需要输入加密私钥所用的密码。但是 PuTTY 和 OpenSSH 都有提供一个代理程序用于避免多次重复输入密码。运行代理程序后将私钥添加到其中,并且输入一次加密私钥所用的密码,然后保持代理程序的运行,以后 SSH 客户端即可在需要使用私钥进行身份认证的场合请求代理程序去完成身份认证(这是为了确保私钥不会被泄漏到任何使用代理程序的客户端上),无须再次输入任何密码。
Linux / Cygwin / MSYS 上使用 OpenSSH Client
生成密钥
执行 ssh-keygen 接受默认文件名,并且输入加密私钥用的密码(passphrase)即可生成私钥 ~/.ssh/id_rsa 和对应的公钥 ~/.ssh/id_rsa.pub。其中 id_rsa.pub 的内容可以直接追加到远程主机的 authorized_keys 文件里。
使用私钥
把公钥部署到远程主机上后,即可直接执行 ssh rainux@www.rainux.org 来登录远程主机。但如果私钥是加密形式保存,如上所述应该使用代理程序 ssh-agent 来避免每次输入密码。
直接执行 ssh-add 命令可以添加刚才生成的私钥到 ssh-agent 里,也可以用 ssh-add -l 查看已经添加的私钥。如果执行 ssh-add 时提示无法连接身份认证代理,则需要使用以下命令来启动 ssh-agent。
eval `ssh-agent`
使用 eval 是为了执行 ssh-agent 输出的设置环境变量的 bash 命令,以确保 ssh-add 可以通过 SSH_AUTH_SOCK 环境变量找到 ssh-agent。
GNOME 的桌面系统如果有安装 gnome-keyring,它会自动管理 ssh-agent,通常甚至无须手工添加私钥到 ssh-agent 里,第一次使用公钥时 gnome-keyring 就会提示输入一次密码,以后则不再需要。
Windows 上使用 PuTTY
生成密钥
到 PuTTY 的下载页面下载 putty-0.60-installer.exe 或者 putty.zip,两者都包含 PuTTY 所有的组件。
安装好 PuTTY 之后(对于 zip 版本来说,解压到任意目录即可)运行 PuTTYGen 生成自己的密钥。选择密钥类型为 SSH-2 RSA,点击 Generate,按照提示在 PuTTYGen 窗口内随机移动鼠标直到进度条达到 100%,然后 PuTYYGen 会生成密钥并且显示其公钥部分信息。这里可以填写一个有意义的注释,然后输入一个用来加密私钥的强壮的密码(Key passphrase)。最后点击 Save private key 将私钥保存为一个 .ppk 文件。不需要单独 Save public key,因为 .ppk 文件里已经包含了公钥。并且通过 Save public key 保存出来的公钥文件格式与 OpenSSH 的格式并不相同,若要将公钥部署到使用 OpenSSH Server 的服务器上,只能使用 PuTTYGen 窗口上显示的那一段 Public key for pasting into OpenSSH authorized_keys file。
使用私钥
将公钥部署到远程主机上之后,使用 PuTTY 登录该远程主机时可以在 Connection > SSH > Auth 里选择用于身份认证的私钥文件。同样,如果私钥是加密形式保存,应该使用代理程序 Pageant 以避免每次输入密码。
最简单的办法是创建一个 Pageant 的快捷方式,并且将 .ppk 私钥文件作为参数加到快捷方式的“目标”栏里,添加之后看上去应该像这样:
C:\PuTTY\pageant.exe D:\main.ppk "D:\My Secrets\secondary.ppk"
就像上面的例子一样,如果私钥文件路径中带有空格,应该使用引号将其括起来。通过这个快捷方式启动 Pageant 则会自动装载指定的私钥文件,并且立即询问用于加密私钥的密码。以后只要保持 Pageant 的运行,并且在 PuTTY 的某个 Saved session 里设置 Connnection > Data 里设置 Auto-login username,即可实现双击该 session 则完全自动登录。
Tags: GNU/Linux, Software 软件, Windows使用 SVN 来管理 Vim 配置文件 .vimrc 及插件集
十一月 5th, 2007
注: 本文第一次写作时没有进行全面的测试,由于 svn update 操作更新文件时会破坏 NTFS 上的硬链接而导致第一次的方法无法正常使用。现在你看到的已经是新的方法。在此为我的疏忽向大家道歉。
现在我的生活早已离不开 Vim 了,无论是在公司还是在家里,无论是在本地计算机还是远程服务器上,Vim 必定是我使用得最多的程序之一。当然了,Vim 虽好,也一定要有符合自己习惯的 .vimrc 和插件集才能发挥出更大的潜能,让我们用得更爽。也就是说,.vimrc 肯定是会被经常修改的,插件集也应该会时常添加新成员或进行版本更新。显然,要在家里和公司以及一些远程服务器之间频繁地同步这些修改是件很烦人的事。幸好,我们有 Subversion 可以让这一切变得简单。
让我们从公司的 Linux 桌面机上开始。
# 将 $HOME 里的 .vimrc 和 .vim 目录放到 vimfiles 目录里以便进行 SVN 导入操作 cd ~ mkdir vimfiles mv .vimrc vimfiles mv .vim vimfiles svn import vimfiles http://svn.rainux.org/vimfiles/trunk # 从 SVN 里 checkout 出一份 working copy 到 $HOME 里, # 并且设置忽略掉 $HOME 里其他所有文件 svn co http://svn.rainux.org/vimfiles/trunk . svn ps svn:ignore '*' . svn ci -m "Let's ignore all files those not managed by Subversion in $HOME." # 用来进行导入操作的 vimfiles 目录已经不再有任何存在的意义了 rm -rf vimfiles
好了,我们的 .vimrc 和插件集已经版本化了,下班回家。
# 先备份一下家里 Windows 上的文件,这假设我们没有使用 Cygwin CD %HOME% MOVE .vimrc .vimrc.backup MOVE vimfiles vimfiles.backup svn co http://svn.rainux.org/vimfiles/trunk .
现在我们遇到问题了,Vim 在 Windows 上会尝试从 %HOME%\vimfiles 目录加载用户脚本,而不会理会 %HOME%\.vim 目录。我的解决办法是为 .vim 目录建立符号链接 vimfiles,这需要 %HOME% 所在分区必须是 NTFS 文件系统。新的问题是 Windows 本身并没有附带创建符号链接的工具,需要用 Sysinternals 提供的命令行工具 junction.exe 或者 Windows 2000 Resource Kit 里的 linkd.exe 来创建。
CD %HOME% junction vimfiles .vim
OK,开始享受 Subversion 为我们带来的便利吧!不仅仅可以方便的同步在公司和在家里对 .vimrc 及插件集的修改,在远程服务器上要取得这些最新的修改也变得非常容易。什么,某个服务器上还在使用古老的 Vim 6.3 ?没有关系,为 http://svn.rainux.org/vimfiles 创建一个名为 6.x 的 branch,删掉无法用于 6.x 的插件即可。
最后,如果你对我的 Vim 配置感兴趣,可以从上面提到的 URL 里 checkout 一份出来看看,是的,它是真实的 URL。:)
Tags: GNU/Linux, Software 软件, Subversion, Vim, Windows解决 gvimext 在 UTF-8 locale 下乱码的问题
六月 20th, 2007
gvimext.dll 是一个为 Windows 里任意文件的右键菜单 (context menu) 添加“用 Vim 编辑”菜单项的 shell 扩展,随 gVim 一起安装。
但是无论是官方的安装版本,还是我自己编译的版本,在使用 UTF-8 locale 时 (比如设置环境变量 LANG 为 zh_CN.UTF-8) 这个右键菜单项都会显示乱码。其实原因很简单,Windows 并不原生支持 UTF-8 编码,所以直接使用 TextOut() 之类的 API 输出 UTF-8 编码的消息文本肯定会显示乱码。
曾经尝试修改 gvimext.cpp,在里面覆盖环境变量 LANG 的值,去掉末尾的 .UTF-8,但这样做的结果是导致 gvimext.dll 寄生进程 explorer.exe 或 TotalCmd.exe (如果是在 Total Commander 中使用右键菜单的话) 的 LANG 也被修改,造成由 explorer 启动的 gVim 的 LANG 也成了被去掉 .UTF-8 的值 (因为子进程默认会继承父进程的环境变量)。后来又想起了 Cygwin 里的 OUTPUT_CHARSET 环境变量,可以在 gvimext 里将获取到的 UTF-8 消息文本使用 iconv() 转换为 OUTPUT_CHARSET 设定的编码,这样问题就可以圆满的解决了。
直到今天打算来实施这个想法时,又回头去看了一下以前 Google 到的这篇 The Unicode HOWTO: Locale setup,才发现原来 glibc 本来就有这样的自动编码转换能力,并且 2.2 以后的版本也不再需要设定 OUTPUT_CHARSET 了。偶太无知无畏了……
那么 gVim 安装版里的 libintl.dll 肯定不是 gcc 编译的,所以没有自动编码转换能力导致乱码,用 PEiD 看了一下果然是 MS VC 6.0 编译。接下来就简单了,去 GnuWin32 的 LibIntl 页面下载 Binaries 和 Dependencies 两个压缩包,取得其中的 libintl3.dll 和 libiconv2.dll,前者改名为 libintl.dll (gVim 被硬编码为只尝试载入 libintl.dll 这个文件,想了想没必要改源代码,因为以后 LibIntl 出了新版本 libintl3.dll 里的 3 还会变化)。然后将这两个文件放到 PATH 环境变量中列出的任意一个目录里,最后删掉 gVim 安装目录下的 libintl.dll,OK,一切都是那么完美了。:p
Tags: gVim, Software 软件, Vim, WindowsVim 7.0c beta Win32 binary
四月 3rd, 2006
偶拿 Microsoft Visual C++ 7.1 编译的,非 OLE 的 GUI 版本和 console 版本。
四个文件保持目录结构解压到某个地方,运行其中的 install.exe 即可。需要注意的是这些压缩包中没有 iconv.dll 和 diff.exe。如果你认为自己解决这些问题比较麻烦,或许你应该等待偶发布 NSIS 的安装程序的版本。
下载: gvim70c.zip vim70clang.zip vim70crt.zip vim70cw32.zip
附上偶的 .vimrc 文件: .vimrc
Tags: Software 软件, Vim, Windows编写INF文件进行文件安装[转载]
三月 2nd, 2006
◆ 丁健 张万 江南
安装信息(Setup Information)文件是Windows系统支持的一种安装信息存放文件,一般以INF作为扩展名,因此也叫INF文件。安装信息INF文件与 Windows内建的安装服务引擎(API函数库)紧密协同工作,基于其严格的编写语法制作而成的INF文件在拷贝、删除文件,增、删注册表键,更改系统设置等方面都有优秀的表现,完全可以用来实现应用程序文件安装的目标,而且价格免费,透明度高,安装程序小,可完全定制。INF文件是文本文件,可在任何文本编辑器内查看、创建、修改,普通用户使用Windows系统本身提供的记事本、写字板即可进行文件安装脚本的编写。 Read the rest of this entry »
Tags: Software 软件, Windows正确设置 Vim 的字符编码选项 (gVim/Vim on Win32 中文环境)
十月 20th, 2005
和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括 UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。
Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下: Read the rest of this entry »
Tags: GNU/Linux, Software 软件, Vim, Windows智能 ABC 在 Windows XP Embedded 下面选字窗口乱码的问题
二月 22nd, 2005
这个问题说起来也简单,只要安装 NT 版本的智能 ABC 就可以了。
下面的这个安装包,提供的 NT 版本的安装程序,安装完成以后就可以直接在输入法设置里面添加智能 ABC 了。 智能 ABC for WinXPe
Tags: Software 软件, Windows[载录]Windows XP Embedded 上手指南
十二月 24th, 2004
Windows XP Embedded 上手指南
作者:MICROSOFT
概述
对于一种开发工具的学习,最重要也最困难的阶段就是概念的建立,只要建立了正确的概念,明白整个系统的体系结构和各种工具作用,剩下的工作就是实际操作,积累经验了,最多不过在需要的时候查一查手册。 本文通过指导读者进行实际操作,一步步地完成一次完整的开发工作,从而帮助读者建立一个清晰明确的概念。
因为我们开发的产品不是普通的软件,而是专用的操作系统,所以需要针对某个特定的硬件平台(目标机)来进行开发;首先需要一个强大的工作站来运行开发环境和开发工具,然后根据目标机硬件配置和软件需求进行开发,开发完成后将做好的操作系统影象文件(Image)与目标机硬件结合,运行系统并测试。 Read the rest of this entry »
Tags: Software 软件, WindowsNTFS 下的硬链接(hard link)与符号链接(symbolic link)
十二月 22nd, 2004
在 Linux 使用的 ext2 等文件系统里,都有 hard link 与 symbolic link 的功能,这个功能简单的说就是让我们可以用多个路径去访问同一个文件或者目录。比如说让 /vmlinuz 和 /boot/vmlinuz-2.6.7-1-38 表示的是同一个文件。但 hard link 和 symbolic link 还是有区别的(废话)。
Hard link 表示,它和原文件名指向的是存储设备上同一个文件内容。就好像这个文件内容有多个文件名一样,每个文件名有相等地位。删除其中任何一个之后,事实上文件内容并不会被删除掉,仍然可以用其他的名称来访问这个文件。只有当最后一个指向这个文件内容的文件名被删除掉之后,文件内容才被删除。也就是说,一个文件的 hard link 跟此文件本来的名称并没有任何本质上的区别。需要注意的是,因为每个分区(partition)上都可能有相同的存储位置地址,所以 hard link 必须跟被 link 的文件在同一个分区上。另外,目录不支持 hard link。 Read the rest of this entry »
Tags: Software 软件, Windows在 NTFS 里使用目录符号链接
十二月 7th, 2004
以前接触 Linux 时,非常喜欢其 ext2 文件系统的链接/符号链接(symbolic link)功能,这个功能简单的说就是可以让一个文件或者目录实体拥有多个名称。比如让 /bin/ls 和 /home/rainux/ls 这两个文件路径指向同一个文件,或者让 /bin/ 和 /home/rainux/bin/ 表示同一个目录。访问多个名称中的任意一个都是直接访问该文件本身。这个功能在某些时候非常有用。
用了这么久 Windows 2000,只知道 NTFS 文件系统可以将一个分区(partition)加载到目录里,比如让 C:\Cache 指向的是一个单独的分区。刚才到 Sysinternals.com 上去找那个蓝屏屏保才顺便看到 Windows 2000 以及之后版本的 NTFS 是支持目录符号链接的,但是 MS 并没有在 Windows 里附带这样的工具。而使用 Sysinternals.com 提供的命令行工具 junction.exe 就可以创建目录符号链接。
现在,可以让 D:\WinTools 和 E:\WinTools 指向同一个目录了,这将在一定程度上解决一些盘符相关的问题。
Tags: Software 软件, Windows