PuTTY 中文教程 作者:柴锋 2006年11月 * 最简单的使用,登录 SSH 主机 * 中文乱码的处理 * PuTTY 常用配置的说明 o 复制、粘贴 o 保存会话 o 注销 o 自动登录用户名 o 自动设置环境变量 o 设置代理服务器 o 自动执行命令 o 备份、删除 PuTTY 的设置 * PuTTY 的 X11 转发 * 如何用 PuTTY 建立 SSH 隧道 * 如何用 PuTTY 建立反向的 SSH 隧道,像个特洛伊木马一样突破防火墙 * 把 PuTTY 作为一个安全的代理服务器 o 安全的上网不被嗅探 o 避免 MSN 等聊天工具被监听 * 怎样用 PSCP、PSFTP 安全的传输文件 o 功能强大的 SFTP 客户端 WinSCP * 用 PuTTYgen 生成密钥,登录 SSH 主机不再需要口令 * Pagent 代理密钥,每次开机只需要输入一次密钥口令 * Plink 简单而又迅速的执行 SSH 主机上的程序 * 常见问题 除了上面的这些,还夹杂了一些 PuTTY 使用上的技巧、服务器配置的一些安全建议。说起来这是一些有关 PuTTY 的使用教程,其实也就是 SSH 的参考教程,绝大多数的内容在其他系统或软件上也都是一样的。不同的是参数、配置、命令行之类的,只要会了一个,其他也就触类旁通了。 一些基本知识 如果你已经知道 SSH、Telnet、Rlogin 这是什么,就跳过这一部分,看下面的吧。 (以后补充,暂时空下) 简介 PuTTY 的 [port] 比如: o open taylor@demo-server 3022 就是以用户 taylor 的身份,登陆到主机 demo-server 上,SSH 端口是 3022 o 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] 从服务器下载一个文件/目录,这个命令不能用通配符,参数 -r 可以递归下载整个目录 * put [-r] [dest] 把文件/目录上传到服务器,这个命令不能用通配符,参数 -r 可以递归上传整个目录 * mget [-r] 从服务器下载一批文件/目录,可以用通配符,-r 的含义与 get 一样 * mget [-r] [dest] 把一批文件/目录上传到服务器,可以用通配符,-r 的含义与 put 一样 * reget [-r] 从服务器续传下载一个文件/目录,这个命令不能用通配符,-r 的含义与 get 一样 * reput [-r] [dest] 把一批文件/目录续传上传到服务器,这个命令不能用通配符,-r 的含义与 put 一样 * dir [directory] 列目录 * ls 和 dir 一样 * chmod [file|directory] 改变文件的权限,与 Unix 的 chmod 命令类似 * del 删除文件,要注意的是 del 只能删除文件 * rm 与 del 一样 * mkdir 创建一个目录 * rmdir 删除一个空目录,只有空目录才可以被删除 * mv 改名/移动。如果源和目的都是文件或目录,则是改名。如果目的是目录的话,则是移动。 * ! 在本地命令前加一个感叹号,就可以直接执行 其他可选的 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
. 2006-11-22 09:48 .. 2006-11-16 11:58 0 foo.log 1 File(s) 0 bytes Directory of C:/tmp/bar 2006-11-22 09:48 . 2006-11-22 09:48 .. 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 . 2006-11-22 09:48 .. 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) 把下面的内容复制到记事本中,文件名保存为:PUTTY.exe.manifest 把下面的内容复制到记事本中,文件名保存为:PUTTYGEN.exe.manifest 屏幕输出太快了,怎么能暂停一下? 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%PuTTY 中文教程(解决乱码、X窗口、自动登陆等问题)
最新推荐文章于 2024-07-19 11:21:50 发布