注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

天高云淡的博客

A bad beginning makes a bad ending.

 
 
 

日志

 
 

精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2)  

2009-12-27 15:15:33|  分类: php + mysql + ap |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

备份 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 可以看到如下的界面。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
点击 Generate 按钮就开始生成一个公钥和私钥对,生成完毕后,点下面的 Save private key 就可以把私钥保存起来,扩展名是 .ppk 的文件。
Load 按钮可以把先前保存的私钥重新打开,然后做些修改,比如修改注释和私钥口令,或者把 PuTTY 格式的私钥转换为 OpenSSH 格式的。

开始用 PuTTYgen 创建密钥

单击 Generate 按钮,然后你会看到进度条上面有个提示“Please generate some radomness by moving the mouse over the blank area.”,意思就是让你用鼠标在空白区域随机移动。随着鼠标在空白区域的移动,进度条会一直走下去。停止移动鼠标,进度条也就停止了。那我们就移动鼠 标,直到进度条走满为止。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
等进度条走完之后,会出现下面的界面
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
最上面那个大大的只读文本框里面是公钥,用来保存到 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. 就是我的密码提示,能猜出来么?呵呵
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
输入注释,上面的公钥也会随之发生变化。
现在最重要的是,输入自己的密钥口令。就是 Key passphrase 和 Confirm passphrase 这个两个输入框。
如果不输入口令,直接保存私钥会看到这个提示。为了安全起见还是输入口令吧,要不任何人得到这个私钥都可以不用口令登入系统了。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
最后单击 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.   精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
    这个文本框里的公钥粘贴到 vim 中去,需要说明几点:这个文本框里的内容是一行的,粘贴到 vim 中时,别忘了按字母 o 这个键,否则的话,粘贴进去后,开头的 ssh-rsa 会变成 sh-rsa,为什么呢?哈哈,想想吧。
    为什么不按字母键 i 呢?这个在 vim 中不就是插入么?原因是我很懒,按字母 o,我可以节省一次按回车键。虽然按大写 O 也行,那我不是还得再按一下 Shift 键么?
    别 忘了,在 PuTTY 中默认的粘贴可是按鼠标右键哦,然后按一下 ESC 键,然后输入 :wq 保存退出,等等,大家先别着急的输入 :wq,既然输入冒号还得按下 Shift 键,那我们就干脆直接两下大写的字母 Z,也就是 ZZ。怎么样?vim 也一样保存退出了吧。这次又节省了一次按键和两次寻找字母的移动,把懒得优良传统再一次在实践中发扬光大。
      精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
  5. 如果已经有了私钥,第4步里的那个公钥忘记保存了,就用 PuTTYgen 把这个私钥 Load 上去,然后重新复制一下公钥吧。
  6. 在 PuTTY 的配置 Connection->SSH->Auth 这里面,指定上私钥,然后记得保存 Session,以后就不需要重复这一步了。
      精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
  7. 最好也指定上自动登录的用户名,还记得这里吗?
      精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
  8. 开始登录吧,这次你会看到一个不同于以往的登录提示
      精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
    现 在输入的口令可不是主机上这个账户的口令了,而是先前创建的这个密钥的口令。以后不管这个账户的口令是什么,即使再复杂,也和我们没关系了。只要这个账户 的 $HOME/.ssh/authorized_keys 文件中,有我们的公钥,我们就随时用匹配的私钥都可以登录了。配合后面提到的 Pagent,我们连输入密钥口令这一步也可以忽略过去。
  9. 登录成功了,别忘了按 Ctrl+d 注销哦。
      精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
以后这些步骤就不需要再重复了,只需要打开 PuTTY 后,双击一下保存的会话名称,输入密钥口令。

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

终于轮到 Pagent 出场了,双击一下 Pagent.exe,嗯,没反应?再双击一下,咦?出来个提示,说已经运行了。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
看看右下角吧,在这里呢
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
双击一下 Pagent 的图标,出来这样一个界面。很简洁的,Add Key 是添加私钥,Remove Key 是把选中的私钥从 Pagent 中卸载了。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
好,现在单击 Add Key 按钮添加私钥,我把这个演示用的私钥保存到 C:\ 了
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
然后会出现输入密钥口令的对话框,输入正确的密钥后,单击 OK
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
这时,在 Pagent 的窗口中就能看到我们的私钥已经装载上去了。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
现在打开 PuTTY,选择先前保存的 Session,双击一下。只要自动登录用户名设置上,主机上改帐户的 authorized_keys 文件里也有匹配的公钥。哈哈,发现没有?完全不需要口令,我们已经登录到系统了。
在 Pagent 的图标上点右键,也可以快捷的选择已经保存的会话。
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
建 议大家把 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 : [url]http://filezilla.sf.net[/url]
WinSCP : [url]http://www.winscp.net[/url]

用 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
假设 [url]www.chaifeng.com[/url] 连接着另外一个网段 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 [url]www.chaifeng.com[/url] sleep 120
在 主机 [url]www.chaifeng.com[/url] 上正在运行着 tor,默认的监听地址是 127.0.0.1:9050,用 Plink 建立一个隧道,然后浏览器上配置代理服务器为 127.0.0.1,端口是 9050,这样就能够安全的使用 tor 代理了,不用担心从我们的机器到主机 [url]www.chaifeng.com[/url] 有被监听的可能了。
plink -C -N -L 9050:127.0.0.1:9050 taylor@[url]www.chaifeng.com[/url]
结合上 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)
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
  精彩PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)(2) - 中国专业外包 - 中国专业外包的博客
知道是怎么回事么?

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%

附录

A 致谢
B 参考
  评论这张
 
阅读(908)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017