0
点赞
收藏
分享

微信扫一扫

精彩PuTTY 中文教程2


 


用 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 '+do

举报

相关推荐

0 条评论