PuTTY使用技巧-简体中文教程(3)

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

<本文转载><出处> http://www.waus.cn/blog/Blogs/edu/200801/20080110204409.Html
点这里查看Bluehost支持的环境和产品详情列表
-->点这里查看Bluehost支持的环境和产品详情列表。