还剩33页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
转Putty使用大全在windows下操作linux命令的小工具,非常好偶然发现,储存资料备用PuTTY是一个跨平台的远程登录工具,包含了一组程序,包括PuTTYTelnet和SSH客户端PSCPSCP客户端,命令行下通过SSH拷贝文件,类似于Unix/Linux下的scp命令PSFTPSFTP的命令行客户端,类似于FTP的文件传输,只不过使用的是SSH的22端口,而非FTP的21端口,类似于Unix/Linux下的sftp命令PuTTYtel仅仅是一个Telnet客户端Plink命令行工具,执行远程服务器上的命令PageantPuTTY、PSCP、Plink的SSH认证代理,用这个可以不用每次都输入口令了PuTTYgen用来生成RSA和DSA密钥的工具.虽然包含了这么多,但平时经常见到只是用PuTTY登录服务器,完全没有发挥出PuTTY的强大功能PuTTY作为一个组件也存在于很多的软件中,比如FileZilla、WinSCP在后面的文字中,如非特别说明,默认的登录的协议是SSH毕竟用PuTTY主要就是登录SSH主机,用Telnet、RLogin没法体现出PuTTY的强大功能安装PuTTY是一个跨平台的远程登录工具,包含了一组程序,包括PuTTYTelnet和SSH客户端PSCPSCP客户端,命令行下通过SSH拷贝文件,类似于Unix/Linux下的scp命令PSFTPSFTP的命令行客户端,类似于FTP的文件传输,只不过使用的是SSH的22端口,而非FTP的21端口,类似于Unix/Linux下的sftp命令PuTTYtel仅仅是一个Telnet客户端Plink命令行工具,执行远程服务器上的命令PageantPuTTY、PSCP、Plink的SSH认证代理,用这个可以不用每次都输入口令了PuTTYgen用来生成RSA和DSA密钥的工具.虽然包含了这么多,但平时经常见到只是用PuTTY登录服务器,完全没有发挥出PuTTY的强大功能PuTTY作为一个组件也存在于很多的软件中,比如FileZilla、WinSCP在后面的文字中,如非特别说明,默认的登录的协议是SSH毕竟用PuTTY主要就是登录SSH主机,用Telnet、RLogin没法体现出PuTTY的强大功能安装PuTTY是一个准绿色软件,说它绿色是因为直接就能使用,完全没有任何的安装程序准绿色是指PuTTY的所有配置都保存到了注册表,如果不记得备份注册表中的相关内容,下次重装机器所有配置就没了,而且配置也不方便用闪存盘随身携带但是PuTTY的配置删除还是蛮方便的,运行时指定个参数-cleanup就可以清除PuTTY的所有配置信息第一印象,开始登录一台远程主机运行PuTTY就可以看到下面这个界面在这里输入服务器的IP或主机名,选择好登录协议,还有协议的端口,如果希望把这次的输入保存起来,以后就不需要再重新输入了,就在第4步输入好会话保存的名称,比如mail-server,或者干脆就是主机的地址,点击保存就可以了现在问题是我的软件是汉化过的可以从网上找非常小的,只有540多K,但是命令提示信息却是乱码,网上一般的解决办法是针对英文版本如果显示中文字符的现在招到了一半办法,记录如下,做个资料备份echo$LANG$LANGUAGE查看linux系统的字符集原来系统的字符集是UTF-8呀重新返回上面选择字符集的那一步,选择配置窗口左边的Translation,在右边的Received dataassumed tobe inwhich characterset下拉列表中选择UTF-8这下99%的情形下,汉字是不会有乱码了最后,总之一下PuTTY中乱码的解决办法先看看系统的字符集,如果是UTF-8的,那就简单了,选择好中文字体,然后编码选择UTF-8就行了如果编码是GB
2312、GBK、GB18030,当然也包括BIG5这些,在PuTTY的编码选择中看不到这些编码,那就选择最后一个Use fontencoding,绝大部分情况下这样就没啥问题了,反正我是没碰到有什么例外的情况现在的Linux如果默认语言选择为中文,默认的编码就是UTF-8了以前安装Redhat AS3时,语言选择为中文,默认的编码是zh_CN.gb2312,zh_CN.gb18030,好像从AS3update6开始,包括现在的AS
4、AS5,中文的默认编码都成了zh_CN.utf8至于Debian、Ubuntu等等这些上面,好像一直都是UTF-8至于是使用UTF-8呢,还是用GB
2312、GBK或者GB18030呢我个人还是倾向于UTF-8毕竟我们使用的大多数软件都是国外的,处理中文编码多多少少有些问题,PuTTY自然也不例外下面的这个图上,我把终端编码修改为zh_CN.utf8,然后也按照前面的所说的方法把PuTTY的字符集修改为UTF-8然后在终端中输入汉字柴锋,按左方向键,可以看到汉字显示很正常我重新把终端的编码修改为zh_CN.gb2312,同样的,把PuTTY的字符集修改为最后一个Use fontencoding还是在终端上输入汉字柴锋,按下左方向键以后,会看到汉字乱码了至于用哪个编码,主要还是看领导的决定了,我们的领导就喜欢GBK,连GB18030都不行以前在用Debian的时候,好像默认都不支持GBK编码这几年公司的开发在汉字编码问题上出过几次麻烦,还不就是在ISO8859-1,GB2312/GBK/GB18030和UTF-8上折腾来折腾去给大家看一张emacs的截图,看看上面的这么多语言的文字共同显示,这个会是用GB2312/GBK/GB18030的编码么用UTF-8也不是为了要在一个屏幕上显示好几种不认识的文字,也不一定非要是跟国际接轨弄个外包给老外开发程序做个其他语言的界面让老外用,起码不要在那么多编码里折腾了,顶多两个ISO8859-1和UTF-8发发牢骚,下面继续…在PuTTY里面怎样选中,复制和粘贴在PuTTY的窗口里面复制、粘贴可不能用Windows里的这些Ctrl+C,Ctrl+Ins,Ctrl+V这些快捷键,Ctrl+C在控制台上可是终止当前的命令执行PuTTY的选择、复制、粘贴这些操作都是通过鼠标来完成的在Window-〉Selection这里可以设置复制和粘贴的方式默认的Action of mouse buttons鼠标按键的功能的选项是Compromise,这种方式下选中有两种方式,一是直接用鼠标左键拖拉选中就可以了,二是用鼠标中键单击选中区域的开头,用滚动条拖拉到期望选中区域的末尾,再用鼠标中键单击,就可以选中了选中以后,单击鼠标左键就把选中部分复制到剪贴板了粘贴也很简单,单击鼠标右键Action of mouse buttons的第一个选项是WindowsWindows方式的,鼠标中键的操作跟前面提到的一样右键不是粘贴了,而是打开了右键菜单其实这个右键菜单在标题栏上点击,也都可以看得到第三个选项是xtermxterm方式,这个跟默认的Compromise方式相反的,中键和右键的操作调换了一下,就不多说了下面那个Shift overridesapplications use ofmouse是和Shift键有关的有些Rogue Like的程序,比如mc、links、Lynx、VIM等等,都支持鼠标操作,想在用鼠标在上面选择或粘贴就不行了这个选项默认是选中的,在支持鼠标操作的Rogue Like界面下,按住Shift键,就可以像前面的那样用鼠标来选择、复制、粘贴了看下面的这个图片,用Links打开了Google的首页,用鼠标去选中顶部中间的Google,我们会发现,弹出了保存的对话框按住Shift键重新操作一次,哈哈,这次选中了在Control use ofmouse里面还有个Default selectionmode默认的选择模式,默认是Normal,就像文字处理工具里这样的选择另外一个是Rectangular block块选择方式,至于用哪种方式就看自己的选择了实时保存会话这次更改配置参数了,关闭窗口后,下次使用还是要重新选择的,麻烦还是回到上面修改配置的哪个地方,选择左边的Session,在右边选择要覆盖的会话名称,或者重新输入一个新的名称,点击Save按钮保存关于注销登录的一些事情成功登录主机后,也能正常看到中文了这样,我们就可以完成大部分的工作最后要关闭窗口了,该怎么办呢我见过很多人,包括我们公司负责专职维护的同事,都是直接点击窗口上的关闭按钮,完全没有理会弹出警告窗口,直接点击了Yes这样做是不对的,首先这不是正确的注销方式,应该输入命令exit来正常注销;其次直接关闭窗口后,你的登录其实还在服务器上,如果一连多次的这样强制关闭窗口,用命令w或者who命令查看时,可以看到很多的用户还在系统上登录,占用了系统的资源最重要的是,你的这次登录可能只是为了启动一下WebLogic或者其他什么应用服务器,直接关闭窗口后,可能会导致你的业务在随后的几分钟内也被终止,这应该不是你所希望看到的吧如果上述的理由是每次要输入exit然后回车,比较麻烦你可以用快捷键Ctrl+d来注销登录,一般情况下,快捷键一按窗口都直接关闭了,还省了两次鼠标点击在前面说道保存会话时,大家或许也注意到,下面有个Close windowon exit有三个选项Always不管怎样,窗口总是要关闭的Never无论是否有程序还在运行,都不要关闭窗口Only onclear exit这个是默认选中的,只有在本次登录中运行的程序都正常终止或者在后台运行,窗口才关闭有的程序在执行时,虽然在命令最后面加上就能放到后台运行但是正常注销登录后,窗口没有被自动关闭,还能看到程序的输出,这时强制关闭窗口还是可以的为了避免这种情形,可以使用nohup命令用法嘛就是nohup命令命令参数,这样就可以了窗口保存的输出有点少,前面的都看不到了执行了一个命令,输出了好多东西,但是默认的配置下,PuTTY只保存了最后200行的内容,满足不了我们的需求还是在标题栏上点右键选择Change settings.,在配置窗口的左边选择Window,修改右边的Lines ofscrollback,改大点,比如
20000、80000的在上面的Set thesize of the window里设置的是窗口显示的行数和列数,默认是24行、80列,根据自己的需要来修改吧When windowis resized这个选项配置的是,当窗口大小发生改变时该采取什么动作Change thenumber ofrows andcolumns这个是默认的,改变窗口大小时,自动修改行数和列数Change thesize ofthe font这个是根据窗口的大小来修改字体的大小,窗口最大化的时候,字都是很大的Change fontsize onlywhen maximised只有在窗口最大化的时候才改变字体大小Forbid resizingcompletely完全禁止改变窗口大小,一了百了在现代的Unix/Linux主机上,默认选项已经不存在任何问题了如果是Solaris8这样的老式Unix上最好用第2或第4个选项第3个选项嘛,要求你的屏幕不是宽屏的,选中这个选项以后,大家可以先把窗口往窄的缩一下,然后最大化窗口,哈哈,满足一下不是宽屏的虚荣心顺便说一下,在PuTTY中的前后翻页,与Linux终端一样,用Shift+PageUp/PageDown来上下翻页,而Ctrl+PageUp/PageDown则是一行一行的新建一个会话时,还有些东西再啰嗦一下前面把如何用PuTTY登录一台主机到注销的过程聊了一遍,但是在新建会话时还是有些东西需要再啰嗦一下的保持连接,不要自动断开在Connection里面有个Seconds betweenkeepaliaves,这里就是每间隔指定的秒数,就给服务器发送一个空的数据包,来保持连接以免登录的主机那边在长时间没接到数据后,会自动断开SSH的连接默认输入0是禁用保持连接,在这里我习惯的设置了10下面的那两个复选框都保持默认选中吧自动登录用户在Connection-〉Data里面有个Auto-login username,可以指定默认的登录用户如果每次登录主机都是用同一个用户,不妨在这里设置一下SSH、Telnet、Rlogin这三种协议都支持,但不是所有的Telnet服务器支持自动登录用户自动设置环境变量还是前面的那个界面,下面有个Environment variables,在Variable输入环境变量的名称,Value里设置上环境变量的值,登录主机后就会自动设置上,但是这个不一定能用,有些主机为了安全,可能会禁用这个特性,一旦登录就会收到这样一个错误提示Server refusedto setenvironment variables设置代理服务器这个经常用到,设置方法大同小异,注意选择好Proxy type代理服务器的类型就可以了代理服务器的地址填写到Proxy hostname这里,Port就是代理服务的端口HTTP代理常用端口有
3128、8080,Socks5代理常用端口有1080Exclude Hosts/IPs这里是填写排除的主机地址和IP,有些地址不需要代理,就在这里填写有些代理需要认证,用户名填写到Username,密码则填写到下面的Password自动执行一个命令在Connection-〉SSH里有个Remote command,在这里面填写上远程服务器上的某个命令,比如df,登录后就会自动执行我们在Unix上用ssh登录主机时用的命令ssh,在ssh的最后面加上远程主机上的命令,就跟这个一样但是…,先别着急,一旦设置上这个选项,你会发现在登录成功后,窗口一下就关闭了,嘿,怎么啦什么也没看见因为命令执行完毕的同时,本次SSH登录连接也随之关闭你可以把远程自动执行的命令修改成sleep10,然后重新登录,再看看效果登录成功后,没有出现命令提示符,10秒钟后,窗口自动关闭这也验证了刚才我说的,命令执行完毕后,SSH连接自动断开冰雪聪明的你一定会想到,如果每次登录主机,都是要重新启动一下tomcat,那这里就可以填写上这样的命令export CATALINA_HOME=~/apache-tomcat-
5.
5.17;export JAVA_HOME=~/jdk
1.
5.0_07;export PATH=$JAVA_HOME/bin;$PATH;cd$CATALINA_HOME/bin;./shutdown.sh;./startup.sh;tail-f$CATALINA_HOME/logs/catalina.out上面的命令是一行的哦先自动设置一下环境变量前面有提到,服务器可能会禁用自动设置环境变量,为了保险起见,在这里设置了一下,然后进入tomcat的bin目录,用shutdown.sh停止tomcat,然后再startup.sh启动tomcat,最后tail命令持续观察tomcat的日志输出,不想看了,就直接Ctrl+C就可以终止SSH的会话了哈哈,是不是很方便不过前面提到的命令sleep10,只是建立了SSH连接,然后10秒钟后自动断开是不是觉得很无聊没什么用途啊其实这个命令配合后面提到的Tunnels隧道,可以自动保持隧道一定时间的开放,如果指定时间内在这里就是10秒钟隧道没有被使用,就自动关闭SSH连接和隧道如果选中了Dont start ashell orcommand atall就禁用了自动执行命令这一个特性,这个主要是配合Tunnels隧道来使用的因为有时候,我们只需要利用隧道建立一个VPN,而并不需要登录上去执行命令用这个方法建立好隧道以后,就一直开放了,除非自己手工关闭嗯,还有个问题哦,如果一次要执行的命令很多,该怎么办呢嗯,给PuTTY用-m选项指定一个包含远程主机上执行的命令的文本文件不过以后还会说到Plink,就是专门做这个用的,慢慢来慢慢来数据自动压缩传输,变相的提高传输速率还是前面的那个界面,Protocol options里面有个Enable compression,这个选项的意思就是传输时压缩数据,在连接速度不变的情况下,变相的提高了传输速率一般的SSH服务器都会允许这个选项的,所以还是选中好了无需口令登录在Connection-〉SSH-〉Auth这里面有两个需要了解的,以后在讲到PuTTYGEN和Pagent时会详细介绍的一个是Allow agentforwarding,作用是允许私钥代理的转发另外一个是最下面的Private keyfile forauthentication,选择私钥认证文件这两个可以让你用SSH登录不用输入主机口令,但是私钥的口令还是需要输入的,如果使用了私钥代理Pagent,私钥口令也可以省略再配合前面提到的自动指定用户名登录,可以实现自动登录主机登录到主机上以后,用SSH登录另外一个同样配置了相同的私钥认证的主机,也可以不用再次输入口令这些可以大大减轻了我们的重复工作,不用单调枯燥的输入用户名和口令,但是这样使用有个后遗症就是如果主机密码没有在另外一个地方记录下来的话,这个密码很快会忘记的,好处嘛,密码可以设置的很长很变态XD X11转发能够让你在Windows上使用Linux的程序这里很简单,选中Enable X11forwarding后登录主机,记得在我们本地运行X服务端程序比如免费好用的Xming然后在控制台直接输入X环境下运行的程序,比如xlogo,我们就可以看到Linux上的GUI界面的程序在Windows桌面上打开了运行个复杂的,比如gnome-session,这个是GNOME的启动命令,如果想打开KDE就是startkde这样跟在本地使用X Window几乎是一样的了,而且还是运行在Windows的桌面上呢,骗骗小mm还是不错的或许你会问这样用跟vnc那还不一样了答案是,不一样如果网络环境不好,还是用vnc吧,否则迟钝的图形响应速度会让你抓狂的打开了GNOME桌面,怎么关闭呢点菜单的注销吧如果你点了关机,这可关不了你的Windows,关的是远程主机用SSH TunnelsSSH隧道,突破防火墙哇哦,突破防火墙!是不是忽然有了做黑客的感觉呢呀!子弹,我躲--,身子往后仰,继续闪…,噢,肚皮被子弹蹭了一下简单的说一下,SSH协议能够通过已经建立好的SSH加密链路来转发任意的网络连接,从而避免了网络中的明文传输,也就无法用一些Sniffer工具嗅探到我们的隐秘信息了先说一下大致的使用过程,登录到主机上以后,就可以建立好一个SSH隧道,这时在你的机器本地会开放一个端口,通过本地的这个端口访问,就相当于在主机上去直接访问很像代理服务器吧,如果隧道另一端的端口是动态的,SSH隧道就是一个代理了,SSH隧道的意思大致就是这个通过SSH隧道,我们可以保证从我们这一段到主机那一端是安全的,不会被监听到说了这么多,实际演练演练就知道了在PuTTY的Connection-〉SSH-〉Tunnels这里就是配置SSH隧道的Add newforwarded port这里就是添加隧道转发端口的,其中Source port是隧道的源端口,也就是隧道的入口,连接隧道时要连接这个端口Destination这里是目的地,隧道的出口,输入的格式是server port还要说明的一点是SSH隧道是有方向的,这个方向是由下面的单选按钮Local/Remote/Dynamic来决定的如果下面的单选按钮选中的是Local,那么Destination这里填写的目标是相对于远程主机而言,而非你的机器这样的隧道可以称之为正向隧道,隧道的入口是在你的本地,出口在远程主机那一端如果单选按钮选中的是Remote,那么目标地址就是相对与你的机器而言,而非远程主机这样的隧道称之为反向隧道,隧道的入口是远程主机那一端,隧道的出口则是你的本地机器这与Local选项是相反的而最后一个Dynamic则不用指明Destination目标地址,也就是说目标地址是动态的了,连入隧道时可以随意指定目标地址,而不像Local/Remote指明的固定目标地址,所以这样的隧道就成了变相的加密socks5代理服务器了看明白了么是不是会有些糊涂后面我会举个例子来详细说说的开始演练,我们现在建立一条到远程主机guantouping上端口7001的隧道,在guantouping上可以用nc-l-p7001localhost这条命令建立一个监听本地到端口7001的连接,这样确保无法从其他机器访问这台主机的端口,只能在guantouping这台主机上用telnet localhost7001来连接现在我的机器IP是
192.
168.
6.25,如果直接用命令telnet guantouping7001访问的话,那么在主机guantouping上会看到这样的提示[taylor@guantouping taylor]$nc-l-p7001localhost invalidconnection to[
192.
168.
6.200]fromUNKNOWN[
192.
168.
6.25]1926在这个配置面板上,Source port上填写8080,也就是我们要通过本地的8080端口来进入SSH隧道,Destination这里填上
127.
0.
0.17001,就表示被登录的主机guantouping访问该主机本地的
127.
0.
0.17001这个端口正常登录到主机guantouping以后,SSH隧道就建立好了在我的机器
192.
168.
6.25上输入命令telnet localhost8080,输入一些东西,就会在guantouping上看到有响应在这里我用的是nc,看起来方便一点,telnet也是一样的这就是正向SSH隧道的一个例子,大家实地操作几次也就会明白了最上面有个复选框是Local portsaccept connectionsfrom otherhosts,这个选项的作用是允许其他主机连接你机器上的隧道入口,默认情况下建立好隧道以后,只允许本地链接只有选中这个复选框才允许其他主机连接你的本地隧道入口象特洛伊木马一样建立一条SSH反向隧道下面要说的就是选中单选按钮Remote后建立的反向SSH隧道,这样的隧道做什么用呢一般防火墙都是允许从内往外链接,而不允许从外到内的链接,除非在防火墙上做好nat或端口转发现在,你在防火墙的内部,但是又想让外面的人链接到你的机器上防火墙厚厚的城门紧闭,外面的人进不来,只有你能从里面打开这扇防护严密的大门,就像一个特洛伊木马一样,你主动连接出去建立一个反向的SSH隧道,然后外面的人就可以通过这个反向的SSH隧道轻松突破防火墙链接到的你的本地机器看下面这个图在Source port这里填写8080,也就是隧道的入口是端口8080,Destination这里填写localhost7001,也就是隧道的出口是本地的7001端口,下面的单选按钮要选中Remote,表示建立的隧道是个反向隧道,填写完毕别忘记点Add按钮,在上面就可以看到显示的是R8080localhost7001成功登录远程主机guantouping后,反向隧道就建立好了在远程主机guantouping上输入命令telnet localhost8080就可以连接到你的本地端口7001哈哈,这样一个特洛伊木马般的反向SSH隧道就建立完毕了我们在远程主机上连接8080端口,其实就连接到了我们本地机器的7001端口了上面共有两个复选框,我们提到了一个,已经说了,选中以后就允许其他机器连接隧道入口了那第二个Remote portsdo thesameSSH-2only,则是给反向隧道使用的,也就是说远程主机的那个反响隧道入口也做同样的事情,也就是允许其他机器连接远程主机上的反向隧道入口,不过一般情况下这个选项都不会起作用的^_^把PuTTY作为一个安全的代理服务器来使用这个简单,在Source port那里填写上1080,Destination这里空下不填,选中下面的Dynamic,最后别忘了点Add按钮登录远程主机后,一个代理服务器就建立好了,这个代理服务器的地址就是localhost1080,还是加密的哦据说国外某著名的主机供应商就提供远程的SSH链接,通过这个方法我们就建立了一个加密的socks5代理,可以轻松绕过万恶的GFW去拥抱Wikipedia,波~,来一口设置PuTTY的默认设置每次登录主机,无一例外的修改字体,修改字符集,修改窗口的大小,指定私钥文件,允许X11转发,…几台主机还好说,几十个上百个主机这样三天两头的设置也会让唐僧烦了的选中一个先前配置好的会话,点Load按钮然后修改Saved Sessions会话名称和Host Name这里的主机地址,点Save如果在Saved Sessions这里和上面的Host Name清空,点Save按钮,就可以把设置保存为默认设置备份PuTTY的设置用PuTTY最不爽的就是,它把所有的设置都保存到注册表了,本来这不是什么问题但是难免会重装一下机器,用下面的命令可以备份PuTTY的所有设置regedit/e PuTTY.config.regHKEY_CURRENT_USER\Software\SimonTatham\PuTTY删除PuTTY的设置如果只是在其他机器上临时用了一个PuTTY,用完以后想删除PuTTY的配置,就在控制台里输入如下的命令putty.exe-cleanup用PuTTYgen来生成密钥,以后可以不用密码登录服务器了PuTTYgen是密钥生成器,用来生成一对公钥和私钥供PuTTY、PSCP、Plink、Pagent来使用直接运行PuTTYgen可以看到如下的界面点击Generate按钮就开始生成一个公钥和私钥对,生成完毕后,点下面的Save private key就可以把私钥保存起来,扩展名是.ppk的文件Load按钮可以把先前保存的私钥重新打开,然后做些修改,比如修改注释和私钥口令,或者把PuTTY格式的私钥转换为OpenSSH格式的开始用PuTTYgen创建密钥单击Generate按钮,然后你会看到进度条上面有个提示Please generatesome radomnessby movingthe mouseover theblank area.,意思就是让你用鼠标在空白区域随机移动随着鼠标在空白区域的移动,进度条会一直走下去停止移动鼠标,进度条也就停止了那我们就移动鼠标,直到进度条走满为止等进度条走完之后,会出现下面的界面最上面那个大大的只读文本框里面是公钥,用来保存到OpenSSH的authorized_keys文件中,这个文件中的每一行都是一个公钥默认情况下,这个文件位于Linux用户主目录的.ssh/子目录中,如果文件和目录都不存在,可以直接创建但是创建的文件、目录和用户主目录$HOME,$HOME/.ssh,$HOME/.ssh/authorized_keys的权限有个限制就是对除了本帐户的其他所有帐户都要求是只读的,否则的话,即使公钥、私钥都匹配无误,也是无法登入系统的这是SSH服务器的一个安全要求,因为如果别的帐户可以修改你的authorized_keys的话,恶意的增加一个公钥,那对方不用你的帐户口令也能以你的帐户登入系统了对于一些特殊要求,你可以在SSH服务器的配置文件sshd_config中用指令StrictModes no来取消这个限制在sshd_config的帮助手册中可以看到StrictModes Specifieswhether sshdshould checkfile modesand ownershipoftheusers filesand homedirectory beforeaccepting login.This isnormally desirablebecause novicessometimes accidentallyleave theirdirectory orfiles world-writable.The defaultis yes.小技巧每次修改authorized_keys这个文件时,你可以用如下的命令来修改,确保所有的文件属性和权限无误mkdir-p$HOME/.sshtouch$HOME/.ssh/authorized_keys\chmod go-w$HOME$HOME/.ssh$HOME/.ssh/authorized_keysvim$HOME/.ssh/authorized_keys还有一个要强调的是那个Key comment,这是密钥的注释,一定要修改因为这个密钥是给自己用的,所以最起码要输入自己的名字,用默认的注释很容易和其他人的密钥混淆的如果担心自己的密码忘记了,可以在后面加上密码提示,当然了,不要让别人用注释猜出你的密钥口令比如,我可以把注释修改为ChaiFeng
[20061120]w.z.后面的w.z.就是我的密码提示,能猜出来么呵呵输入注释,上面的公钥也会随之发生变化现在最重要的是,输入自己的密钥口令就是Key passphrase和Confirm passphrase这个两个输入框如果不输入口令,直接保存私钥会看到这个提示为了安全起见还是输入口令吧,要不任何人得到这个私钥都可以不用口令登入系统了最后单击Save private key来保存私钥吧,保存到自己认为安全的地方,比如存放到私人的USB闪存盘上需要登录时,插上USB闪存盘登录完毕后就可以把USB闪存盘取下来,哈哈,这样子就比较安全了大家也注意到了,还有个Save publickey按钮,这个是保存SSH2格式的公钥,有些SSH服务器要求用这种格式的公钥文件一般情况下,我们是不需要的,所以这里也就保存了以后还想的话,就用PuTTYgen把私钥Load出来,然后再保存也可以用密钥登录服务器的流程上面杂七杂八的说了一堆创建密钥时的事情,大家会不会已经有些乱了呢我把这个过程再罗列一遍如果没有公钥/密钥对,就用PuTTYgen创建一个,已经有了就可以忽略这一步一个公钥/密钥对可以用在不同的服务器上,所以也不需要重复创建,关键要有足够强健的密码和安全的存放象先前一样输入帐户名和口令登录到主机上输入如下命令,来编辑authorized_keys文件mkdir-p$HOME/.sshtouch$HOME/.ssh/authorized_keys\chmod go-w$HOME$HOME/.ssh$HOME/.ssh/authorized_keysvim$HOME/.ssh/authorized_keys把这个文本框里的公钥粘贴到vim中去,需要说明几点这个文本框里的内容是一行的,粘贴到vim中时,别忘了按字母o这个键,否则的话,粘贴进去后,开头的ssh-rsa会变成sh-rsa,为什么呢哈哈,想想吧为什么不按字母键i呢这个在vim中不就是插入么原因是我很懒,按字母o,我可以节省一次按回车键虽然按大写O也行,那我不是还得再按一下Shift键么别忘了,在PuTTY中默认的粘贴可是按鼠标右键哦,然后按一下ESC键,然后输入wq保存退出,等等,大家先别着急的输入wq,既然输入冒号还得按下Shift键,那我们就干脆直接两下大写的字母Z,也就是ZZ怎么样vim也一样保存退出了吧这次又节省了一次按键和两次寻找字母的移动,把懒得优良传统再一次在实践中发扬光大如果已经有了私钥,第4步里的那个公钥忘记保存了,就用PuTTYgen把这个私钥Load上去,然后重新复制一下公钥吧在PuTTY的配置Connection-SSH-Auth这里面,指定上私钥,然后记得保存Session,以后就不需要重复这一步了最好也指定上自动登录的用户名,还记得这里吗开始登录吧,这次你会看到一个不同于以往的登录提示现在输入的口令可不是主机上这个账户的口令了,而是先前创建的这个密钥的口令以后不管这个账户的口令是什么,即使再复杂,也和我们没关系了只要这个账户的$HOME/.ssh/authorized_keys文件中,有我们的公钥,我们就随时用匹配的私钥都可以登录了配合后面提到的Pagent,我们连输入密钥口令这一步也可以忽略过去登录成功了,别忘了按Ctrl+d注销哦以后这些步骤就不需要再重复了,只需要打开PuTTY后,双击一下保存的会话名称,输入密钥口令Pagent加载密钥,每次开机后只需要输入一次密钥口令终于轮到Pagent出场了,双击一下Pagent.exe,嗯,没反应再双击一下,咦出来个提示,说已经运行了看看右下角吧,在这里呢双击一下Pagent的图标,出来这样一个界面很简洁的,Add Key是添加私钥,Remove Key是把选中的私钥从Pagent中卸载了好,现在单击Add Key按钮添加私钥,我把这个演示用的私钥保存到C\了然后会出现输入密钥口令的对话框,输入正确的密钥后,单击OK这时,在Pagent的窗口中就能看到我们的私钥已经装载上去了现在打开PuTTY,选择先前保存的Session,双击一下只要自动登录用户名设置上,主机上改帐户的authorized_keys文件里也有匹配的公钥哈哈,发现没有完全不需要口令,我们已经登录到系统了在Pagent的图标上点右键,也可以快捷的选择已经保存的会话建议大家把Pagent放到启动组里面,这样每次一开机,Pagent自动运行,然后我们只需要把私钥装载一下,然后我们就可以一直享受自动登录系统的乐趣了再配合上以后会讲到的Plink、PSCP这些,我们可以实现很多工作的自动化进行完全不需要每次输入用户名、口令、输入又长又多的命令,再做一些烦躁的文件备份,最后还得记得注销系统,难道不觉得麻烦么这一切烦恼很快就会远离我们了,继续往下看吧用SSH来传输文件PuTTY提供了两个文件传输工具PSCPPuTTY Secure Copy clientPSFTPPuTTYSFTP clientPSCP通过SSH连接,在两台机器之间安全的传输文件,可以用于任何SSH包括SSH v
1、SSH v2服务器PSFTP则是SSH-2中新增的特性,使用的是新的SFTP协议,使用上与传统的FTP类似事实上PSCP如果发现SFTP可用,PSCP就会使用SFTP协议来传输文件,否则还是SCP协议PSFTP与PSCP相比,PSFTP的优点是可以与服务器进行交互,遍历服务器上的文件系统,在一个会话中上传或下载多个文件而PSCP只能一次传输一个文件,传输完毕后立刻终止会话PSCP的使用在控制台直接执行pscp可以看到帮助C\pscp PuTTYSecureCopyclient Release
0.58Usagepscp[options][user@]host sourcetarget pscp[options]source[source.][user@]host targetpscp[options]-ls[user@]host filespecOptions-V printversion informationand exit-pgpfp printPGP keyfingerprints and exit-p preservefile attributes-q quiet,dont showstatistics-r copydirectories recursively-v showverbose messages-load sessnameLoad settingsfrom saved session-P portconnect tospecified port-l userconnect withspecified username-pw passwlogin withspecified password-1-2force use of particularSSH protocol version-4-6force useof IPv4or IPv6-C enablecompression-i keyprivate keyfile forauthentication-batch disableall interactiveprompts-unsafe allowserver-side wildcardsDANGEROUS-sftp force useofSFTP protocol-scp force useofSCP protocolC\可以看出P SCP的使用是很简单的,把常用的几个选项说一下-q安静模式,传输文件时什么也不显示,否则会显示出文件的传输进度,默认是关闭的-P port指定服务器的SSH端口,注意这个是大写字母P,默认是-P22,如果主机的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 foobarserverbackup/就把本地的c\autoexec.bat复制到了主机demo-server上的用户taylor所在的主目录下的backup子目录中这个路径可能是/home/taylor/backup所以PSCP大致用法的例子就是pscp-P22-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 taylorc\path\foo.txt
192.
168.
6.200/tmp把本地的C\path\foo.txt传送到主机
192.
168.
6.200的/tmp目录下,但是主机的SSH端口是3122pscp-P3122c\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 PuTTYSecure FileTransferSFTPclient Release
0.58Usage psftp[options][user@]host Options-V printversion informationand exit-pgpfp printPGP keyfingerprints andexit-b fileuse specifiedbatchfile-bc outputbatchfile commands-be dontstop batchfileprocessing iferrors-v showverbose messages-load sessnameLoad settingsfrom savedsession-l userconnect withspecified username-P portconnect tospecified port-pw passwlogin withspecified password-1-2force useof particularSSH protocolversion-4-6force useof IPv4or IPv6-C enablecompression-i keyprivatekeyfile forauthentication-batch disableall interactiveprompts C\用法与PSCP大同小异,虽然有个-load选项,其实这个没啥用,后面用主机名的时候,与PSCP一样直接用上会话名称就可以了用PSFTP登录到服务器上以后,操作与FTP差不多,这里简单的说一下吧open登录主机open[username@]sessname|hostname|ip[port]比如open taylor@demo-server3022就是以用户taylor的身份,登陆到主机demo-server上,SSH端口是3022open demo-server登陆demo-server,这里的demo-server可以是PuTTY中已经保存的会话名称,也可以是主机的名称,如果主机名称与会话名称相同,以会话名称为准close关闭SFTP连接这个没啥说的,close就关闭了SFTP连接quit结束本次的SFTP会话也没啥用法,就是关闭了PSFTP这个程序help[command]帮助直接打help就可以看到帮助指令,后面指定上一个命令就可以查看该命令的帮助,比如help opencd[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用Plink更方便快捷的执行远程主机上的命令Plink是PuTTY的命令行连接工具,主要用于自动化工作的处理直接在控制台执行plink,可以看到Plink的帮助C\plink PuTTYLink command-line connectionutility Release
0.58Usage plink[options][user@]host[command]hostcan alsobe aPuTTYsavedsessionname Options-V printversion informationandexit-pgpfp printPGP keyfingerprints andexit-v showverbose messages-load sessnameLoad settingsfrom savedsession-ssh-telnet-rlogin-raw forceuseofaparticular protocol-P portconnect tospecified port-l userconnect withspecified username-batch disableall interactiveprompts Thefollowing optionsonly applyto SSHconnections-pw passwlogin withspecified password-D[listen-IP]listen-port DynamicSOCKS-based portforwarding-L[listen-IP]listen-port hostport Forwardlocal portto remoteaddress-R[listen-IP]listen-port hostport Forwardremote portto localaddress-X-x enable/disable X11forwarding-A-a enable/disable agentforwardi ng-t-T enable/disable ptyallocation-1-2forceuseof particularprotocolversion-4-6forceuseof IPv4or IPv6-C enablecompression-i keyprivatekeyfile forauthentication-m fileread remotecommandsfrom file-s remotecommand isan SSHsubsystemSSH-2only-N dontstartashell/commandSSH-2only C\看上去Plink的使用方法、参数与PSCP、PSFTP都很类似-P port指定服务器的SSH端口,注意这个是大写字母P,默认是-P22,如果主机的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,用户是taylorplink-P3022taylor@
192.
168.
6.200export CATALINA_HOME=~/apache-tomcat-
5.
5.17;export JAVA_HOME=~/jdk
1.
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.200export CATALINA_HOME=~/apache-tomcat-
5.
5.17;export JAVA_HOME=~/jdk
1.
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.200date+%F%T大家实际执行一下命令看看,会发现,这个命令并没有返回我们期望的结果,而是返回了一个错误C\plink
192.
168.
6.200date+%F%T datetoo manynon-option arguments%T Try`date--helpfor moreinformation.可是在服务器上直接执行命令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 dirfoo bar Volume in drive Cis System Volume Serial Number is9C51-A51C Directoryof C\tmp\foo2006-11-220948DIR.2006-11-220948DIR.2006-11-1611580foo.log1Files0bytes Directoryof C\tmp\bar2006-11-220948DIR.2006-11-220948DIR.2006-11-1611580bar.log1Files0bytes2Dirs1,107,345,408bytes freeC\tmp dirfoobarVolumeindriveCisSystemVolumeSerialNumberis9C51-A51C Directoryof C\tmp\foobar2006-11-220948DIR.2006-11-220948DIR.2006-11-1611580foo-bar.log1Files0bytes2Dirs1,107,345,408bytes freeC\tmp说到这里,就会明白上面的那个命令plink
192.
168.
6.200date+%F%T其实在主机上执行的真实命令是date+%F%T,而不是命令行中指定的date+%F%T不过还好,Windows的控制台可不认得单引号,所以上面那个命令的正确用法应该是c\plink
192.
168.
6.200date+%F%T2006-11-22093957我经常需要登录到服务器上把ADSL重新拨号,可以把下面的命令写到一个文本文件中,比如保存到了C\adsl-restart.command.txt echostoping./sbin/adsl-stop echostarting./sbin/adsl-start echodone./sbin/adsl-status然后执行如下命令plink-m c\adsl-restart.command.txt root@
192.
168.
6.251我经常要查看Tomcat的运行日志plink taylor@
192.
168.
6.200tail-f~/apache-tomcat-
5.
5.17/logs/catalina.out每天都要看服务器上的剩余空间,就用这个命令plink taylor@
192.
168.
6.200df-k假设连接着另外一个网段
10.
204.
26.0,有台内网IP为
10.
204.
26.21的Solaris8主机只能用telnet登录,为了防止被监听,我们可以用Plink建立一个隧道,隧道开放120秒钟,如果隧道没有被使用,就自动断开连接,然后我们在本地就可以用命令telnet localhost2623的安全登录那台Solaris8主机了plink-L
262310.
204.
26.2123sleep120在主机上正在运行着tor,默认的监听地址是
127.
0.
0.19050,用Plink建立一个隧道,然后浏览器上配置代理服务器为
127.
0.
0.1,端口是9050,这样就能够安全的使用tor代理了,不用担心从我们的机器到主机有被监听的可能了plink-C-N-L
9050127.
0.
0.19050taylor@结合上PSCP我们还可以完成文件的每天备份plink taylor@
192.
168.
6.200tar jcf$date+documents.%F.tar.bz2~/documents pscptaylor@
192.
168.
6.200$date+documents.%F.tar.bz2c\backup\plink taylor@
192.
168.
6.200rm-f$date+documents.%F.tar.bz2如果把这些常用的操作写成批处理文件,到时候要重启一下Tomcat,或者马上察看一下Tomcat日志,再或者只是要把ADLS重新拨号以下,只需要用鼠标一双击这个批处理文件,稍等一下就自动完成了不比你打开PuTTY,登录到服务器上,然后再一个一个的执行命令,最后还得注销来的方便快捷么再懒一些,把自动备份的批处理放到计划任务里面,每天定时完成,哈哈,有时间上网找些好玩的东西了,不用每天忙于这些繁杂重复的命令中了用假象去迷惑敌人如果我说Google的服务器也开放了SSH,但是只有特定的IP可以连接上去,不信么声明下面的图片都未经修改,我以Google的名义发誓,绝对没有PS知道是怎么回事么FAQ常见问题我在PuTTY官方网站下载的,可是执行PuTTY、Pagent、PuTTYgen时总是出错,而命令行执行的这几个却没问题这种情形我也碰到过,一个解决的办法就是去下载最新版,或许你碰巧下载的是旧版本另外一个解决办法就是,创建三个扩展名为.manifest的文本文件,然后把这三个文件复制到PuTTY的目录中,文件内容分别如下把下面的内容复制到记事本中,文件名保存为PAGEANT.exe.manifest xmlversion=
1.0encoding=UTF-8standalone=yes!--This ispresent purelyto makeVisual Stylesin XPwork better.See
20020104174954.A12067@imsa.edu.--assembly xmlns=urn schemas-microsoft-comasm.v1manifestVersion=
1.0assemblyIdentity type=win32name=Pageant version=
0.
0.
0.0processorArchitecture=x86/dependency dependentAssembly!--Load CommonControls6instead of5to getWinXP native-looking controlsin theclient area.--assemblyIdentity type=win32name=Microsoft.Windows.Common-Controls version=
6.
0.
0.0publicKeyToken=6595b64144ccf1df language=*processorArchitecture=x86//dependentAssembly/dependency/assembly把下面的内容复制到记事本中,文件名保存为PUTTY.exe.manifest xmlversion=
1.0encoding=UTF-8standalone=yes!--This ispresent purelyto makeVisual Stylesin XPwork better.See
20020104174954.A12067@imsa.edu.--assembly xmlns=urn schemas-microsoft-comasm.v1manifestVersion=
1.0assemblyIdentity type=win32name=PuTTY version=
0.
0.
0.0processorArchitecture=x86/dependency dependentAssembly!--Load CommonControls6instead of5to getWinXP native-looking controlsin theclient area.--assemblyIdentity type=win32name=Microsoft.Windows.Common-Controls version=
6.
0.
0.0publicKeyToken=6595b64144ccf1df language=*processorArchitecture=x86//dependentAssembly/dependency/assembly把下面的内容复制到记事本中,文件名保存为PUTTYGEN.exe.manifest xmlversion=
1.0encoding=UTF-8standalone=yes!--This ispresent purelyto makeVisual Stylesin XPwork better.See
20020104174954.A12067@imsa.edu.--assembly xmlns=urn schemas-microsoft-comasm.v1manifestVersion=
1.0assemblyIdentity type=win32name=PuTTYgen version=
0.
0.
0.0processorArchitecture=x86/dependency dependentAssembly!--Load CommonControls6instead of5to getWinXP native-looking controlsin theclient area.--assemblyIdentity type=win32name=Microsoft.Windows.Common-Controls version=
6.
0.
0.0publicKeyToken=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%from空间完美搬家到新浪博客!特别声明1资料来源于互联网,版权归属原作者2资料内容属于网络意见,与本账号立场无关3如有侵权,请告知,立即删除。