查看UUID

UUID 全稱是 Universally Unique Identifier。
其作用可讓系統管理員不必再為了硬碟的連接順序變更時,而造成手忙腳亂的不便,因為每一個磁碟分區或裝置,都將有其獨一無二的辨識碼,當系統管理員需要使用某裝置時,只需要將該裝置的 UUID 調用出來即可,無需再像以往一樣要先確認裝置的順序,以及其在系統中所對映的裝置節點名稱,然後才能正確的調用。

那要如何才能得知裝置的 UUID 呢?
目前合計有三種方式可以得知︰

  1. 透過瀏灠裝置的文件信息
    比如要查 sda4 這個硬碟分割區的 UUID 時,可以如下方式瀏灠得知︰

    # ls -l /dev/disk/by-uuid/
    lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sda4

    其中 0909-090B 就是 sda4 的 UUID。

  2. 透過 vol_id 命令
    # vol_id /dev/sda4
    ID_FS_USAGE=filesystem
    ID_FS_TYPE=vfat
    ID_FS_VERSION=FAT32
    ID_FS_UUID=0909-090B
    ID_FS_UUID_ENC=0909-090B
    ID_FS_LABEL=SWAP
    ID_FS_LABEL_ENC=SWAP
    ID_FS_LABEL_SAFE=SWAP
  3. 透過 blkid 命令
    # blkid /dev/sda4
    /dev/sda4: LABEL="SWAP" UUID="0909-090B" TYPE="vfat"

透過以上的方法皆能得到裝置的 UUID,而且不同的裝置、甚至是不同的磁碟分區,依照其內容量或連接的類型,其 UUID 的長度與格式皆會有不同的格式。

OpenSSH高级教程

OpenSSH高级教程

出自Ubuntu中文

目录

OpenSSH 高级教程

原文出处:官方Wiki

原文作者:

授权许可:

翻译人员:fiftymetre

校正人员:millenniumdark

贡献人员:

适用版本:

文章状态:等待校正


译者的话:第一次翻译这英文文章,译的不好的地方也许大家包含,我会努力在下一章中尽我所能的提高翻译质量。翻译这篇文章时,还特意找一了本“SSH权威指南”研究了一下,以前在win下都是用SSH Secure Shell来跟ubuntn来传文件的呵呵。但ubuntu6.06桌面版本默认安装却没有安装SSH。


这翻译。。。非常生硬。我改了几句,发现要改的太多了。只好算了。 有的地方把配置文件中的指令都翻译了。这OpenSSH可不懂中文写的配置文件。 — millenniumdark

介绍

介绍 这篇指南由浅入深的介绍属于标准Ubuntu OpenSSH服务的默认配置和高级设置。这篇文章将详细论述服务器端配置指导,并解释了利用Rivest Shamir Adleman (RSA) 算法(注1)生成密钥登陆 OpenSSH 服务器与明文密码的区别.附加的资源为OpenSSH 索引在指南部分。

面向读者

适当的设定这篇文章里的参数 ,读者应该是一个善于使用命令行程序的Ubuntu用户,使用bash环境,并在基于控制台的文本编辑器程序里把系统配置文件编辑成他们的首选设置,另 外,读者应该知道如何启动和关闭系统,并且基本的了解OpenSSH 程序包的安装,及其目的。

关于 OpenSSH

OpenSSH OpenSSH是一种可以自由获得的安全Shell (SSH)协议族工具用来操作控制电脑,或在电脑之间传送文件。传统的工具要完成这样的功能得使用telnet(终端仿真协议),或极不安全的rcp(注 2),并由此来传送用户的密码口令。OpenSSH 提供一种无交互後台程序服务,和可以容易使用的用户工具,来加密远程控制装置,和传输文件操作,由此来代替原来的类似服务。

OpenSSH 服务 (sshd)

OpenSSH 服务,SSH,是作为代表性地独立守护程序,然而如果愿意的话也可以让该服务成为按需访问的策略(as- needed basis)的网络守护进程,来监视一些网络请求的守护进程(注3),或更进一步的扩展网络守护进程,或同等安全的, xinetd(注 4)。OpenSSH 服务配置经过 file /etc/ssh/sshd_config 目录创建。这部分内容将讨论默认安装配置文件,和告诉他们如 何做某些修改来得到更安全的 sshd。首先来看默认设置(in italics, such as Port 22)的简单说明,根据建议设置 (in bold, such as Protocol 2)介绍来增强安全防护。

给你的OpenSSH 安装中改变 sshd的结构,首先制做备份你的原始 /etc/ssh/sshd_config 文件,在终端shell中输入下列命令:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original

你可以随意的选择保存原始文件的存取模式 使用下列命令:

sudo chmod a-w /etc/ssh/sshd_config.original

以这样备份配置文件的方式被认为是最好的练习管理你的Ubuntu GNU/Linux system的方法。如果因为一些原因你需要恢复到原始 的配置,你可以很方便的,并且无论何时你造成一个错误,或执行了无法返回的错配置应用程序,你将总是可以返回到你的原始文件,以提供你在返回它(原始配置 文件)之前已经向後支持它。

现在你已经保存了原始的 /etc/ssh/sshd_config 文件,你可以修改或替换文件的默认值和设定,和建议设定。在你改变任何设定到产生任何结果,你必须保存 /etc/ssh/sshd_config 文件,和重新启动 sshd 使用下命令:

sudo /etc/init.d/ssh restart

建议 OpenSSH 服务设定

Ubuntu的OpenSSH的实现使用的默认 /etc/ssh/sshd_config 配置文件比其他GNU linux发行版还要更安全。但是还可以进一步提高现有的安全程度,而且那些建议在这里实被提到。在特别情况下一些变化对你可能是不适当的。使用提供的设 置来做出最有利的安全性抉择,还有你环境的可用性。

登录
LogLevel INFO

默认设定允许 sshd 记录 AUTH 设备的syslog(系统日志),在信息级别。如果使用默认设置的 ssh 远程访问你的Ubuntu电脑,你应该考虑直接抛出LogLevel的日志详细级别给VERBOSE,因为这样你可以获得详细的关于所有企图和成功ssh登记。

LogLevel VERBOSE

现在所有ssh 登记程序详情,和可能的登录程序将记录在你的AUTH上下文中/var/log/auth.log logfile 详细方式。

验证
LoginGraceTime 120

默认设定,Ubuntu’s的OpenSSH 服务配置从登录提示被显示的时间起到120 秒 (二分钟),直到在连接被 sshd 结束之前,用户必须开始登录过程。这个行为受登录时间指令的约束。

LoginGraceTime 20

在断开远程访问实用程序这前sshd服务将只为用户提供20秒等待。这可以有助于自动化阻遏,或者暴力攻击ssh,和拒绝服务式攻击(Dos)。

LoginGraceTime

X11Forwarding yes

如果计算机提供传统服务,(E-Mail服务或Web服务),而且没有在以任何的形式 (像是 LTSP) 提供 X11 服务,那时X11数据封装将失去修改X11Forwarding指令到去除潜在的攻击向量,特别是连接到 ssh 用户。

X11Forwarding no

现在X11 forwarding将无法有效的来自你的 sshd。

IconsPage?action=AttachFile&do=get&target=IconWarning3.png 警告: 如果服务是基于使用X11服务的,或来自LTSP,那时X11 Forwarding将关闭,或者你将失去对此能力的支持!

#Banner /etc/issue.net

显示一个不欢迎的警示条,或更好的方法对于安全是件好事。它告知好奇的人,或者故意的未经许可的访客到你的OpenSSH服务器,因为远程访问你的计算机是需要经过许可的,并且需要用户授权。

有一个预登陆的条目可以对你成功防范一个攻击者有很大的帮助,或别的组织未经许可的尝试经由ssh访问你的服务器。

Banner /etc/issue.net

现在激活那个显示条目 /etc/ssh/sshd_config,使用下列的程序和例子内容来创建实际的条目文件:

使用sudo,和你喜欢的编辑软件,创建文件 /etc/issue,并把下面的文字写在里面作为预登陆告警条的起点:

***************************************************************************

NOTICE TO USERS

This computer system is the private property of its owner, whether

individual, corporate or government. It is for authorized use only.

Users (authorized or unauthorized) have no explicit or implicit

expectation of privacy.

Any or all uses of this system and all files on this system may be

intercepted, monitored, recorded, copied, audited, inspected, and

disclosed to your employer, to authorized site, government, and law

enforcement personnel, as well as authorized officials of government

agencies, both domestic and foreign.

By using this system, the user consents to such interception, monitoring,

recording, copying, auditing, inspection, and disclosure at the

discretion of such personnel or officials. Unauthorized or improper use

of this system may result in civil and criminal penalties and

administrative or disciplinary action, as appropriate. By continuing to

use this system you indicate your awareness of and consent to these terms

and conditions of use. LOG OFF IMMEDIATELY if you do not agree to the

conditions stated in this warning.

****************************************************************************

保存文件,并且创建一个符号连结到 /etc/issue.net 文件使用下列命令:

sudo ln -s /etc/issue /etc/issue.net

一旦重新启动sshd,所有的登陆尝试都会遇到上面的警告,并且有登陆提示符在这後面,所有的非授权访问者将受到一个清晰的消息”你的电脑只能通过授权才 能使用,不欢迎非授权使用,上面的警告条是丛US DEPARTMENT OF DEFENCE 的警告条的修改版本生成的,对于专业使用是足够合适的,可能对于个人用户就更加合适了。

做为旁边注解,所有本地控制台应用程序也同样显示来自 /etc/issue 文件的信息,甚至在物理层使用这台电脑的人也会收到这样的警告。如果这不是你想要的行为,然後把条目的内容放在 /etc/issue文件中,而不是做一个到/etc.issue的一个符号联接,/etc/issue中没有任何文本。由于没有文字在 /etc/issue,警告将只出现在那些尝试访问系统的人的面前。

额外配置技巧

下面的内容是一些额外的暗示和一些配置一个更加安全的openssh安装的技巧,这些技巧利用一些不包含在默认的ubuntussh配置文件中的指令,并且提出其他加强你的ssh安装安全的方法。

允许和拒绝用户和用户组

在配置文件中你可以使用一些指令来允许或者拒绝一些特定用户或者用户组用ssh登陆.这个方法更加细致的控制哪些人可以通过ssh来进入你的Ubuntu电脑。

例如,如果你想只允许jhendrix和svaughan通过ssh登陆,你可以向这样在你的/etc/ssh中使用allowusers指令。

AllowUsers jhendrix svaughan’

如果你不想让所有用户能过 ssh 登陆,除了使用者 wgates,或sballmer然後你可以使用DenyUsers命令添加到/etc/ssh/sshd_config中,像这样:

DenyUserswgates sballmer’

最後,再看一个例子,你可以这样配置你的OpenSSH服务,只有用户属于系统组才允许通过ssh 登录。在这个例子中,我们将执行一些必要手段只允许SSH的用户都是小组成员sshlogin。 sudo addgroup –gid 450 sshlogin sudo adduser <username> sshlogin。

sudo addgroup --gid 450 sshlogin

sudo adduser <username> sshlogin

在以上的例子中是用’<username>’代替你的用户名加入到sshlogin系统组。最後,编辑你的 /etc/ssh/sshd_config,并增添allowgroups指令:

AllowGroups sshlogin

重新启动 sshd,并且只有属于sshlogin组的用户才可以通过ssh 登录到你的Ubuntu计算机。

启动 sshd来监听不同的端口

由于近来自动扫描ssh和暴力攻击工具的大量增长,很多装有ssh的用户和管理员决定给ssh用一个非标准的tcp端口,标准的sshd侦听端口是 tcp/22,并且暴力扫描攻击工具都典型的被配置成侦听这个端口用来查找後门。

尽管从使用简单密码的ssh登陆切换到使用基于键盘方式的登陆,就象在指南中下部分我们要讨论的显着减少了自动工具猜测出一个正确的在你的系统的登陆的机会,一些人觉得加入更多偏僻字的层数可能更会增强安全性。

如果你曾考虑过在非标准端口上运行的你的sshd分支,例如一个常量需要使用-p或者-P来切换不同的ssh工具,或者通过修改配置文件这种更长久的方式来检验端口改变的正确,并且接受那些协议,然後改变侦听端口是十分琐碎的。

仅仅增加一个或更多的端口在你的 /etc/ssh/sshd_config 文件中,因此:

Port 2222

如果你希望侦听tcp/22,和tcp/2222端口,例如,局域网连接使用传统方式,但外部连接使用tcp/2222端口。要完成这些,不需要在你的路由器配置网络地址翻译规则或者类似的东西,只要增加这2条指令到 /etc/ssh/sshd_cfig:

Port 22
Port 2222

不要忘记保存文件,和重新启动你的sshd指令:

sudo /etc/init.d/ssh restart

使改变生效。

基于RSA key登陆

基于key的授权是可用的ssh授权方法中的一种,因此简单的密码(Ubuntu默认密码)和Kerberos标签。基于Key的验证的几个优点比密码验证更好,至于例子这个key的值就十分明显的很难被暴力破解,或以大量的关键字为条件来猜测弱密码。

数字键也是如此,是对极其相似事物的一个比方,所以可以在可能出现弱密码的地方显示密码安全的程度。使用基于Key登录的ssh 是比使用弱密码的登录,普遍认为更安全的。

IconsPage?action=AttachFile&do=get&target=IconNote.png 注解: 同时生成一套能够使用openssh的RSA key而不需要密码是可能的,简单讲,通过ssh登陆不要密码,这个指导书没有描述或者认定这种用法是很不安全的.如果这个缺少密码的key落入其他人手 中,就如你的授权一样,应此所有允许这些key的系统安全都很容易受到威胁,在一些情况下,例如不安全的群环境中,需要有完全没有密码的登陆,但是,这本书没有解释制造这种key的过程。

这部分将说明启动基本Key登录的ssh ,生成一套公有/私有RSA密匙,并使用它们由OpenSSH登录你的Ubuntu计算机。

生成 RSA 密匙

第一步包括生成一组用于验证的RSA 密匙。代表性意思是,你将在想要通过某台电脑去远程登陆其他电脑的这台机器上做这些事情,但是这不是非常重要,因为你总是可以到处把你的密匙安装到需要的机器上。到生成一个RSA 公有/私有密匙,使用下列命令行:

b@tsh:~ ssh-keygen -t rsa

你必须在一个位置保存你的密匙,和一串对应于你的密匙的passphrase(密码短语口令)注5。当选择passphrase对于密匙时,应选择非常坚 固的passphrase,和便于记忆的,和记录它的位置的安全。这passphrase必须使用钥匙,在每次你要登录到一个基于密匙的系统:

生成公有/私有RSA密匙对。

进入保证密匙的文件(/home/b/.ssh/id_rsa):

进入passphrase(empty for no passphrase):

再次进入同一passphrase:

你的验证文件保存在/home/b/.ssh/id_rsa.

你的公有密匙保存在 /home/b/.ssh/id_rsa.pub.

祝贺你现在已经有了密匙组。现在布置你的系统已允许你的登录它们。

在远程电脑寄存密匙

假设你想使用key的远程ubuntu已经运行了ssh後台程序,接下来放置你自己key对的公共部分在那些电脑上是十分简单的,例如,如果你喜 欢开始用基于key的方式登陆一个叫madsion的远程电脑,并且madsion正在运行sshd,并且能够用名字通过网络来到达这台机器,就可以很简 单的用sshcopy这个命令来恰当的放置你的key: ssh-copy-id -i ~/.ssh/id_rsa.pub b@madison

登录测试

接下来, 你将要登录测试,配置连接到机器并使用你的passphrase来解开密匙:

ssh madison

你会看到一个要你给出key的passphrase的命令提示符:

Enter passphrase for key ‘/home/b/.ssh/id_rsa’:

输入你的passphrase,并把madison设置为允许从基于密匙的登录,你将要使用它登录。

IconsPage?action=AttachFile&do=get&target=IconNote.png 注解: 上述的例子只是:一个例子!代替用户名,在这个例子中,机器名用你自己实际的名字是为了增加你成功的机会。 ;-)

行不通的事!

如果你不是被提示要求passphrase,而是仅仅得到

b@madison’s password:

提示同样使用密码登录,然後读取。有一些情况可以预防向上面提到的这种情况。在默认的Ubuntu安装里,上面的例子能够运行。如果不,下列各项条件,例如这些时常发生的原因:

在远程计算机上,确认 /etc/ssh/sshd_config包含下列各项,和没有它们的注解;

PubkeyAuthentication yes

如果没有加它们,或没有注解,那么重要启动sshd,并重新再试一个登录。如果你现在得到了passphrase的提示,那要祝贺你可以用密匙登录了!

从这里到那里?

如过你已经成功建立了一个基于RAS密匙的登陆,你可能希望这是你Ubuntu系统上唯一可接受的授权方式,完全放弃弱密码授权.按照这个路线,将能确保自动暴力扫描和攻击工具对你的公共系统攻击更加困难,提前提醒,你一旦丢失了密匙,你会发现你自己也被关在系统外面!

从通知你的sshd不允许弱密码,到只是简单的使用sudo和你喜欢的编辑软件编辑 /etc/ssh/sshd_config,和下列各项指令改变:

#PasswordAuthentication yes

by uncommenting it, and changing yes to no:

PasswordAuthentication no

保存文件,并重新启动sshd以使弱密码验证无效。

IconsPage?action=AttachFile&do=get&target=IconDialog-Warning1.png 警告 : 做二次,使弱密码验证无效行为,和没有使用密匙登录,或丢失了你的密匙,你并被锁在你的机器外面了。当然,你仍然可以经过控制台登录机器上,但这可能不是那么容易,如果你的电脑是500哩远呢!你已被再次警告这样是不行的!

此外,你可以改变允许使用基于密匙的登录的登录指令,到执行策略为以基于密码的登录。你可以做这个通过改变:

PermitRootLogin yes

to

PermitRootLogin without-password

不要由于没有密码而被警告.这并不意味着一个人用root登陆的时候不需要提供密码,仅仅相当,这意味着没有人可以用密码认证的方法使用root来登陆,意味着用root登陆的时候可能只能使用公共密匙方式登陆。

资源

更多资源与高级配置OpenSSH的安全性在以下表格中。

本地系统资源

man sshd System manual page for the sshd server daemon
man sshd_config System manual page for the /etc/ssh/sshd_config configuration file
man ssh-copy-id System manual page for the ssh-copy-id application
man ssh-keygen System manual page for the ssh-keygen application
/etc/ssh/sshd_config The OpenSSH Secure Shell Daemon (sshd) configuration file

WWW Resources

Keeping SSH access secure

OpenSSH Website

Password-less logins with OpenSSH

注1: 它是第一个既能用于数据加密也能用于数字签名的算法。它易于理解和操作,也很流行。算法的名字以发明者的名字命名:Ron Rivest, Adi Shamir 和Leonard Adleman。但RSA的安全性一直未能得到理论上的证明。它经历了各种攻击,至今未被完全攻破。

注2: (rcp) 远端复制协议。该协议允许用户从网络的一个远端主机或者服务器上的文件系统中上载和下载文件。远端复制协议使用TCP协议来确保数据传输的可靠性。

注3: 原处为”inetd” 意思就是监视一些网络请求的守护进程,其根据网络请求来调用相应的服务进程来处理连接请求。

注4: xinetd(eXtended InterNET services daemon)提供类似于inetd+tcp_wrapper的功能,但是更加强大和安全。

注5: 相对“密码”(password)而言,密码短语(passphrase)口令以其更为严密的安全性正受到IT界的广泛关注。在功能上,passphrase同密码一样,只是长度较密码长。通常passphrase使用4到5个单词取代原来数字、字母结合的方式。

openssh 安装配置

1.1 什么是SSH ? 传统的网络服务程序,如FTP、Pop和Telnet在传输机制和实现原理上是没有考虑安全机制的,其本质上都是不安全的;因为它们在网络上用明文 传送数据、用户帐号和用户口令,别有用心的人通过窃听等网络攻击手段非常容易地就可以截获这些数据、用户帐号和用户口令。而且,这些网络服务程序的简单安 全验证方式也有其弱点,那就是很容易受到“中间人“(man-in-the-middle)这种攻击方式的攻击。所谓“中间人“的攻击方式,就是“中间人 “冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人“一转手做了手脚之后,就会出现 很严重的问题。

SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人“这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺 骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为 FTP、Pop、甚至为PPP提供一个安全的 “通道“。

最初的SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是SSH的替代软件包,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。

SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。 用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。 1.2 SSH协议的内容

SSH协议是建立在应用层和传输层基础上的安全协议,它主要由以下三部分组成,共同实现SSH的安全保密机制。

传输层协议,它提供诸如认证、信任和完整性检验等安全措施,此外它还可以任意地提供数据压缩功能。通常情况下,这些传输层协议都建立在面向连接的TCP数据流之上。

用户认证协议层,用来实现服务器的跟客户端用户之间的身份认证,它运行在传输层协议之上。

连接协议层,分配多个加密通道至一些逻辑通道上,它运行在用户认证层协议之上。

当安全的传输层连接建立之后,客户端将发送一个服务请求。当用户认证层连接建立之后将发送第二个服务请求。这就允许新定义的协议可以和以前的协议共存。连接协议提供可用作多种目的通道,为设置安全交互Shell会话和传输任意的TCP/IP端口和X11连接提供标准方法。1.3 SSH的安全验证

从客户端来看,SSH提供两种级别的安全验证。

第一种级别(基于口令的安全验证),只要你知道自己的帐号和口令,就可以登录到远程主机,并且所有传输的数据都会被加密。但是,这种验证方 式不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人“这种攻击方式的攻击。

第二种级别(基于密匙的安全验证),需要依靠密匙,也就是你必须为自己创建一对密匙,并把公有密匙放在需要访问的服务器上。如果你要连接 到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在你在该服务器的用户根目录下寻找你的公有密 匙,然后把它和你发送过来的公有密匙进行比较。如果两个密匙一致,服务器就用公有密匙加密“质询“(challenge)并把它发送给客户端软件。客户端 软件收到“质询“之后就可以用你的私人密匙解密再把它发送给服务器。

与第一种级别相比,第二种级别不需要在网络上传送用户口令。但是整个登录的过程可能慢一些。1.4 SSH的应用

首先,SSH最常见的应用就是,用它来取代传统的Telnet、FTP等网络应用程序,通过SSH登录到远方机器执行你想进行的工作与命 令。在不安全的网路通讯环境中,它提供了很强的验证(authentication)机制与非常安全的通讯环境。实际上,SSH开发者的原意是设计它来取 代原UNIX系统上的rcp、rlogin、rsh等指令程序的;但经过适当包装后,发现它在功能上完全可以取代传统的Telnet、FTP等应用程序。

传统 BSD 风格的 r 系列指令(如 rcp,rsh,rlogin)往往都被视为不安全的,很容易就被各种网络攻击手段所破解,几乎所有找得到有关 UNIX安全的书或文件,都会一而再、再而三地警告系统管理者,留心r系列指令的设定,甚至要求系统管理者将r系列指令通通关闭。

而用来替代r系列指令的SSH,则在安全方面做了极大的强化,不但对通讯内容可以进行极为安全的加密保护,同时也强化了对身份验证的安全 机制,它应用了在密码学(Cryptography)中已发展出来的数种安全加密机制,如 Symmetric Key Cryptography, Asymmetric Key Cryptography, One-way Hash Function,Random- number Generation等,来加强对于身份验证与通讯内容的安全保护。通讯时资料的加密有IDEA,three- key triple DES,DES,RC4-128,TSS,Blowfish 等数种多种安全加密算法可供选择,加密的key则是通过 RSA 进行交换的。资料的加密可以对抗IP spoofing,RSA这种非对称性的加密机制则可用来对抗DNS spoofing与 IP routing spoofing,同时RSA也可以进行对主机身份的验证。

其次,通过使用用SSH可以在本地主机和远程服务器之间设置“加密通道“,并且这样设置的“加密通道“可以跟常见的Pop应用程序、X应 用程序、Linuxconf应用程序相结合,提供安全保障。 SSH的“加密通道“是通过“端口转发“来实现的。你可以在本地端口(没有用到的)和在远程服务器上运行的某个服务的端口之间建立“加密通道“。然后只要 连接到本地端口。所有对本地端口的请求都被SSH加密并且转发到远程服务器的端口。当然只有远程服务器上运行SSH服务器软件的时候“加密通道“才能工 作。

2.1 openssh的安装和启动

tony@tonybox:~$ sudo aptitude updatetony@tonybox:~$ sudo aptitude install openssh-server

Reading package lists... Done

Building dependency tree... Done

Reading extended state information

Initializing package states... Done

Reading task descriptions... Done

Building tag database... Done

The following NEW packages will be automatically installed:

libedit2 openssh-client

The following NEW packages will be installed:

libedit2 openssh-client openssh-server

0 packages upgraded, 3 newly installed, 0 to remove and 0 not upgraded.

Need to get 55.4kB/879kB of archives. After unpacking 2130kB will be used.

Do you want to continue? [Y/n/?]y

...

Setting up openssh-server (4.3p2-5) ...

Creating SSb RSA key; this may take some time ...

Creating SSb DSA key; this may take some time ...

Restarting OpenBSD Secure Shell server: sshd.

//创建服务器RSA/DSA密钥对

tony@tonybox:~$

安装完毕后默认生成以下配制文件:

tony@tonybox:~$ ls /etc/ssh -l

total 160

-rw-r--r-- 1 root root 132839 2006-10-07 23:10 moduli           //ssh服务器的Diffie-Hellman密钥文件

-rw-r--r-- 1 root root   1423 2006-10-07 23:10 ssh_config       //ssh客户端配置文件

-rw-r--r-- 1 root root   1874 2006-10-20 17:45 sshd_config      //ssh服务器配置文件

-rw------- 1 root root    668 2006-10-20 17:46 ssh_host_dsa_key //ssh服务器dsa算法私钥

-rw-r--r-- 1 root root    602 2006-10-20 17:46 ssh_host_dsa_key.pub     //ssh服务器dsa算法公钥

-rw------- 1 root root   1679 2006-10-20 17:46 ssh_host_rsa_key //ssh服务器rsa算法私钥

-rw-r--r-- 1 root root    394 2006-10-20 17:46 ssh_host_rsa_key.pub     //ssh服务器rsa算法公钥

tony@tonybox:~$

如果没有特别要求使用默认设置即可满足使用要求.

启动ssh服务

$ sudo /etc/init.d/ssh start

停止ssh服务

$ sudo /etc/init.d/ssh stop

重启ssh服务

$ sudo /etc/init.d/ssh restart

使用ssh首次连接一个远程ssh服务器时,会出现类似下边的信息。这是因为ssh不能识别这台主机,键入yes将会把这台服务器的信息写入 /.ssh/known_hosts文件,下次连入这台远程服务器时就不会出现这类信息。

tony@tonybox:~$ ssh root@192.168.102.50

The authenticity of host '192.168.102.50 (192.168.102.50)' can't be established.

RSA key fingerprint is c6:d4:e7:23:03:ce:15:2c:08:ec:39:7e:52:29:a5:a6.

Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.102.50' (RSA) to the list of known hosts.

root@192.168.102.50's password:******

Last login: Thu Oct 26 10:38:41 2006

Linux vmdebian 2.6.16-2-486 #1 Fri Aug 18 18:39:04 UTC 2006 i686

The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

vmdebian:~#

2.2 默认配置

默认sshd_config文件

# Package generated configuration file

# See the sshd(8) manpage for details# What ports, IPs and protocols we listen for

Port 22

#默认使用22端口

# Use these options to restrict which interfaces/protocols sshd will bind to

#ListenAddress ::

#ListenAddress 0.0.0.0

Protocol 2

#使用ssb协议

# HostKeys for protocol version 2

HostKey /etc/ssh/ssh_host_rsa_key

HostKey /etc/ssh/ssh_host_dsa_key

#主机密钥存储在此

#Privilege Separation is turned on for security

UsePrivilegeSeparation yes

#需要sshd用户启动ssh服务

# Lifetime and size of ephemeral version 1 server key

KeyRegenerationInterval 3600

ServerKeyBits 768

服务器在启动时生成这个密钥。并以固定的周期重新生成。这里指定长度是768位,最小为512,周期为3600。

# Logging

SyslogFacility AUTH

#设置syslog的facility(KERN,DAEMON,USER,AUTH,MAIL等)

LogLevel INFO

#指定记录日志级别为INFO,该值从低到高顺序是:QUIET,FATAL,ERROR,INFO,VERBOSE,DEBUG,使用DEBUG会侵犯用

户的隐私权,这个级别只能用于诊断,而不能用于普通操作。

# Authentication:

LoginGraceTime 120

#设置如果用户不能成功登录,在切断连接之前服务器需要等待的时间(以秒为单位)。

PermitRootLogin yes

#允许root登录

StrictModes yes

#设置ssh在接收登录请求之前是否检查用户家目录和rhosts文件的权限和所有权。新手会把自己的目录和文件设成任何人都有写权限。

RSAAuthentication yes

PubkeyAuthentication yes

#AuthorizedKeysFile     %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files

IgnoreRhosts yes

#完全禁止SSHD使用.rhosts文件

# For this to work you will also need host keys in /etc/ssh_known_hosts

RhostsRSAAuthentication no

#设置是否使用用RSA算法的基于rhosts的安全验证。

# similar for protocol version 2

HostbasedAuthentication no

# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication

#IgnoreUserKnownHosts yes

#设置ssh daemon是否在进行RhostsRSAAuthentication安全验证的时候忽略用户的“$HOME/.ssh/known_hosts”

# To enable empty passwords, change to yes (NOT RECOMMENDED)

PermitEmptyPasswords no

#设置不允许使用空密码

# Change to yes to enable challenge-response passwords (beware issues with

# some PAM modules and threads)

ChallengeResponseAuthentication no

#关闭挑战响应

# Change to no to disable tunnelled clear text passwords

#PasswordAuthentication yes

#设置是否使用明文密码认证

# Kerberos options

#KerberosAuthentication no

#KerberosGetAFSToken no

#KerberosOrLocalPasswd yes

#KerberosTicketCleanup yes

#有关Kerberos的相关选项

# GSSAPI options

#GSSAPIAuthentication no

#GSSAPICleanupCredentials yes

#有关GSSAPI的相关选项

X11Forwarding yes

#允许X转发

X11DisplayOffset 10

PrintMotd no

PrintLastLog yes

TCPKeepAlive yes

#UseLogin no

#MaxStartups 10:30:60

#Banner /etc/issue.net

# Allow client to pass locale environment variables

AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

如果没有特别要求使用默认设置即可满足使用要求.2.3 基于口令的认证

缺省情况下,ssh仍然使用传统的口令验证,在使用这种认证方式时,我们不需要进行任何配置。你可以使用自己帐号和口令登录到远程主机。所 有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的 攻击。

使用以下方法登录服务器:

$  ssh tony@192.168.102.50

tony@192.168.102.50's password:

Linux vmdebian 2.6.16-2-486 #1 Fri Aug 18 18:39:04 UTC 2006 i686The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Fri Dec  8 12:31:58 2006 from 192.168.102.249

$

2.4 基于密钥的认证

密匙认证需要依靠密匙,可以使用ssh-keygen 命令生成密钥对,将会把生成的私钥存储在 /.ssh/id_rsa文件中,公钥存储在/.ssh/id_rsa.pub文件中,需要将其复制到远程服务 器上, 这样当登录远程服务器时,客户端软件就会向服务器发出请求,请求用你的密匙进行认证,服务器收到请求之后,先在你在该服务器的宿主目录下寻找你的公匙,进 行身份认证. ssh-keygen 默认使用rsa算法生成密钥,如果要使用dsa算法,则需要使用-t 指定比如($ ssh-keygen -t dsa)

tony@tonybox:~$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/tony/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/tony/.ssh/id_rsa.

Your public key has been saved in /home/tony/.ssh/id_rsa.pub.

The key fingerprint is:

5e:25:fe:32:af:96:e5:e2:c9:55:ad:f9:d2:f1:67:5d tony@tonybox

tony@tonybox:~$

然后使用scp 命令将公钥上传到远程SSH服务器的对应用户的.ssh目录下,并更名为authorized_keys并确保权限为644

tony@tonybox:~/.ssh$ scp id_rsa.pub  tony@192.168.102.50:.ssh/authorized_keys

tony@192.168.102.50's password:

id_rsa.pub                                                      100%  394     0.4KB/s   00:00

tony@tonybox:~/.ssh$

这样,以后登录这台SSH服务器的时候,就会使用您上传的公钥进行身份认证。

tony@tonybox:~$ ssh tony@192.168.102.50

Linux vmdebian 2.6.16-2-486 #1 Fri Aug 18 18:39:04 UTC 2006 i686The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Thu Oct 26 12:59:12 2006 from 192.168.102.43

tony@vmdebian:~$

如果为密钥设置了 passphrase, 则登录过程如下:

tony@tonybox:~$ ssh tony@192.168.102.50

Enter passphrase for key '/home/tony/.ssh/id_rsa':

Linux vmdebian 2.6.16-2-486 #1 Fri Aug 18 18:39:04 UTC 2006 i686The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Thu Oct 26 14:27:58 2006 from 192.168.102.43

tony@vmdebian:~$

如果将客户端私钥 id_rsa 更名, 并在服务器端sshd_config文件中做如下设置:

PasswordAuthentication  no
tony@tonybox:$ mv  /home/tony/.ssh/id_rsa /home/tony/.ssh/id_rsa.bak

tony@tonybox:$ ssh tony@192.168.102.50

Permission denied (publickey).

tony@tonybox:~$

如果在服务器端sshd_config文件中做如下设置:

PasswordAuthentication  yes

则当密钥口令输入错误, 或密钥不存在是,就会使用口令认证

tony@tonybox:~$ ssh tony@192.168.102.50

Enter passphrase for key '/home/tony/.ssh/id_rsa':

tony@192.168.102.50's password:

Linux vmdebian 2.6.16-2-486 #1 Fri Aug 18 18:39:04 UTC 2006 i686The programs included with the Debian GNU/Linux system are free software;

the exact distribution terms for each program are described in the

individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent

permitted by applicable law.

Last login: Thu Oct 26 17:30:43 2006 from 192.168.102.43

tony@vmdebian:~$3. 使用windows客户端

在windows客户端下也有很多ssh的客户端,比如 putty,它同时兼容ssh1和ssb,在它的网站上提供了很多客户端软 件下载, 我们通常使用到的是putty和puttygen, 其中puttygen 用于生成密钥对, 操作非常简单,值得注意的是, 如果您使用putty以密钥认证方式连接ssh服务器, putty并不能很好的识别ssh-keygen 生成的私钥, 需要使用puttygen工具进行密钥转换, 操作如下:

载入公钥

输入公钥的passphrase

然后使用Save private key按钮, 将转换后的私钥导出即可得到putty可以识别的私钥. 就我个个人而言我更倾向于使用pietty, 它是putty的改进, 对文字编码支持更为丰富, 使用起来更具人性化, 下图为以pietty连接ssh服务器, 我们可以通过选项的SSH->Auth来指定私钥的位置:

Ubuntu 7.1 server从无到有搭建全能WEB生产环境

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(一)

版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明。

http://www.dingl.com/blog/archives/12

作者:丁令

由于工作原因,需要搭建linux环境。
选择Ubuntu7.1 server的原因是比较干净,生产服务器上不要搞那么多乱七八糟的东西。

Ubuntu7.1 server是一个非常干净的系统,连图形界面都没有,于是鼠标用不上了。

安装Ubuntu非常简单,不再多述。注意几点:

1、安装之前先插上网线

2、除了OpenSSH,不装其它任何的服务器软件,Apache/Mysql/PHP都不装,后面使用源码自己编译安装

Ubuntu安装后的配置:
1、启用root用户

sudo passwd root

输入密码后:

su

即可用root用户完成后面的配置与维护。

2、配置网络

如果在安装时没有配置好网络环境,可手工配置:
vi /etc/network/interfaces

根据环境正确配置即可。重启网络:

/etc/init.d/networking restart

3、配置apt-get的更新位置

如果想使用最新版本的各种包,此步必须。

vi /etc/apt/sources.list

编辑文件,主要是禁止从cdrom安装软件,而从网上下载最新的版本。

#
# deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted

#deb cdrom:[Ubuntu-Server 7.10 _Gutsy Gibbon_ - Release i386 (20071016)]/ gutsy main restricted

# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to

# newer versions of the distribution.

deb http://ubuntu.cn99.com/ubuntu/ gutsy main restricted
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy main restricted

## Major bug fix updates produced after the final release of the

## distribution.

deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates main restricted

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu

## team, and may not be under a free licence. Please satisfy yourself as to

## your rights to use the software. Also, please note that software in

## universe WILL NOT receive any review or updates from the Ubuntu security

## team.
deb http://ubuntu.cn99.com/ubuntu/ gutsy universe

deb-src http://ubuntu.cn99.com/ubuntu/ gutsy universe

deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates universe

deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates universe

## N.B. software from this repository is ENTIRELY UNSUPPORTED by the Ubuntu

## team, and may not be under a free licence. Please satisfy yourself as to

## your rights to use the software. Also, please note that software in

## multiverse WILL NOT receive any review or updates from the Ubuntu

## security team.

deb http://ubuntu.cn99.com/ubuntu/ gutsy multiverse
deb-src http://ubuntu.cn99.com/ubuntu/ gutsy multiverse

deb http://ubuntu.cn99.com/ubuntu/ gutsy-updates multiverse

deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-updates multiverse

## Uncomment the following two lines to add software from the ‘backports’

## repository.

## N.B. software from this repository may not have been tested as

## extensively as that contained in the main release, although it includes

## newer versions of some applications which may provide useful features.

## Also, please note that software in backports WILL NOT receive any review

## or updates from the Ubuntu security team.

# deb http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse
# deb-src http://ubuntu.cn99.com/ubuntu/ gutsy-backports main restricted universe multiverse

## Uncomment the following two lines to add software from Canonical’s

## ‘partner’ repository. This software is not part of Ubuntu, but is

## offered by Canonical and the respective vendors as a service to Ubuntu

## users.

# deb http://archive.canonical.com/ubuntu gutsy partner
# deb-src http://archive.canonical.com/ubuntu gutsy partner

deb http://security.ubuntu.com/ubuntu gutsy-security main restricted

deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted
deb http://security.ubuntu.com/ubuntu gutsy-security universe

deb-src http://security.ubuntu.com/ubuntu gutsy-security universe

deb http://security.ubuntu.com/ubuntu gutsy-security multiverse

deb-src http://security.ubuntu.com/ubuntu gutsy-security multiverse

4、更新Ubuntu:

apt-get update

apt-get upgrade

此步需要花费大概30分钟,如果出现网络错误可重新执行或加上–fix-missing参数重新执行。

5、安装各种软件包

可一次安装N个:
apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-zlib-perl libdb4.3-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential

上面的命令要放在一行执行。这些包基本都是后面需要使用的或者平时也经常可以用到的,可根据自己需要选择。

6、安装libncurses5-dev

很多朋友在使用源码安装软件时在make时出现错误,就是因为没有安装这个包:

checking for termcap functions library… configure: error: No curses/termcap library found

解决办法:

apt-get install libncurses5-dev

7、增加ll别名

以前用fedora core时都有ll命令,Ubuntu下没有,很不习惯,只好自己设置:

vi ~/.bashrc

此文件中其实已经有别名的配置,只是已经注释掉了,去掉注释即可,同时为vi设置别名为vim。

alias ll=’ls -l’

alias la=’ls -A’

alias l=’ls -CF’

alias vi=’vim’

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(二)

正式开始安装软件,这部分主要是mysql/apache的安装。

一、安装mysql

mysql使用utf-8作为默认编码:

groupadd mysql
useradd -g mysql mysql

tar -zxvf mysql-5.0.45.tar.gz

cd mysql-5.0.45

./configure –prefix=/usr/local/mysql –with-charset=utf8 –with-collation=utf8_general_ci –with-extra-charsets=latin1

make

make install

cp support-files/my-medium.cnf /etc/my.cnf

cd /usr/local/mysql

bin/mysql_install_db –user=mysql
chown -R root .

chown -R mysql var

chgrp -R mysql .

bin/mysqld_safe –user=mysql &

将mysql加入PATH:

vi /etc/profile

增加:
PATH=/usr/local/mysql/bin:”${PATH}”

让mysql随系统一起启动

cp support-files/mysql.server /etc/init.d/mysqld

cd /etc/init.d

update-rc.d mysqld defaults

重启服务器,验证mysql是否能随系统正常启动,启动后:
mysql

如果能直接进入则说明启动成功。

为了安全,修改root密码:

mysql>use mysql

mysql>UPDATE user SET password=PASSWORD(’new_password’) WHERE user=’root’;

mysql>FLUSH PRIVILEGES;

mysql>exit

二、安装apache

1、安装apache前,先安装openssl,因为后面要配置apache支持https协议:

tar -zxvf openssl-0.9.8e.tar.gz

cd openssl-0.9.8e

./config –prefix=/usr/local/ssl

make

make test
make install

2、安装apache,configure参数可根据需要调整。

tar -zxvf httpd-2.2.6.tar.gz

cd httpd-2.2.6

./configure –prefix=/usr/local/apache –enable-modules=all –enable-rewrite –enable-forward –enable-ssl –with-ssl=/usr/local/ssl –enable-mods-shared=all –enable-deflate –enable-proxy –enable-proxy-balancer –enable-proxy-http

make

make install

修改conf/httpd.conf的ServerName:
ServerName 127.0.0.1:80

测试apache是否正常

让apache随系统一起启动

cp /usr/local/apache/bin/apachectl /etc/init.d/httpd

cd /etc/init.d

update-rc.d httpd defaults

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(三)

三、安装PHP

先安装php需要的一些包。

1、安装libxml2:
apt-get install libxml2 libxml2-dev

tar -zxvf zlib-1.2.3.tar.gz

cd zlib-1.2.3

./configure –prefix=/usr/local/zlib

make

make install

2、安装jpeg:

tar -zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b

mkdir /usr/local/jpeg

mkdir /usr/local/jpeg/bin

mkdir /usr/local/jpeg/lib

mkdir /usr/local/jpeg/include

mkdir /usr/local/jpeg/man

mkdir /usr/local/jpeg/man/man1

./configure –prefix=/usr/local/jpeg –enable-shared –enable-static
make

make install

3、安装libpng:

tar -zxvf libpng-1.2.16.tar.gz

cd libpng-1.2.16

./configure –prefix=/usr/local/libpng

make

make install

4、安装freetype:

tar -zxvf freetype-2.3.3.tar.gz

cd freetype-2.3.3

./configure –prefix=/usr/local/freetype

make

make install

5、安装gd:

tar -zxvf gd-2.0.33.tar.gz

cd gd-2.0.33

./configure –prefix=/usr/local/gd –with-jpeg=/usr/local/jpeg –with-freetype=/usr/local/freetype –with-png –with-zlib

make

make install

6、安装curl:

tar -zxvf curl-7.16.1.tar.gz
cd curl-7.16.1

mkdir -p /usr/local/curl

./configure –prefix=/usr/local/curl –with-ssl

make

make install

7、安装libiconv:

tar -zxvf libiconv-1.11.tar.gz
cd libiconv-1.11

./configure –prefix=/usr/local/iconv

make

make install

8、正式安装PHP:

参数比较多,可根据需要安装,一般情况下这些已经够了。

tar -zxvf php-5.2.5.tar.gz

cd php-5.2.5
./configure –prefix=/usr/local/php –with-apxs2=/usr/local/apache/bin/apxs –with-config-file-path=/usr/local/apache/conf –enable-magic-quotes –with-openssl=/usr/local/ssl –with-zlib=/usr/local/zlib –with-zlib-dir=/usr/local/zlib –with-curl=/usr/local/curl –enable-ftp –with-openssl-dir=/usr/local/ssl –with-gd=/usr/local/gd –with-jpeg-dir=/usr/local/jpeg –with-png-dir=/usr/local/libpng –with-freetype-dir=/usr/local/freetype –enable-gd-native-ttf –enable-mbstring –with-mysql=/usr/local/mysql –with-pdo-mysql=/usr/local/mysql –enable-soap –enable-sockets –enable-zip –with-iconv –enable-zend-multibyte –with-mysql-sock=/tmp/mysql.sock –enable-sqlite-utf8

make

make test

make install

cp php.ini-dist /usr/local/apache/conf/php.ini

9、安装ZendOptimizer-3.3.0a

tar -zxvf ZendOptimizer-3.3.0a-linux-glibc21-i386.tar.gz
cd ZendOptimizer-3.3.0a-linux-glibc21-i386

./install.sh

安装过程中指定ZendOptimizer的安装目录及php.ini所在的路径即可

10、让apache支持PHP:

vi /usr/local/apache/conf/httpd.conf

在最后加上:

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps
将<Directory “/usr/local/apache/htdocs”>修改为:

<Directory “/home/dingl/php-web/test”>

修改DocumentRoot为”/home/dingl/php-web/test”

在此目录下新建index.php文件,内容如下:

<?php phpinfo()?>
打开http://192.168.1.xx/index.php即可看到php的信息,说明php安装成功

重启服务器即可看到Apache与Resin同时启动了,使用http://www.dingl.com/即可正常访问!

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(四)

四、JAVA环境的安装

JSP容器我推荐使用Resin,一是作为生产环境Resin比Tomcat更加优秀,二是我对Resin比较熟,使用已经有6年之久。

当然,也可以同时安装Resin和Tomcat与Apache一起使用。此次安装同时也安装了Tomcat,不过没有与Apache结合,直接使用非80端口提供服务。鉴于Tomcat安装更加简单,此系列文章不包含Tomcat的安装。

1、安装jdk

chmod 755 jdk-1_5_0_11-linux-i586.bin

./jdk-1_5_0_11-linux-i586.bin

cp -r jdk1.5.0_11 /usr/local/java

2、修改环境变量:

vi /etc/profile

在最后加上:

JAVA_HOME=/usr/local/java

export JAVA_HOME

PATH=”${JAVA_HOME}”/bin:/usr/local/mysql/bin:”${PATH}”

export PATH

3、安装resin:

tar -zxvf resin-pro-3.1.3.tar.gz

cd resin-pro-3.1.3

./configure –with-apache=/usr/local/apache

make

make install

cp -r /home/dingl/soft/resin-pro-3.1.3 /usr/local/resin

cd /usr/local/resin

4、修改环境变量:

vi /etc/profile

JRE_HOME=”${JAVA_HOME}”/jre

export JRE_HOME

CLASSPATH=.:”${JAVA_HOME}”/lib/tools.jar:”${JAVA_HOME}”/lib/dt.jar

export CLASSPATH

RESIN_HOME=/usr/local/resin
export RESIN_HOME

CLASSPATH=”${RESIN_HOME}”/lib/resin.jar:”${CLASSPATH}

export CLASSPATH

PATH=”${JAVA_HOME}”/bin:/usr/local/mysql/bin:”${PATH}”

export PATH

5、配置resin启动环境:
退出重新用root登陆ssh

vi /usr/local/resin/bin/httpd.sh

修改

exec $java -jar ${RESIN_HOME}/resin.jar $*

exec $java -jar ${RESIN_HOME}/lib/resin.jar $*

并在此行上面加:
JAVA_HOME=/usr/local/java

export JAVA_HOME

RESIN_HOME=/usr/local/resin

export RESIN_HOME

PATH=${JAVA_HOME}/bin:${PATH}

export PATH

6、测试resin:

/usr/local/resin/bin/httpd.sh
如果能正常打开http://www.dingl.com:8080/ 则说明resin安装成功

vi /usr/local/resin/conf/resin.conf

修改

<web-app id=”/” root-directory=”webapps/ROOT”/>

<web-app id=”/” root-directory=”/home/dingl/jsp-web/test/”/>
在/home/dingl/jsp-web/test/下新建一个index.jsp文件,内容如下:

2+2=<%=2+2%>

7、结合Apache和Resin:

vi /usr/local/apache/conf/httpd.conf

将DocumentRoot “/home/dingl/php-web/test”修改为DocumentRoot “/home/dingl/jsp-web/test”

再加上以下一段:

<Directory “/home/dingl/jsp-web/test”>
Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

增加welcome文件列表,修改

<IfModule dir_module>

DirectoryIndex index.html

</IfModule>

<IfModule dir_module>
DirectoryIndex index.html index.jsp index.php index.htm

</IfModule>

重启resin及apache(注意一个重启顺序,先Resin再Apache):

/usr/local/resin/bin/httpd.sh restart

/usr/local/apache/bin/apachectl -k restart

分别访问:
http://www.dingl.com:8080/index.jsp

http://www.dingl.com/index.jsp

浏览器显示2+2=4说明apache与resin整合成功

8、让resin随系统一起启动

resin在Ubuntun下的自启动按照官方文档是不行的,但是fedora core下是可以的。具体如下:

cp /usr/local/resin/bin/httpd.sh /usr/local/resin/bin/resin-a.sh

然后测试使用resin-a.sh是否能正常启动并停止服务:

/usr/local/resin/bin/resin-a.sh start

/usr/local/resin/bin/resin-a.sh stop

如果不行,则路径配置有误。

cp /usr/local/resin/bin/resin-a.sh /etc/init.d/resin

cd /etc/init.d

update-rc.d resin defaults

重启服务器即可看到Apache与Resin同时启动了,使用http://www.dingl.com/即可正常访问!

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(五)

五、安装Rails环境

Rails环境使用Mongrel架设。

1、安装ruby
tar -zxvf ruby-1.8.6.tar.gz

cd ruby-1.8.6

./configure –prefix=/usr/local/ruby

make

make install

将ruby加入PATH

vi /etc/profile
RUBY_HOME=/usr/local/ruby

PATH=”${RUBY_HOME}”/bin:”${JAVA_HOME}”/bin:/usr/local/mysql/bin:”${PATH}”

export PATH

退出root,重新用root登陆,验证ruby是否安装成功

ruby -v

显示版本号,说明安装成功

2、安装gem
tar -zxvf rubygems-0.9.4.tgz

cd rubygems-0.9.4

ruby setup.rb

rubygems-0.9.5好像有问题,无论gem什么包都说ssl没有安装,重新安装个rubygems-0.9.4就没问题了。

3、安装rails/mongrel/termios

apt-get install libssl-dev

gem install rake –include-dependencies
gem install rails –include-dependencies

gem install termios –include-dependencies

gem install mongrel –include-dependencies

gem install mongrel_cluster –include-dependencies

生成一个默认站点(或者将已经开发的网站上传,并配置好数据库)后,转到站点目录

mongrel_rails cluster::configure -e production -p 8000 -N 3 -c /home/dingl/rails-web/ -a 127.0.0.1

在database.yml中配置好数据库,这里是生产环境,配置production段。

如果需要使用socket方式连接mysql,增加:
socket: /tmp/mysql.sock

同时还可以指定数据传输编码:

encoding: utf8

4、启动mongrel:

mongrel_rails cluster::start

如果出现以下错误:
Cannot find gem for Rails ~>1.2.3.0:

Install the missing gem with ‘gem install -v=1.2.3 rails’

则修改config/environment.rb里rails的版本号即可

5、配置Apache与Mongrel:

修改apache的配置文件:

vi /usr/local/apache/conf/httpd.conf
在文件最后增加一个虚拟主机:

<VirtualHost *:80>

ServerName http://www.dingl.com/

RewriteEngine On

DocumentRoot /home/dingl/rails-web/

ProxyRequests Off
<Proxy balancer://mongrel_cluster>

BalancerMember http://127.0.0.1:8000/

BalancerMember http://127.0.0.1:8001/

BalancerMember http://127.0.0.1:8002/
</Proxy>

ProxyPass balancer://mongrel_cluster/images !

ProxyPass balancer://mongrel_cluster/stylesheets !
ProxyPass balancer://mongrel_cluster/javascrits !

ProxyPass / balancer://mongrel_cluster/

ProxyPassReverse / balancer://mongrel_cluster/

ProxyPreserveHost on
</VirtualHost>

重启Mongrel_cluster和Apache,然后在IE中打开http://www.dingl.com/就可以正常访问了。

注意,这里不能使用http://www.dingl.com:8000等直接访问,因为Mongrel配置为127.0.0.1,只能使用http://127.0.0.1:8000访问。

6、将mongrel设为随系统一同启动:

ln -s /home/dingl/rails-web/config/mongrel_cluster.yml /etc/mongrel_cluster/app.yml
cp /usr/local/ruby/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/resources/mongrel_cluster /etc/init.d/mongrel_cluster

cd /etc/init.d

chmod +x mongrel_cluster

vi /etc/init.d/mongrel_cluster

在CONF_DIR之上加入一行:

PATH=/usr/local/ruby/bin:/usr/local/ruby/lib/ruby/gems/1.8/gems/mongrel_cluster-1.0.5/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local:/usr/local/sbin:/usr/local/bin

这里要写完整的路径,不要引入另外一个变量

下面的USER=mongrel一行可根据需要设置一个用来启动的用户,如果没有创建mongrel用户,可修改为USER=root
update-rc.d -f mongrel_cluster defaults

重启服务器后,能正常使用http://www.dingl.com/访问Rails应用了。

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(六)

作为生产环境,经常需要使用SSL来支持https协议,这部分主要为Apache增加SSL支持。

六、配置apache支持ssl:

1、修改Apache配置文件:

vi /usr/local/apache/conf/httpd.conf

确保两面这行没有被注释:

LoadModule ssl_module modules/mod_ssl.so

Include conf/extra/httpd-ssl.conf

再配置一个虚拟主机(可配置成xxx.dingl.com,根据购买的SSL证书设置):
<VirtualHost *:80>

ServerName www.dingl.com

DocumentRoot /home/dingl/jsp-web

ResinConfigServer localhost 6800

AddHandler caucho-request jsp
AddHandler caucho-request xtp

AddHandler caucho-request vm

</VirtualHost>

2、修改ssl配置文件:

vi /usr/local/apache/conf/extra/httpd-ssl.conf

dingl.com修改成如下形式:

Listen 443

AddType application/x-x509-ca-cert .crt

AddType application/x-pkcs7-crl .crl

SSLPassPhraseDialog builtin

SSLSessionCache “shmcb:/usr/local/apache/logs/ssl_scache(512000)”
SSLSessionCacheTimeout 300

SSLMutex “file:/usr/local/apache/logs/ssl_mutex”

##

## SSL Virtual Host Context

##

<VirtualHost _default_:443>

# General setup for the virtual host

DocumentRoot “/home/dingl/jsp-web”

ServerName www.dingl.com:443

ServerAdmin you@example.com

ErrorLog “/usr/local/apache/logs/error_log”

TransferLog “/usr/local/apache/logs/access_log”

# SSL Engine Switch:

# Enable/Disable SSL for this virtual host.

SSLEngine on

SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL

SSLCertificateFile “/usr/local/apache/conf/dingl.com.crt”
#SSLCertificateFile “/usr/local/apache/conf/server-dsa.crt”

SSLCertificateKeyFile “/usr/local/apache/conf/dingl.com.key”

#SSLCertificateKeyFile “/usr/local/apache/conf/server-dsa.key”

#SSLCertificateChainFile “/usr/local/apache/conf/server-ca.crt”

#SSLCACertificatePath “/usr/local/apache/conf/ssl.crt”

#SSLCACertificateFile “/usr/local/apache/conf/ssl.crt/ca-bundle.crt”

#SSLCARevocationPath “/usr/local/apache/conf/ssl.crl”

#SSLCARevocationFile “/usr/local/apache/conf/ssl.crl/ca-bundle.crl”

#SSLVerifyClient require

#SSLVerifyDepth 10

ResinConfigServer 127.0.0.1 6800

AddHandler caucho-request jsp

AddHandler caucho-request xtp

AddHandler caucho-request vm

<FilesMatch “\.(cgi|shtml|phtml|php)$”>

SSLOptions +StdEnvVars

</FilesMatch>
<Directory “/usr/local/apache/cgi-bin”>

SSLOptions +StdEnvVars

</Directory>

BrowserMatch “.*MSIE.*” \

nokeepalive ssl-unclean-shutdown \

downgrade-1.0 force-response-1.0

CustomLog “/usr/local/apache/logs/ssl_request_log” \

“%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \”%r\” %b”

</VirtualHost>

这时即可通过http://www.dingl.com/访问了。

Ubuntu 7.1 server从无到有搭建全能WEB生产环境(七)

作为服务器对外提供服务,不能不安装防火墙,这部分为Ubuntu7.1配置iptables。

在网上查看了很多关于Ubuntu下防火墙配置的文章,感觉都很麻烦。

在desktop版下,可以使用firestarter来配置iptables。

在server中也有shorewall工具来配置。

仔细研究了一下iptables的配置,发现都是使用iptables命令来配置规则,同时发现网上有朋友直接使用脚本配置规则。于是,依样画葫芦也搞了个脚本,这样省事,而且与Fedora Core命令行下的配置类似。

创建/etc/init.d/firewall文件:

vi /etc/init.d/firewall

放到/etc/init.d下的原因是方便自动启动。

脚本如下:

#!/bin/bash

# This program is used to use start my iptables.

#History :

# Sat Jun 17 23:22:01 CST 2006 Jerry Second realease

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:~/bin
export PATH

case “$1″ in

start)

echo -n “Staring FireWall … ”

# /sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT ACCEPT

/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A INPUT -p icmp -m icmp –icmp-type 8 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp –dport 22 -j ACCEPT

/sbin/iptables -A INPUT -p tcp -m tcp –dport 80 -j ACCEPT

/sbin/iptables -A INPUT -p all -m state –state ESTABLISHED,RELATED -j ACCEPT

/sbin/iptables -A INPUT -p all -m state –state INVALID,NEW -j DROP

echo “OK”

;;

stop)

echo -n “Stop FireWall … ”

/sbin/iptables -F

/sbin/iptables -X

/sbin/iptables -Z
echo “OK”

;;

restart)

/etc/init.d/firewall stop

/etc/init.d/firewall start

echo “Restart FireWall OK”
;;

*)

echo “Usage: $0 {start|stop|restart}”

esac

exit 0

如果想新开端口,直接修改start部分即可。

测试firewall是否能正常工作:

/etc/init.d/firewall restart

没有问题。

配置firewall随系统自动启动:

cd /etc/init.d

update-rc.d firewall defaults 01

01表示启动优先级,让系统刚启动时就立即启动防火墙规则,可修改所有的K01为K99,在关机或重启服务器时最后停止防火墙服务。

至此,本系统文章全部完毕。

作为生产环境,以上配置基本足够了,能跑目前流行的各种应用,包括N多的开源或免费的应用,如BBS、CMS、Blog等。

完 …

Virtual Box的安装和问题集

本文转自:http://www.alexgao.com/blog/index.php

1.sudo install apt-get VirtualBox

2.新立得安装或网站上下载的编译安装完后,直接从”系统工具”就可运行Inntek VirtualBox了

3.现在需将当前使用用户添加到vboxusers组中(如果没做这个用户组设定的话您运行VirtualBox会报一个权限错:
VirtualBox kernel driver not accessible, permission problem)

sudo usermod -G vboxusers -a user

user是你的用户名,然后重启电脑.否则运行会说你没有权限.

4.Virtualbox中安装winXP

我选择的是DeepinXP-V5.5.iso版本(217MB),接下来开始安装前的配置:

1) 选择New –next 如图3

创建你的guest机名字和选择系统类型

然后选择内存大小,一般默认192够了.

2) 选择guest机的虚拟硬盘大小.第一次运行当然选New新创建啦,点Next>

一路点Next>
选硬盘文件类型,上面一种: 不固定硬盘文件大小,随着系统扩大硬盘文会相应当扩大;下面一种: 固定硬盘文件的大小.其他点Next.完成配置

3) 安装操作系统XP
选择File–virtualbox disk manager ,在CD/DVD Images中add你安装文件.iso

接下来启动虚拟系统start,接下来就像真的硬盘安装系统一样啦..!!不过我感觉要比真实安装要快.

4)进入系统后直接就可以上网了(前提是你的host联网)..不过你是否发现guest中没又声音,哈哈不要急,关闭guest,在settings–Audio中选择driver就行了,顺便把USB也选上吧.

5)Start 尽情享受同时运行2个系统带来的乐趣吧!

5.安装VBoxGuestAdditions

进入guest你会发现鼠标只能在guest中使用,而要切换出来需要按右Crtl,比较不方便

打开虚拟机,点击菜单 Devices -> Install Guest Additions 点Nest>完了后重启guest

这样guest和host之间可以自由切换鼠标, 就像普通的应用程序窗口那样

如果点击Install Guest Additions没有反应?
进入guest,选择Devices->UMount CD/DVD-ROM,然后再点击Install Guest Additions就行了。

在虚拟机窗口点击菜单 VM -> Auto Resize Guest Display
拖动改变虚拟机窗口大小, 虚拟机分辨率会自动调整适应。全屏下”右 “crtl+f切换到窗口

6. host与guest文件共享图形工具

$sudo apt-get install vboxsharedfolder

此软件在本论坛置顶:vbox下的图形化共享工具

7.guest的备份很简单,只要把/home/…../.VirtualBox/VDI/NewHardDisk1.vdi 文件备份下就行了.

二 已知常见问题:
1Q 不能运行,即点击virtualbox后没反应;
A 已知都是内核模块没加载,运行命令
CODE:

#dmesg | grep vboxdrv
# vboxdrv: disagrees about version of symbol struct_module

产生原因是进行了内核或者头文件单一升级,造成头文件与内核不符合,直接强制加载内核模块即可解决:

CODE:
sudo modprobe -f vboxdrv

使用这样的方式要求每次host开机后都要手动运行一次,很不方便,要使内核与模块相符合,可以:
1 如果你只是进行了头文件升级,只需要再次升级内核就可以了;
2 如果是升级的内核,需要先更新头文件后重新安装VirtualBox。

2Q 终端运行VirtualBox命令出现COM权限错误;
A 主要产生原因是不是用deb包安装而是用run包安装后,第一次使用时就 sudo VirtualBox命令运行造成在用户目录下的配置文件被修改成root了。可以手动修改权限回来,但是建议重新安装deb包;

3Q 不知道如何与主机通信;
A VirtualBox主要采用smb与主机通信,缺省采用NAT的方式,自带DHCP服务,因此客户端不要要进行任何设置。默认得到的客户端ip是 10.0.2.15,网关是10.0.2.2,DNS是10.0.2.3,可以手动如此修改。但是,一般只要重启一次主机后自带的DHCP就会生效的。对 主机资源

PuTTY 中文教程

PuTTY 中文教程

作者:柴锋 2006年11月

Web:http://www.chaifeng.com

email: putty-tutorial [0x40] chaifeng [0x2E] com

Links:http://docs.google.com/View?docid=ajbgz6fp3pjh_2dwwwwt

更新记录

  • 2006-11-29初步完成想写的这些东西
  • 2007-06-11
    PuTTY 的最新版本到了0.6;修改了一下 SSH 隧道;添加了 SSH 反向隧道;添加了用 SSH 做代理服务器;
  • 2007-09-03
    补充了几个 FAQ

版权声明

This document is licensed under a Creative Commons License.

Creative Commons Deed 署名 2.5

Creative Commons Attribution 2.5
您可自由:

  • 复制、发行、展览、表演、放映、广播或通过信息网络传播本作品
  • 创作演绎作品
  • 对本作品进行商业性使用

惟须遵守下列条件:

署名. 您必须按照作者或者许可人指定的方式对作品进行署名。

  • 对任何再使用或者发行,您都必须向他人清楚地展示本作品使用的许可协议条款。
  • 如果得到著作权人的许可,您可以不受任何这些条件的限制。

您的合理使用以及其他权利不受上述规定的影响。

这是一份普通人可以理解的法律文本(许可协议全文) 的概要。

免责声明

序言


懒,是一个优点,有些时候还是要学一学才能会了的。


—— 柴锋(1979- )

我的这些文字是从这几年来的 PuTTY 使用经验中慢慢得来的,也不仅仅是介绍 PuTTY,还包括了一些相关的软件,比如:优秀的 FTP 工具 FileZilla、功能强大的 SFTP 客户端 WinSCP。

杂七杂八的乱说了一些,这里把大致内容罗列如下:

  • 最简单的使用,登录 SSH 主机
  • 中文乱码的处理
  • PuTTY 常用配置的说明
    • 复制、粘贴
    • 保存会话
    • 注销
    • 自动登录用户名
    • 自动设置环境变量
    • 设置代理服务器
    • 自动执行命令
    • 备份、删除 PuTTY 的设置
  • PuTTY 的 X11 转发
  • 如何用 PuTTY 建立 SSH 隧道
  • 如何用 PuTTY 建立反向的 SSH 隧道,像个特洛伊木马一样突破防火墙
  • 把 PuTTY 作为一个安全的代理服务器
    • 安全的上网不被嗅探
    • 避免 MSN 等聊天工具被监听
  • 怎样用 PSCP、PSFTP 安全的传输文件
    • 功能强大的 SFTP 客户端 WinSCP
  • 用 PuTTYgen 生成密钥,登录 SSH 主机不再需要口令
  • Pagent 代理密钥,每次开机只需要输入一次密钥口令
  • Plink 简单而又迅速的执行 SSH 主机上的程序
  • 常见问题

除了上面的这些,还夹杂了一些 PuTTY 使用上的技巧、服务器配置的一些安全建议。说起来这是一些有关 PuTTY 的使用教程,其实也就是 SSH 的参考教程,绝大多数的内容在其他系统或软件上也都是一样的。不同的是参数、配置、命令行之类的,只要会了一个,其他也就触类旁通了。

一些基本知识

如果你已经知道 SSH、Telnet、Rlogin 这是什么,就跳过这一部分,看下面的吧。

(以后补充,暂时空下)

简介

PuTTY 的官方网站:http://www.chiark.greenend.org.uk/~sgtatham/putty/,截止到 2006年11月,发布的最高稳定版本是 0.58 2007年6月,发布的最高稳定版本是 0.6。

PuTTY 是一个跨平台的远程登录工具,包含了一组程序,包括:

  • PuTTY (Telnet 和 SSH 客户端)
  • PSCP (SCP 客户端, 命令行下通过 SSH 拷贝文件,类似于 Unix/Linux 下的 scp 命令)
  • PSFTP (SFTP 的命令行客户端,类似于 FTP 的文件传输,只不过使用的是 SSH 的 22 端口,而非 FTP 的 21 端口,类似于 Unix/Linux 下的 sftp 命令)
  • PuTTYtel (仅仅是一个 Telnet 客户端)
  • Plink (命令行工具,执行远程服务器上的命令)
  • Pageant (PuTTY、PSCP、Plink 的 SSH 认证代理,用这个可以不用每次都输入口令了)
  • PuTTYgen (用来生成 RSA 和 DSA 密钥的工具).

虽然包含了这么多,但平时经常见到只是用 PuTTY 登录服务器,完全没有发挥出 PuTTY 的强大功能。

PuTTY 作为一个组件也存在于很多的软件中,比如 FileZilla、WinSCP

在后面的文字中,如非特别说明,默认的登录的协议是 SSH。毕竟用 PuTTY 主要就是登录 SSH 主机,用 Telnet、RLogin 没法体现出 PuTTY 的强大功能。

安装

下载页面在这里:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

PuTTY 需要安装么?需要么?需要么?真的需要么?不需要。PuTTY 是一个准绿色软件,说它绿色是因为直接就能使用,完全没有任何的安装程序。准绿色是指 PuTTY 的所有配置都保存到了注册表,如果不记得备份注册表中的相关内容,下次重装机器所有配置就没了,而且配置也不方便用闪存盘随身携带。但是 PuTTY 的配置删除还是蛮方便的,运行时指定个参数 -cleanup 就可以清除 PuTTY 的所有配置信息。

第一印象,开始登录一台远程主机

运行 PuTTY 就可以看到下面这个界面

在这里输入服务器的 IP 或主机名,选择好登录协议,还有协议的端口,如果希望把这次的输入保存起来,以后就不需要再重新输入了,就在第4步输入好会话保存的名称,比如:mail-server,或者干脆就是主机的地址,点击保存就可以了。

最后点下面的 Open 按钮,输入正确的用户名和口令,就可以登录服务器了。

首次登录一台主机时

第一次登录时,会看到这个对话框

这是要告诉你登录的主机密钥指纹,点 Yes 就保存起来,以后就不会再弹出这个窗口,然后就正常登录。点 No 不保存,下次还是要提示你,然后也可以正常登录。如果一台主机我们只是临时登录一下,当然就是点 No 了。Cancel 就是取消,也就是取消了这次登录。

如果你曾经登录过这台主机,但是又弹出来这个对话框,可能有以下几种情形:

  • 主机重新安装了操作系统
  • 这台主机可能有多个IP,这次用的是另外一个 IP
  • 有其他不怀好意的主机来冒充,诱骗我们登录,窃取隐秘信息

前两个情形很常见,一般点 Yes 就行了。后面这个嘛……唔……唔……,点 No/Cancel,再去询问相关的主机管理人员。

又看到了中文乱码

成功登录主机后,输入命令,这……这……显示,又是乱码。唉,中文乱码是一个老生常谈的问题,提起来就头大。原因嘛,不外乎字符集、终端编码之类的,还是可以解决的。

PuTTY 的默认字体和字符集并不适合中文显示, 在窗口标题上点击右键,选择 Change Settings…

在打开的配置窗口左边选择 Appearance,在右边点 Font settings 里面的 Change 按钮,选择好中文字体,比如:宋体、新宋体之类的

字体选择好了,还要确定字符集。

选择配置窗口左边的 Translation,在右边的 Received data assumed to be in which character set 下拉列表中选择最后一个“Use font encoding”,最后点下面的 Apply 按钮就生效了。

重新执行命令 ls -l,就可以正常看到中文了

怎么还是乱码?

如果还是乱码的话,就执行以下命令,看看系统的字符集

echo $LANG $LANGUAGE

哦,原来系统的字符集是 UTF-8 呀。重新返回上面选择字符集的那一步, 选择配置窗口左边的 Translation,在右边的 Received data assumed to be in which character set 下拉列表中选择“UTF-8”

这下99%的情形下,汉字是不会有乱码了。最后,总之一下 PuTTY 中乱码的解决办法:

先看看系统的字符集,如果是 UTF-8 的,那就简单了,选择好中文字体,然后编码选择 UTF-8 就行了。

如果编码是 GB2312、GBK、GB18030,当然也包括 BIG5这些,在 PuTTY 的编码选择中看不到这些编码,那就选择最后一个“Use font encoding”,绝大部分情况下这样就没啥问题了,反正我是没碰到有什么例外的情况。

现在的 Linux 如果默认语言选择为中文,默认的编码就是 UTF-8 了。以前安装 Redhat AS 3 时,语言选择为中文,默认的编码是 zh_CN.gb2312, zh_CN.gb18030,好像从 AS 3 update 6 开始,包括现在的 AS4、AS5,中文的默认编码都成了 zh_CN.utf8。至于 Debian、Ubuntu 等等这些上面,好像一直都是 UTF-8。

至于是使用 UTF-8呢,还是用 GB2312、GBK 或者 GB18030呢?我个人还是倾向于 UTF-8。毕竟我们使用的大多数软件都是国外的,处理中文编码多多少少有些问题,PuTTY 自然也不例外。

下面的这个图上,我把终端编码修改为 zh_CN.utf8,然后也按照前面的所说的方法把 PuTTY 的字符集修改为 UTF-8。然后在终端中输入汉字“柴锋”,按左方向键,可以看到汉字显示很正常。

我重新把终端的编码修改为 zh_CN.gb2312,同样的,把 PuTTY 的字符集修改为最后一个“Use font encoding”。还是在终端上输入汉字“柴锋”,按下左方向键以后,会看到汉字乱码了。

至于用哪个编码,主要还是看领导的决定了,我们的领导就喜欢 GBK,连 GB18030 都不行。以前在用 Debian 的时候,好像默认都不支持 GBK 编码。这几年公司的开发在汉字编码问题上出过几次麻烦,还不就是在 ISO8859-1, GB2312/GBK/GB18030和UTF-8上折腾来折腾去。

给大家看一张 emacs 的截图,看看上面的这么多语言的文字共同显示,这个会是用 GB2312/GBK/GB18030 的编码么?

用 UTF-8 也不是为了要在一个屏幕上显示好几种不认识的文字,也不一定非要是跟国际接轨弄个外包给老外开发程序做个其他语言的界面让老外用,起码不要在那么多编码里折腾了,顶多两个 ISO8859-1 和 UTF-8。发发牢骚,下面继续……

在 PuTTY 里面怎样选中,复制和粘贴?

在 PuTTY 的窗口里面复制、粘贴可不能用 Windows 里的这些 Ctrl+C, Ctrl+Ins, Ctrl+V 这些快捷键,Ctrl+C 在控制台上可是终止当前的命令执行。

PuTTY 的选择、复制、粘贴这些操作都是通过鼠标来完成的。

在 Window-〉Selection 这里可以设置复制和粘贴的方式。

默认的 Action of mouse buttons (鼠标按键的功能)的选项是 Compromise,这种方式下选中有两种方式,一是直接用鼠标左键拖拉选中就可以了,二是用鼠标中键单击选中区域的开头,用滚动条拖拉到期望选中区域的末尾,再用鼠标中键单击,就可以选中了。

选中以后,单击鼠标左键就把选中部分复制到剪贴板了。粘贴也很简单,单击鼠标右键。

Action of mouse buttons 的第一个选项是 Windows (Windows 方式的),鼠标中键的操作跟前面提到的一样。右键不是粘贴了,而是打开了右键菜单。

其实这个右键菜单在标题栏上点击,也都可以看得到。

第三个选项是 xterm (xterm 方式),这个跟默认的 Compromise 方式相反的,中键和右键的操作调换了一下,就不多说了。

下面那个 Shift overrides application’s use of mouse 是和 Shift 键有关的。有些 Rogue Like 的程序,比如 mc、links、Lynx、VIM 等等,都支持鼠标操作,想在用鼠标在上面选择或粘贴就不行了。这个选项默认是选中的,在支持鼠标操作的 Rogue Like 界面下,按住 Shift 键,就可以像前面的那样用鼠标来选择、复制、粘贴了。

看下面的这个图片,用 Links 打开了 Google 的首页,用鼠标去选中 顶部中间的 Google,我们会发现,弹出了保存的对话框。

按住 Shift 键重新操作一次,哈哈,这次选中了。

在 Control use of mouse 里面还有个 Default selection mode (默认的选择模式),默认是 Normal,就像文字处理工具里这样的选择

另外一个是 Rectangular block(块选择方式),至于用哪种方式就看自己的选择了。

实时保存会话

这次更改配置参数了,关闭窗口后,下次使用还是要重新选择的,麻烦。

还是回到上面修改配置的哪个地方,选择左边的 Session,在右边选择要覆盖的会话名称,或者重新输入一个新的名称,点击 Save 按钮保存。

关于注销登录的一些事情

成功登录主机后,也能正常看到中文了。这样,我们就可以完成大部分的工作。最后要关闭窗口了,该怎么办呢?我见过很多人,包括我们公司负责专职维护的同事,都是直接点击窗口上的关闭按钮,完全没有理会弹出警告窗口,直接点击了 Yes。

这样做是不对的,首先这不是正确的注销方式,应该输入命令 exit 来正常注销;其次直接关闭窗口后,你的登录其实还在服务器上,如果一连多次的这样强制关闭窗口,用命令 w 或者 who 命令查看时,可以看到很多的用户还在系统上登录,占用了系统的资源。最重要的是,你的这次登录可能只是为了启动一下 WebLogic 或者其他什么应用服务器,直接关闭窗口后,可能会导致你的业务在随后的几分钟内也被终止,这应该不是你所希望看到的吧。

如果上述的理由是每次要输入 exit 然后回车,比较麻烦。你可以用快捷键 Ctrl+d 来注销登录,一般情况下,快捷键一按窗口都直接关闭了,还省了两次鼠标点击。

在前面说道保存会话时,大家或许也注意到,下面有个 Close window on exit 有三个选项:

  • Always (不管怎样,窗口总是要关闭的)
  • Never (无论是否有程序还在运行,都不要关闭窗口)
  • Only on clear exit (这个是默认选中的,只有在本次登录中运行的程序都正常终止或者在后台运行,窗口才关闭)

有的程序在执行时,虽然在命令最后面加上 “&”就能放到后台运行。但是正常注销登录后,窗口没有被自动关闭,还能看到程序的输出,这时强制关闭窗口还是可以的。为了避免这种情形,可以使用 nohup 命令。

用法嘛就是: nohup 命令 命令参数,这样就可以了。

窗口保存的输出有点少,前面的都看不到了

执行了一个命令,输出了好多东西,但是默认的配置下,PuTTY只保存了最后200行的内容,满足不了我们的需求。

还是在标题栏上点右键选择 Change settings…,在配置窗口的左边选择 Window,修改右边的 Lines of scrollback,改大点,比如 20000、80000的

在上面的 Set the size of the window 里设置的是窗口显示的行数和列数,默认是 24 行、80 列,根据自己的需要来修改吧。

When window is resized 这个选项配置的是,当窗口大小发生改变时该采取什么动作。

  • Change the number of rows and columns(这个是默认的,改变窗口大小时,自动修改行数和列数)
  • Change the size of the font(这个是根据窗口的大小来修改字体的大小,窗口最大化的时候,字都是很大的)
  • Change font size only when maximised(只有在窗口最大化的时候才改变字体大小)
  • Forbid resizing completely(完全禁止改变窗口大小,一了百了)

在现代的 Unix/Linux 主机上,默认选项已经不存在任何问题了。如果是 Solaris 8 这样的老式 Unix 上最好用第2或第4个选项。

第3个选项嘛,要求你的屏幕不是宽屏的,选中这个选项以后,大家可以先把窗口往窄的缩一下,然后最大化窗口,哈哈,满足一下不是宽屏的虚荣心。

顺便说一下,在 PuTTY 中的前后翻页,与 Linux 终端一样,用 Shift+PageUp/PageDown 来上下翻页,而 Ctrl+PageUp/PageDown 则是一行一行的。

新建一个会话时,还有些东西再啰嗦一下

前面把如何用 PuTTY 登录一台主机到注销的过程聊了一遍,但是在新建会话时还是有些东西需要再啰嗦一下的。

保持连接,不要自动断开

在 Connection 里面有个 Seconds between keepaliaves,这里就是每间隔指定的秒数,就给服务器发送一个空的数据包,来保持连接。以免登录的主机那边在长时间没接到数据后,会自动断开 SSH 的连接。

默认输入 0 是禁用保持连接,在这里我习惯的设置了 10。

下面的那两个复选框都保持默认选中吧。

自动登录用户

在 Connection-〉Data 里面有个 Auto-login username,可以指定默认的登录用户。如果每次登录主机都是用同一个用户,不妨在这里设置一下。SSH、Telnet、Rlogin 这三种协议都支持,但不是所有的 Telnet 服务器支持自动登录用户

自动设置环境变量

还是前面的那个界面,下面有个 Environment variables,在 Variable 输入环境变量的名称,Value里设置上环境变量的值,登录主机后就会自动设置上,但是这个不一定能用,有些主机为了安全,可能会禁用这个特性,一旦登录就会收到这样一个错误提示:

Server refused to set environment variables

设置代理服务器

这个经常用到,设置方法大同小异,注意选择好 Proxy type(代理服务器的类型)就可以了。

代理服务器的地址填写到 Proxy hostname 这里,Port 就是代理服务的端口(HTTP代理常用端口有 3128、8080,Socks5代理常用端口有 1080)

Exclude Hosts/IPs 这里是填写排除的主机地址和IP,有些地址不需要代理,就在这里填写。

有些代理需要认证,用户名填写到 Username,密码则填写到下面的 Password。

自动执行一个命令

在 Connection-〉SSH 里有个 Remote command,在这里面填写上远程服务器上的某个命令,比如:df,登录后就会自动执行。

我们在 Unix 上用 ssh 登录主机时用的命令 ssh,在 ssh 的最后面加上远程主机上的命令,就跟这个一样。

但是……,先别着急,一旦设置上这个选项,你会发现在登录成功后,窗口一下就关闭了,嘿,怎么啦?什么也没看见。

因为命令执行完毕的同时,本次 SSH 登录连接也随之关闭。

你可以把远程自动执行的命令修改成 sleep 10,然后重新登录,再看看效果。

登录成功后,没有出现命令提示符,10秒钟后,窗口自动关闭。这也验证了刚才我说的,命令执行完毕后,SSH 连接自动断开。

冰雪聪明的你一定会想到,如果每次登录主机,都是要重新启动一下 tomcat,那这里就可以填写上这样的命令:

export CATALINA_HOME=”~/apache-tomcat-5.5.17″;export JAVA_HOME=”~/jdk1.5.0_07″;export PATH=$JAVA_HOME/bin;$PATH ; cd $CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail -f $CATALINA_HOME/logs/catalina.out

(上面的命令是一行的哦)

先自动设置一下环境变量(前面有提到,服务器可能会禁用自动设置环境变量,为了保险起见,在这里设置了一下),然后进入 tomcat 的 bin 目录,用 shutdown.sh 停止 tomcat,然后再 startup.sh 启动 tomcat,最后 tail 命令持续观察 tomcat 的日志输出,不想看了,就直接 Ctrl+C 就可以终止 SSH 的会话了。

哈哈,是不是很方便?

不过前面提到的命令 sleep 10,只是建立了 SSH 连接,然后 10 秒钟后自动断开。是不是觉得很无聊没什么用途啊?其实这个命令配合后面提到的 Tunnels(隧道),可以自动保持隧道一定时间的开放,如果指定时间内(在这里就是 10 秒钟)隧道没有被使用,就自动关闭 SSH 连接和隧道。

如果选中了 Don’t start a shell or command at all 就禁用了自动执行命令这一个特性,这个主要是配合 Tunnels (隧道)来使用的。因为有时候,我们只需要利用隧道建立一个 VPN,而并不需要登录上去执行命令。用这个方法建立好隧道以后,就一直开放了,除非自己手工关闭。

嗯,还有个问题哦,如果一次要执行的命令很多,该怎么办呢?嗯,给 PuTTY 用 -m 选项指定一个包含远程主机上执行的命令的文本文件。不过以后还会说到 Plink,就是专门做这个用的,慢慢来慢慢来。

数据自动压缩传输,变相的提高传输速率

还是前面的那个界面,Protocol options 里面有个 Enable compression,这个选项的意思就是传输时压缩数据,在连接速度不变的情况下,变相的提高了传输速率。一般的 SSH 服务器都会允许这个选项的,所以还是选中好了。

无需口令登录

在 Connection-〉SSH-〉Auth 这里面有两个需要了解的,以后在讲到 PuTTYGEN 和 Pagent 时会详细介绍的。

一个是 Allow agent forwarding,作用是允许私钥代理的转发。

另外一个是最下面的 Private key file for authentication,选择私钥认证文件。

这两个可以让你用 SSH 登录不用输入主机口令,但是私钥的口令还是需要输入的,如果使用了私钥代理 Pagent ,私钥口令也可以省略。再配合前面提到的自动指定用户名登录,可以实现自动登录主机。登录到主机上以后,用 SSH 登录另外一个同样配置了相同的 私钥认证的主机,也可以不用再次输入口令。

这些可以大大减轻了我们的重复工作,不用单调枯燥的输入用户名和口令,但是这样使用有个后遗症就是如果主机密码没有在另外一个地方记录下来的话,这个密码很快会忘记的,好处嘛,密码可以设置的很长很变态 XD。

X11 转发能够让你在 Windows 上使用 Linux 的程序

这里很简单,选中 Enable X11 forwarding 后登录主机,记得在我们本地运行 X 服务端程序(比如:免费好用的 Xming)。


然后在控制台直接输入 X 环境下运行的程序,比如:xlogo,我们就可以看到 Linux 上的GUI界面的程序在Windows桌面上打开了。

运行个复杂的,比如 gnome-session,这个是 GNOME 的启动命令,如果想打开 KDE 就是 startkde


这样跟在本地使用 X Window 几乎是一样的了,而且还是运行在 Windows 的桌面上呢,骗骗小 mm 还是不错的。或许你会问这样用跟 vnc 那还不一样了?答案是,不一样。如果网络环境不好,还是用vnc吧,否则迟钝的图形响应速度会让你抓狂的。

打开了 GNOME 桌面,怎么关闭呢?点菜单的注销吧。如果你点了关机,这可关不了你的Windows,关的是远程主机。

用 SSH Tunnels(SSH 隧道),突破防火墙

哇哦,突破防火墙!是不是忽然有了做黑客的感觉呢?呀!子弹,我躲——,身子往后仰,继续闪……,噢,肚皮被子弹蹭了一下。

简单的说一下,SSH 协议能够通过已经建立好的 SSH 加密链路来转发任意的网络连接,从而避免了网络中的明文传输,也就无法用一些 Sniffer 工具嗅探到我们的隐秘信息了。

先说一下大致的使用过程,登录到主机上以后,就可以建立好一个 SSH 隧道,这时在你的机器本地会开放一个端口,通过本地的这个端口访问,就相当于在主机上去直接访问。很像代理服务器吧,如果隧道另一端的端口是动态的,SSH 隧道就是一个代理了,SSH 隧道的意思大致就是这个。通过 SSH 隧道,我们可以保证从我们这一段到主机那一端是安全的,不会被监听到。

说了这么多,实际演练演练就知道了。在 PuTTY 的 Connection-〉SSH-〉Tunnels 这里就是配置 SSH 隧道的。
Add new forwarded port 这里就是添加隧道转发端口的,其中 Source port 是隧道的源端口,也就是隧道的入口,连接隧道时要连接这个端口。Destination 这里是目的地,隧道的出口,输入的格式是: server:port。
还要说明的一点是 SSH 隧道是有方向的,这个方向是由下面的单选按钮 Local/Remote/Dynamic 来决定的。如果下面的单选按钮选中的是 Local,那么 Destination 这里填写的目标是相对于远程主机而言,而非你的机器。这样的隧道可以称之为正向隧道,隧道的入口是在你的本地,出口在远程主机那一端。如果单选按钮选中的是 Remote,那么目标地址就是相对与你的机器而言,而非远程主机。这样的隧道称之为反向隧道,隧道的入口是远程主机那一端,隧道的出口则是你的本地机器。这与 Local 选项是相反的。而最后一个 Dynamic 则不用指明 Destination 目标地址,也就是说目标地址是动态的了,连入隧道时可以随意指定目标地址,而不像 Local/Remote 指明的固定目标地址,所以这样的隧道就成了变相的加密 socks5 代理服务器了。
看明白了么?是不是会有些糊涂?后面我会举个例子来详细说说的。

开始演练,我们现在建立一条到远程主机 guantouping 上端口 7001 的隧道,在 guantouping 上可以用 nc -l -p 7001 localhost 这条命令建立一个监听本地到端口 7001 的连接,这样确保无法从其他机器访问这台主机的端口,只能在 guantouping 这台主机上用 telnet localhost 7001 来连接。现在我的机器 IP 是 192.168.6.25,如果直接用命令 telnet guantouping 7001 访问的话,那么在主机 guantouping 上会看到这样的提示:

[taylor@guantouping taylor]$ nc -l -p 7001 localhost

invalid connection to [192.168.6.200] from (UNKNOWN) [192.168.6.25] 1926

在这个配置面板上, Source port 上填写 8080,也就是我们要通过本地的 8080 端口来进入 SSH 隧道, Destination 这里填上 127.0.0.1:7001,就表示被登录的主机 guantouping 访问该主机本地的 127.0.0.1:7001 这个端口。正常登录到主机 guantouping 以后,SSH 隧道就建立好了。在我的机器 192.168.6.25 上输入命令 telnet localhost 8080,输入一些东西,就会在 guantouping 上看到有响应。在这里我用的是 nc,看起来方便一点,telnet 也是一样的。


这就是正向 SSH 隧道的一个例子,大家实地操作几次也就会明白了。最上面有个复选框是“Local ports accept connections from other hosts”,这个选项的作用是允许其他主机连接你机器上的隧道入口,默认情况下建立好隧道以后,只允许本地链接。只有选中这个复选框才允许其他主机连接你的本地隧道入口。

象特洛伊木马一样建立一条 SSH 反向隧道

下面要说的就是选中单选按钮 Remote 后建立的反向 SSH 隧道,这样的隧道做什么用呢?一般防火墙都是允许从内往外链接,而不允许从外到内的链接,除非在防火墙上做好nat或端口转发。现在,你在防火墙的内部,但是又想让外面的人链接到你的机器上。防火墙厚厚的城门紧闭,外面的人进不来,只有你能从里面打开这扇防护严密的大门,就像一个特洛伊木马一样,你主动连接出去建立一个反向的 SSH 隧道,然后外面的人就可以通过这个反向的 SSH 隧道轻松突破防火墙链接到的你的本地机器。看下面这个图:

在 Source port 这里填写 8080,也就是隧道的入口是端口8080,Destination 这里填写 localhost:7001,也就是隧道的出口是本地的 7001 端口,下面的单选按钮要选中 Remote,表示建立的隧道是个反向隧道,填写完毕别忘记点 Add 按钮,在上面就可以看到显示的是 R8080 localhost:7001。成功登录远程主机 guantouping 后,反向隧道就建立好了。在远程主机 guantouping 上输入命令 telnet localhost 8080 就可以连接到你的本地端口7001。

哈哈,这样一个特洛伊木马般的反向 SSH 隧道就建立完毕了。我们在远程主机上连接 8080 端口,其实就连接到了我们本地机器的7001 端口了。上面共有两个复选框,我们提到了一个,已经说了,选中以后就允许其他机器连接隧道入口了。那第二个“Remote ports do the same (SSH-2 only)”,则是给反向隧道使用的,也就是说远程主机的那个反响隧道入口也做同样的事情,也就是允许其他机器连接远程主机上的反向隧道入口,不过一般情况下这个选项都不会起作用的 ^_^。

把 PuTTY 作为一个安全的代理服务器来使用

这个简单,在 Source port 那里填写上 1080,Destination 这里空下不填,选中下面的 Dynamic,最后别忘了点 Add 按钮。

登录远程主机后,一个代理服务器就建立好了,这个代理服务器的地址就是 localhost:1080,还是加密的哦。据说国外某著名的主机供应商就提供远程的 SSH 链接,通过这个方法我们就建立了一个加密的 socks5 代理,可以轻松绕过万恶的 GFW 去拥抱 Wikipedia,波~~~,来一口。

设置 PuTTY 的默认设置

每次登录主机,无一例外的修改字体,修改字符集,修改窗口的大小,指定私钥文件,允许 X11 转发,……

几台主机还好说,几十个上百个主机这样三天两头的设置也会让唐僧烦了的。

选中一个先前配置好的会话,点 Load 按钮。

然后修改Saved Sessions会话名称 和 Host Name 这里的主机地址,点Save

如果在 Saved Sessions 这里和上面的 Host Name 清空,点 Save 按钮,就可以把设置保存为默认设置。

备份 PuTTY 的设置

用 PuTTY 最不爽的就是,它把所有的设置都保存到注册表了,本来这不是什么问题。但是难免会重装一下机器,用下面的命令可以备份 PuTTY 的所有设置

regedit /e PuTTY.config.reg “HKEY_CURRENT_USER\Software\SimonTatham\PuTTY”

删除 PuTTY 的设置

如果只是在其他机器上临时用了一个 PuTTY,用完以后想删除 PuTTY 的配置,就在控制台里输入如下的命令:

putty.exe -cleanup

用 PuTTYgen 来生成密钥,以后可以不用密码登录服务器了

PuTTYgen 是密钥生成器,用来生成一对公钥和私钥供 PuTTY、PSCP、Plink、Pagent 来使用。

直接运行 PuTTYgen 可以看到如下的界面。

点击 Generate 按钮就开始生成一个公钥和私钥对,生成完毕后,点下面的 Save private key 就可以把私钥保存起来,扩展名是 .ppk 的文件。

Load 按钮可以把先前保存的私钥重新打开,然后做些修改,比如修改注释和私钥口令,或者把 PuTTY 格式的私钥转换为 OpenSSH 格式的。

开始用 PuTTYgen 创建密钥

单击 Generate 按钮,然后你会看到进度条上面有个提示“Please generate some radomness by moving the mouse over the blank area.”,意思就是让你用鼠标在空白区域随机移动。随着鼠标在空白区域的移动,进度条会一直走下去。停止移动鼠标,进度条也就停止了。那我们就移动鼠标,直到进度条走满为止。

等进度条走完之后,会出现下面的界面

最上面那个大大的只读文本框里面是公钥,用来保存到 OpenSSH 的 authorized_keys 文件中,这个文件中的每一行都是一个公钥。默认情况下,这个文件位于 Linux 用户主目录的 .ssh/ 子目录中,如果文件和目录都不存在,可以直接创建。

但是创建的文件、目录和用户主目录($HOME, $HOME/.ssh, $HOME/.ssh/authorized_keys)的权限有个限制就是对除了本帐户的其他所有帐户都要求是只读的,否则的话,即使公钥、私钥都匹配无误,也是无法登入系统的。这是 SSH 服务器的一个安全要求,因为如果别的帐户可以修改你的 authorized_keys 的话,恶意的增加一个公钥,那对方不用你的帐户口令也能以你的帐户登入系统了。对于一些特殊要求,你可以在 SSH 服务器的配置文件 sshd_config 中用指令

StrictModes no

来取消这个限制。在 sshd_config 的帮助手册中可以看到

StrictModes
Specifies whether sshd should check file modes and ownership of

the user’s files and home directory before accepting login. This

is normally desirable because novices sometimes accidentally

leave their directory or files world-writable. The default is

“yes”.

小技巧:每次修改 authorized_keys 这个文件时,你可以用如下的命令来修改,确保所有的文件属性和权限无误

mkdir -p $HOME/.ssh && touch $HOME/.ssh/authorized_keys \

&& chmod go-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys && vim $HOME/.ssh/authorized_keys

还有一个要强调的是那个 Key comment,这是密钥的注释,一定要修改。因为这个密钥是给自己用的,所以最起码要输入自己的名字,用默认的注释很容易和其他人的密钥混淆的。如果担心自己的密码忘记了,可以在后面加上密码提示,当然了,不要让别人用注释猜出你的密钥口令。比如,我可以把注释修改为

ChaiFeng [20061120] w.z.

后面的 w.z. 就是我的密码提示,能猜出来么?呵呵

输入注释,上面的公钥也会随之发生变化。

现在最重要的是,输入自己的密钥口令。就是 Key passphrase 和 Confirm passphrase 这个两个输入框。

如果不输入口令,直接保存私钥会看到这个提示。为了安全起见还是输入口令吧,要不任何人得到这个私钥都可以不用口令登入系统了。

最后单击 Save private key 来保存私钥吧,保存到自己认为安全的地方,比如存放到私人的 USB 闪存盘上。需要登录时,插上 USB 闪存盘。登录完毕后就可以把 USB 闪存盘取下来,哈哈,这样子就比较安全了。

大家也注意到了,还有个 Save public key 按钮,这个是保存 SSH2 格式的公钥,有些 SSH 服务器要求用这种格式的公钥文件。一般情况下,我们是不需要的,所以这里也就保存了。以后还想的话,就用 PuTTYgen 把私钥 Load 出来,然后再保存也可以。

用密钥登录服务器的流程

上面杂七杂八的说了一堆创建密钥时的事情,大家会不会已经有些乱了呢?我把这个过程再罗列一遍:

  1. 如果没有公钥/密钥对,就用 PuTTYgen 创建一个,已经有了就可以忽略这一步。一个公钥/密钥对可以用在不同的服务器上,所以也不需要重复创建,关键要有足够强健的密码和安全的存放。
  2. 象先前一样输入帐户名和口令登录到主机上。
  3. 输入如下命令,来编辑 authorized_keys 文件mkdir -p $HOME/.ssh && touch $HOME/.ssh/authorized_keys \

    && chmod go-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys && vim $HOME/.ssh/authorized_keys

  4. 这个文本框里的公钥粘贴到 vim 中去,需要说明几点:这个文本框里的内容是一行的,粘贴到 vim 中时,别忘了按字母 o 这个键,否则的话,粘贴进去后,开头的 ssh-rsa 会变成 sh-rsa,为什么呢?哈哈,想想吧。

    为什么不按字母键 i 呢?这个在 vim 中不就是插入么?原因是我很懒,按字母 o,我可以节省一次按回车键。虽然按大写 O 也行,那我不是还得再按一下 Shift 键么?

    别忘了,在 PuTTY 中默认的粘贴可是按鼠标右键哦,然后按一下 ESC 键,然后输入 :wq 保存退出,等等,大家先别着急的输入 :wq,既然输入冒号还得按下 Shift 键,那我们就干脆直接两下大写的字母 Z,也就是 ZZ。怎么样?vim 也一样保存退出了吧。这次又节省了一次按键和两次寻找字母的移动,把懒得优良传统再一次在实践中发扬光大。

  5. 如果已经有了私钥,第4步里的那个公钥忘记保存了,就用 PuTTYgen 把这个私钥 Load 上去,然后重新复制一下公钥吧。
  6. 在 PuTTY 的配置 Connection->SSH->Auth 这里面,指定上私钥,然后记得保存 Session,以后就不需要重复这一步了。
  7. 最好也指定上自动登录的用户名,还记得这里吗?
  8. 开始登录吧,这次你会看到一个不同于以往的登录提示

    现在输入的口令可不是主机上这个账户的口令了,而是先前创建的这个密钥的口令。以后不管这个账户的口令是什么,即使再复杂,也和我们没关系了。只要这个账户的 $HOME/.ssh/authorized_keys 文件中,有我们的公钥,我们就随时用匹配的私钥都可以登录了。配合后面提到的 Pagent,我们连输入密钥口令这一步也可以忽略过去。

  9. 登录成功了,别忘了按 Ctrl+d 注销哦。

以后这些步骤就不需要再重复了,只需要打开 PuTTY 后,双击一下保存的会话名称,输入密钥口令。

Pagent 加载密钥,每次开机后只需要输入一次密钥口令

终于轮到 Pagent 出场了,双击一下 Pagent.exe,嗯,没反应?再双击一下,咦?出来个提示,说已经运行了。

看看右下角吧,在这里呢

双击一下 Pagent 的图标,出来这样一个界面。很简洁的,Add Key 是添加私钥,Remove Key 是把选中的私钥从 Pagent 中卸载了。

好,现在单击 Add Key 按钮添加私钥,我把这个演示用的私钥保存到 C:\ 了

然后会出现输入密钥口令的对话框,输入正确的密钥后,单击 OK

这时,在 Pagent 的窗口中就能看到我们的私钥已经装载上去了。

现在打开 PuTTY,选择先前保存的 Session,双击一下。只要自动登录用户名设置上,主机上改帐户的 authorized_keys 文件里也有匹配的公钥。哈哈,发现没有?完全不需要口令,我们已经登录到系统了。

在 Pagent 的图标上点右键,也可以快捷的选择已经保存的会话。

建议大家把 Pagent 放到启动组里面,这样每次一开机,Pagent 自动运行,然后我们只需要把私钥装载一下,然后我们就可以一直享受自动登录系统的乐趣了。再配合上以后会讲到的 Plink、PSCP 这些,我们可以实现很多工作的自动化进行。完全不需要每次输入用户名、口令、输入又长又多的命令,再做一些烦躁的文件备份,最后还得记得注销系统,难道不觉得麻烦么?这一切烦恼很快就会远离我们了,继续往下看吧。

用 SSH 来传输文件

PuTTY 提供了两个文件传输工具

  • PSCP (PuTTY Secure Copy client)
  • PSFTP (PuTTY SFTP client)

PSCP 通过 SSH 连接,在两台机器之间安全的传输文件,可以用于任何 SSH(包括 SSH v1、SSH v2) 服务器。

PSFTP 则是 SSH-2 中新增的特性,使用的是新的 SFTP 协议,使用上与传统的 FTP 类似。事实上 PSCP 如果发现 SFTP 可用,PSCP就会使用 SFTP 协议来传输文件,否则还是 SCP 协议。PSFTP 与 PSCP 相比,PSFTP 的优点是可以与服务器进行交互,遍历服务器上的文件系统,在一个会话中上传或下载多个文件。而 PSCP 只能一次传输一个文件,传输完毕后立刻终止会话。

PSCP 的使用

在控制台直接执行 pscp 可以看到帮助

C:\>pscp

PuTTY Secure Copy client

Release 0.58

Usage: pscp [options] [user@]host:source target

pscp [options] source [source...] [user@]host:target

pscp [options] -ls [user@]host:filespec

Options:

-V print version information and exit

-pgpfp print PGP key fingerprints and exit

-p preserve file attributes

-q quiet, don’t show statistics

-r copy directories recursively

-v show verbose messages

-load sessname Load settings from saved session

-P port connect to specified port

-l user connect with specified username

-pw passw login with specified password

-1 -2 force use of particular SSH protocol version

-4 -6 force use of IPv4 or IPv6

-C enable compression

-i key private key file for authentication

-batch disable all interactive prompts

-unsafe allow server-side wildcards (DANGEROUS)

-sftp force use of SFTP protocol

-scp force use of SCP protocol

C:\>

可以看出 PSCP 的使用是很简单的,把常用的几个选项说一下:

  • -q 安静模式,传输文件时什么也不显示,否则会显示出文件的传输进度,默认是关闭的
  • -P port 指定服务器的 SSH 端口,注意这个是大写字母 P,默认是 -P 22,如果主机的 SSH 端口就是 22,就不用指定了
  • -l user 指定以哪个用户的身份登录主机,如果没有指定,则 PSCP 会在 PuTTY 保存的同名 Session 中获得默认的用户名称。用户名称也可以和主机名称写在一起,用 @ 分割开,比如:username@server
  • -pw passwd 指定登录时所用的口令为 passwd
  • -i keyfile 就是指定登录时所用的密钥文件
  • 最后面指定的主机名也可以是 PuTTY 中保存的 Session 名称。比如我们在 PuTTY 中保存了一个名为 foobarserver 的会话,而我们所在的网络又的确没有名为 foobarserver 的主机名称。而在这个 foobarserver 会话中保存的主机名称是 demo-server,保存的自动登录的用户是 taylor。那么用命令

    pscp c:\autoexec.bat foobarserver:backup/

    就把本地的 c:\autoexec.bat 复制到了主机 demo-server 上的用户 taylor 所在的主目录下的 backup 子目录中(这个路径可能是 /home/taylor/backup

所以 PSCP 大致用法的例子就是:

pscp -P 22 -i c:\path\your-private-key.ppk -C username@server:/remote/path/

下面还是用一些实例来说明会比较简单一些:

把本地的 C:\path\foo.txt 复制到远程主机 192.168.6.200 的 /tmp 目录下

pscp c:\path\foo.txt 192.168.6.200:/tmp

把本地的 C:\path\foo.txt 复制到主机 192.168.6.200 的 /tmp 目录下,但是以主机上的用户 taylor 的权限执行

pscp c:\path\foo.txt taylor@192.168.6.200:/tmp

或者是

pscp -l taylor c:\path\foo.txt 192.168.6.200:/tmp

把本地的 C:\path\foo.txt 传送到主机 192.168.6.200 的 /tmp 目录下,但是主机的 SSH 端口是 3122

pscp -P 3122 c:\path\foo.txt 192.168.6.200:/tmp

把本地的 C:\path\foo.txt 复制到主机 192.168.6.200 的用户 taylor 的主目录下

pscp c:\path\foo.txt taylor@192.168.6.200:.

把主机 192.168.6.200 上的用户 taylor 主目录下的所有 *.tgz 文件拷贝到本地的 c:\backup 目录中,如果 SSH 版本是 SSH v1,那这个命令就会出错。

pscp taylor@192.168.6.200:*.tgz c:\backup

再来看看 PSFTP

在控制台执行命令 psftp -h,可以得到 psftp 的帮助

C:\>psftp -h

PuTTY Secure File Transfer (SFTP) client

Release 0.58

Usage: psftp [options] [user@]host

Options:

-V print version information and exit

-pgpfp print PGP key fingerprints and exit

-b file use specified batchfile

-bc output batchfile commands

-be don’t stop batchfile processing if errors

-v show verbose messages

-load sessname Load settings from saved session

-l user connect with specified username

-P port connect to specified port

-pw passw login with specified password

-1 -2 force use of particular SSH protocol version

-4 -6 force use of IPv4 or IPv6

-C enable compression

-i key private key file for authentication

-batch disable all interactive prompts

C:\>

用法与 PSCP 大同小异,虽然有个 -load 选项,其实这个没啥用,后面用主机名的时候,与 PSCP 一样直接用上会话名称就可以了。

用 PSFTP 登录到服务器上以后,操作与 FTP 差不多,这里简单的说一下吧:

  • open 登录主机open [username@]<sessname|hostname|ip> [port]
    比如:

    • open taylor@demo-server 3022就是以用户 taylor 的身份,登陆到主机 demo-server 上,SSH 端口是 3022
    • open demo-server登陆 demo-server,这里的 demo-server 可以是PuTTY 中已经保存的会话名称,也可以是主机的名称,如果主机名称与会话名称相同,以会话名称为准。
  • close 关闭 SFTP 连接这个没啥说的,close 就关闭了 SFTP 连接
  • quit 结束本次的 SFTP 会话也没啥用法,就是关闭了 PSFTP 这个程序
  • help [command] 帮助直接打 help 就可以看到帮助指令,后面指定上 一个命令就可以查看该命令的帮助,比如: help open
  • cd [directory] 改变当前目录
  • pwd 察看当前目录
  • lcd [directory] 改变本地目录
  • lpwd 察看本地当前目录
  • get [-r] <filename|directory> 从服务器下载一个文件/目录,这个命令不能用通配符,参数 -r 可以递归下载整个目录
  • put [-r] <filename|directory> [dest] 把文件/目录上传到服务器,这个命令不能用通配符,参数 -r 可以递归上传整个目录
  • mget [-r] <filename|directory> 从服务器下载一批文件/目录,可以用通配符,-r 的含义与 get 一样
  • mget [-r] <filename|directory> [dest] 把一批文件/目录上传到服务器,可以用通配符,-r 的含义与 put 一样
  • reget [-r] <filename|directory> 从服务器续传下载一个文件/目录,这个命令不能用通配符,-r 的含义与 get 一样
  • reput [-r] <filename|directory> [dest] 把一批文件/目录续传上传到服务器,这个命令不能用通配符,-r 的含义与 put 一样
  • dir [directory] 列目录
  • ls 和 dir 一样
  • chmod [file|directory] 改变文件的权限,与 Unix 的 chmod 命令类似
  • del <filename> 删除文件,要注意的是 del 只能删除文件
  • rm 与 del 一样
  • mkdir <new-directory-name> 创建一个目录
  • rmdir <directory> 删除一个空目录,只有空目录才可以被删除
  • mv <source-file|source-directory> <dest-file|dest-directory> 改名/移动。如果源和目的都是文件或目录,则是改名。如果目的是目录的话,则是移动。
  • ! 在本地命令前加一个感叹号,就可以直接执行

其他可选的 SFTP 客户端

FileZilla : http://filezilla.sf.net

WinSCP : http://www.winscp.net

用 Plink 更方便快捷的执行远程主机上的命令

Plink 是 PuTTY 的命令行连接工具,主要用于自动化工作的处理。

直接在控制台执行 plink,可以看到 Plink 的帮助

C:\>plink

PuTTY Link: command-line connection utility

Release 0.58

Usage: plink [options] [user@]host [command]

(”host” can also be a PuTTY saved session name)

Options:

-V print version information and exit

-pgpfp print PGP key fingerprints and exit

-v show verbose messages

-load sessname Load settings from saved session

-ssh -telnet -rlogin -raw

force use of a particular protocol

-P port connect to specified port

-l user connect with specified username

-batch disable all interactive prompts

The following options only apply to SSH connections:

-pw passw login with specified password

-D [listen-IP:]listen-port

Dynamic SOCKS-based port forwarding

-L [listen-IP:]listen-port:host:port

Forward local port to remote address

-R [listen-IP:]listen-port:host:port

Forward remote port to local address

-X -x enable / disable X11 forwarding

-A -a enable / disable agent forwarding

-t -T enable / disable pty allocation

-1 -2 force use of particular protocol version

-4 -6 force use of IPv4 or IPv6

-C enable compression

-i key private key file for authentication

-m file read remote command(s) from file

-s remote command is an SSH subsystem (SSH-2 only)

-N don’t start a shell/command (SSH-2 only)

C:\>

看上去 Plink 的使用方法、参数与PSCP、PSFTP都很类似。

  • -P port 指定服务器的 SSH 端口,注意这个是大写字母 P,默认是 -P 22,如果主机的 SSH 端口就是 22,就不用指定了
  • -l user 指定以哪个用户的身份登录主机,如果没有指定,则 PSCP 会在 PuTTY 保存的同名 Session 中获得默认的用户名称。用户名称也可以和主机名称写在一起,用 @ 分割开,比如:username@server
  • -pw passwd 指定登录时所用的口令为 passwd
  • -i keyfile 就是指定登录时所用的密钥文件
  • -m file 如果执行的命令很多的话,可以把命令写到文件中,然后用这个参数来指定

还是用一些实际的例子来说明一下 Plink 吧

还记得前面说到 PuTTY 的自动执行命令那个配置么?在说到那个配置的时候,我们演示了一个简单的 Tomcat 重新启动的命令,这个命令是要写在 PuTTY 的 Remote command 里面去。现在我们用 Plink 来实现同样的功能:

假设连接的主机是 192.168.6.200,SSH 的端口是 3022,用户是 taylor:

plink -P 3022 taylor@192.168.6.200 export CATALINA_HOME=”~/apache-tomcat-5.5.17″;export JAVA_HOME=”~/jdk1.5.0_07″;export PATH=$JAVA_HOME/bin;$PATH ; cd $CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail -f $CATALINA_HOME/logs/catalina.out

如果在 PuTTY 中保存了一个名为 192.168.6.200 的会话,注意,这个会话的名称与主机 IP 一样,在会话中已经正确保存了端口 3022,指定了默认的用户是 taylor,现在这个命令就可以简化为:

plink 192.168.6.200 export CATALINA_HOME=”~/apache-tomcat-5.5.17″;export JAVA_HOME=”~/jdk1.5.0_07″;export PATH=$JAVA_HOME/bin;$PATH ; cd $CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail -f $CATALINA_HOME/logs/catalina.out

用 date 命令查看一下主机上的时间,并且格式化输出:

plink 192.168.6.200 date “+%F %T”

大家实际执行一下命令看看,会发现,这个命令并没有返回我们期望的结果,而是返回了一个错误:

C:\>plink 192.168.6.200 date “+%F %T”

date: too many non-option arguments: %T

Try `date –help’ for more information.

可是在服务器上直接执行命令 date “+%F %T”,的确是正确无误的,哪里出了问题呢?这是因为Windows的控制台会把两个双引号之间的字符串作为一个参数传递给被执行的程序,而不会把双引号也传递给程序。我们做这样一个小小的实验来说明一下这个问题:

比如在 c:\tmp 文件夹里建立三个文件夹,名称分别为:”foo”、”bar”、”foo bar”。然后在 foo 这个文件夹里面建立一个名为“foo.log”的空文件,在“bar”这个文件夹里建立一个名为“bar.log”的空文件,在“foo bar”这个文件夹里建立一个名为“foo-bar.log”的空文件。

然后在控制台下进入 c:\tmp 这个文件夹,执行如下命令:

dir foo bar

结果是列出“foo bar”这个文件夹里的内容,还是分别列出“foo”和“bar”文件夹里的东西呢?正确答案是后者。

要想正确列出“foo bar”文件夹里的东西,就需要用双引号把”foo bar”引起来

C:\tmp>dir foo bar

Volume in drive C is System

Volume Serial Number is 9C51-A51C

Directory of C:\tmp\foo

2006-11-22 09:48 <DIR> .

2006-11-22 09:48 <DIR> ..

2006-11-16 11:58 0 foo.log

1 File(s) 0 bytes

Directory of C:\tmp\bar

2006-11-22 09:48 <DIR> .

2006-11-22 09:48 <DIR> ..

2006-11-16 11:58 0 bar.log

1 File(s) 0 bytes

2 Dir(s) 1,107,345,408 bytes free

C:\tmp>dir “foo bar”

Volume in drive C is System

Volume Serial Number is 9C51-A51C

Directory of C:\tmp\foo bar

2006-11-22 09:48 <DIR> .

2006-11-22 09:48 <DIR> ..

2006-11-16 11:58 0 foo-bar.log

1 File(s) 0 bytes

2 Dir(s) 1,107,345,408 bytes free

C:\tmp>

说到这里,就会明白上面的那个命令 plink 192.168.6.200 date “+%F %T” 其实在主机上执行的真实命令是 date +%F %T,而不是命令行中指定的 date “+%F %T”。不过还好,Windows 的控制台可不认得单引号,所以上面那个命令的正确用法应该是:

c:\>plink 192.168.6.200 date ‘+%F %T’

2006-11-22 09:39:57

我经常需要登录到服务器上把 ADSL 重新拨号,可以把下面的命令写到一个文本文件中,比如保存到了 C:\adsl-restart.command.txt

echo “stoping…”

/sbin/adsl-stop

echo “starting…”

/sbin/adsl-start

echo “done.”

/sbin/adsl-status

然后执行如下命令:

plink -m c:\adsl-restart.command.txt root@192.168.6.251

我经常要查看 Tomcat 的运行日志

plink taylor@192.168.6.200 tail -f ~/apache-tomcat-5.5.17/logs/catalina.out

每天都要看服务器上的剩余空间,就用这个命令:

plink taylor@192.168.6.200 df -k

假设 www.chaifeng.com 连接着另外一个网段 10.204.26.0,有台内网IP 为 10.204.26.21 的 Solaris 8主机只能用 telnet 登录,为了防止被监听,我们可以用 Plink 建立一个隧道,隧道开放 120 秒钟,如果隧道没有被使用,就自动断开连接,然后我们在本地就可以用命令 telnet localhost 2623 的安全登录那台 Solaris 8 主机了。

plink -L 2623:10.204.26.21:23 www.chaifeng.com sleep 120

在主机 www.chaifeng.com 上正在运行着 tor,默认的监听地址是 127.0.0.1:9050,用 Plink 建立一个隧道,然后浏览器上配置代理服务器为 127.0.0.1,端口是 9050,这样就能够安全的使用 tor 代理了,不用担心从我们的机器到主机 www.chaifeng.com 有被监听的可能了。

plink -C -N -L 9050:127.0.0.1:9050 taylor@www.chaifeng.com

结合上 PSCP 我们还可以完成文件的每天备份

plink taylor@192.168.6.200 tar jcf $(date ‘+documents.%F.tar.bz2′) ~/documents

pscp taylor@192.168.6.200:$(date ‘+documents.%F.tar.bz2′) c:\backup\

plink taylor@192.168.6.200 rm -f $(date ‘+documents.%F.tar.bz2′)

如果把这些常用的操作写成批处理文件,到时候要重启一下 Tomcat,或者马上察看一下 Tomcat 日志,再或者只是要把 ADLS 重新拨号以下,只需要用鼠标一双击这个批处理文件,稍等一下就自动完成了。不比你打开 PuTTY,登录到服务器上,然后再一个一个的执行命令,最后还得注销来的方便快捷么?再懒一些,把自动备份的批处理放到计划任务里面,每天定时完成,哈哈,有时间上网找些好玩的东西了,不用每天忙于这些繁杂重复的命令中了。

用假象去迷惑敌人

如果我说 Google 的服务器也开放了 SSH,但是只有特定的 IP 可以连接上去,不信么?(声明:下面的图片都未经修改,我以 Google 的名义发誓,绝对没有 PS)

知道是怎么回事么?

FAQ(常见问题)

我在 PuTTY 官方网站下载的,可是执行 PuTTY、Pagent、PuTTYgen 时总是出错,而命令行执行的这几个却没问题

这种情形我也碰到过,一个解决的办法就是去下载最新版,或许你碰巧下载的是旧版本。另外一个解决办法就是,创建三个扩展名为 .manifest 的文本文件,然后把这三个文件复制到 PuTTY 的目录中,文件内容分别如下:把下面的内容复制到记事本中,文件名保存为:PAGEANT.exe.manifest

<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>

<!– This is present purely to make Visual Styles in XP work better.

See 20020104174954.A12067@imsa.edu. –>

<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>

<assemblyIdentity

type=”win32″

name=”Pageant”

version=”0.0.0.0″ processorArchitecture=”x86″/>

<dependency>

<dependentAssembly>

<!– Load Common Controls 6 instead of 5 to get WinXP native-

looking controls in the client area. –>

<assemblyIdentity type=”win32″

name=”Microsoft.Windows.Common-Controls”

version=”6.0.0.0″

publicKeyToken=”6595b64144ccf1df”

language=”*”

processorArchitecture=”x86″/>

</dependentAssembly>

</dependency>

</assembly>

把下面的内容复制到记事本中,文件名保存为:PUTTY.exe.manifest

<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>

<!– This is present purely to make Visual Styles in XP work better.

See 20020104174954.A12067@imsa.edu. –>

<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>

<assemblyIdentity

type=”win32″

name=”PuTTY”

version=”0.0.0.0″ processorArchitecture=”x86″/>

<dependency>

<dependentAssembly>

<!– Load Common Controls 6 instead of 5 to get WinXP native-

looking controls in the client area. –>

<assemblyIdentity type=”win32″

name=”Microsoft.Windows.Common-Controls”

version=”6.0.0.0″

publicKeyToken=”6595b64144ccf1df”

language=”*”

processorArchitecture=”x86″/>

</dependentAssembly>

</dependency>

</assembly>

把下面的内容复制到记事本中,文件名保存为:PUTTYGEN.exe.manifest

<?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes”?>

<!– This is present purely to make Visual Styles in XP work better.

See 20020104174954.A12067@imsa.edu. –>

<assembly xmlns=”urn:schemas-microsoft-com:asm.v1″ manifestVersion=”1.0″>

<assemblyIdentity

type=”win32″

name=”PuTTYgen”

version=”0.0.0.0″ processorArchitecture=”x86″/>

<dependency>

<dependentAssembly>

<!– Load Common Controls 6 instead of 5 to get WinXP native-

looking controls in the client area. –>

<assemblyIdentity type=”win32″

name=”Microsoft.Windows.Common-Controls”

version=”6.0.0.0″

publicKeyToken=”6595b64144ccf1df”

language=”*”

processorArchitecture=”x86″/>

</dependentAssembly>

</dependency>

</assembly>

屏幕输出太快了,怎么能暂停一下?

Ctrl+S 快捷键可以暂停终端,Ctrl+Q 恢复。

怎么翻页?

Shift+PageUp/PageDown 一页一页的翻,Ctrl+PageUp/PageDown 则是一行一行的。

不是说 PSCP 一次只能传输一个文件么?为什么我发现能传输很多个?

那是因为 PSCP 发现 SFTP 协议可用,优先使用 SFTP 协议来传输文件

为什么执行了 pscp、psftp、plink 这些命令总是说错误的命令呢?

应该把 PuTTY 所在的路径添加到 PATH 环境变量中。你可以编辑 c:\autoexec.bat 这个文件,在最后增加一行,把 c:\path\to\putty 换成你的真实路径

set PATH=c:\path\to\putty;%PATH%

在登录的时候出现 “Proxy error: 407 Proxy authorization require” 的错误提示

这是因为配置的代理服务器需要认证,而我们没有填写正确的用户名或口令。如果用户名填写的是类似 DOMAIN/username 的形式,可以尝试把 DOMAIN/ 去掉,仅仅填写 username 再试一试,还有一种可能性就是代理服务器禁止我们访问 22 目标端口。

每次开机后我都要先打开 Pagent,然后再添加我的私钥,还要输入私钥密码,太麻烦了,有没有简单一点的办法呢?

很遗憾,比较轻松的办法就是把 Pagent 和 .ppk 文件关联,然后在开始的启动项里添加一个私钥的快捷方式,这样开机后我们只需要输入一下密码就OK了。如果想把输入密码也省掉,唉唉唉,怎么比我还懒呢?如果你的私钥密码真的是很长很长,那你还是借助第三方工具吧,建议用 KeePass 吧,KeePass 可以用命令行启动省掉输入密码和选择 keyfile 的麻烦。

Unix体验中心

    Unix体验中心(Unix-Center.Net)的目标是为研究、学习和使用各种版本的Unix和类Unix操作系统的教师、学生和工程技术人员提供一个体验和测试各种版本的Unix和类Unix系统的软硬件平台。

http://www.unix-center.net/

删除emerald,换回gtk的边框

打开终端 输入gtk-window-decorator –replace,再卸掉emerald