[+]文章目录

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,登录到服务器上,然后再一个一个的执行命令,最后还得注销来的方便快捷么?再懒一些,把自动备份的批处理放到计划任务里面,每天定时完成,哈 哈,有时间上网找些好玩的东西了,不用每天忙于这些繁杂重复的命令中了。


« 前一篇