您的位置:首页 > 运维架构 > Linux

linux下远程管理利器-ssh

2009-12-24 07:51 429 查看
前段时间写了<<linux远程管理的屠龙刀>>分享了自己在使用SecureCRT进行远程管理的一些心得体会.虽然不知道能帮助多少人进一步的认识SecureCRT,并提高工作效率.但确实收到了不少的恶评,其中一条就是在使用盗版软件.呵呵,也罢,这是不争的事实.笔者也是心里明白,估计说要使用putty或者其它软件的兄弟正在使用的xp应该也是盗版的吧.哈哈,操作系统都不是正版还在乎啥软件呢?笔者还是那句话:这些都是工具,是用来解决问题的,解决问题就是王道.不过说来可笑.写完那篇文章以后,有同事想体验ubuntu的9.10怕有啥搞不定的问题,拉我一起上路,也好有个"照应".于是乎,所以的exe就这样消失了.同事说:终于全用正版的软件了.我说:欢迎来到开源的美好世界! 废话少说,直接切入正题。来到ubuntu下以后,以前在windows下积累的“高效”办公的习惯都要重新改写。首当其中的就是服务器的远程管理工作。还好笔者乐于接受挑战并善于改变,很快一个个小问题迎刃而解,几周下来竟感觉使用ubuntu做办公系统是件快乐的事情。呵呵,似乎还没有指明本次的主角。今天的主角就是会伴随openssh-server一同发布的openssh-client。而且默认不安装openssh-server的情况下,大多的发行版也会默认集成这个东东。笔者以前在远程登陆到linux系统以后也会经常用里面的ssh命令再连到其它的机器,但是今天所提到的大部分的东西都是在笔者使用ubuntu以后才慢慢知道的。这个朴实无华的小东东,究竟有什么样的能量呢?下面就由笔者来分享这次的一个个小甜点: 1.私key登陆 看过上一节<<从ssh服务谈服务器安全>>的朋友,应该对里面的key登陆还有印象。无论你使用哪个客户端软件都会有设置使用key的选项,ssh命令也不例外。默认情况下,ssh会读取用户宿主目录的.ssh里的id_rsa这个文件。这里有个小插曲:笔者原来的key是用secureCRT生成的。保存的时候会提示是用secureCRT私有格式还是openssh格式。笔者当时用的secureCRT格式,放到这个目录以后,你看那个着急啊,死活不好使。后来又用secureCRT重新保存成openssh格式才可以(重新保存不是重新生成哟,想想后面有那么多服务器要一个一个重新放上去就会没有重新生成的欲望。)。还有一点要注意的是,一定要是id_rsa这个文件名哟,不然的话急死你也不知道啥原因(当然了后面学习到使用配置文件的时候,你会知道还有identity和id_dsa,到时候想用啥名随心所意)。再有就是这个文件的权限是600,不然的话ssh也不会买帐的哟。 2.指定用户名 每个人都会有自己喜欢的用户名,像笔者就喜欢用rainbird.所以笔者登陆系统的时候用户名也是rainbird.而你连接的服务器不会判断你当前的用户名,然后给你建立一个帐号哟。默认使用“ssh ip”的时候。ssh会判断你当前是否有配置文件指定默认的用户名,没有的话再判断你在命令里有没有使用ssh -l rainbird ip或者ssh rainbird@ip这样的格式,没有的话,它就会默认取你当前系统登陆的用户名。来连接远程的系统。如果你每次连接的用户要用的用户名都一样而又不是rainbird比如说root的话。每次都要输入-l或者user@ip这样的形式是不是很烦呢?反正输入的东西越多效率就越低。前面有提到ssh会先判断是否有配置文件。经过笔者的学习发现:ssh会读取两个配置文件。一个是~/.ssh/config,没有的话就会去读/etc/ssh/ssh_config.呵呵,这也是linux的工作理念:每个用户都会有自己个性的配置文件,所以用户默认会使用统一的配置文件。抱着试试看的想法,笔者vi ~/.ssh/config,写入User竟发现讲法高亮了,看来就是它,于是写入: User root 保存退出以后,再ssh ip的时候,竟发现真得以root@ip的形式连接了: [rainbird@rainbird ~]$ssh 192.168.5.18 root@192.168.5.18's password: 3.指定连接的端口和密码 在设定了默认连接的用户名以后,笔者算是尝到了甜头。于是开始仔细研究/etc/ssh/ssh_config这个配置文件。笔者以前也只是知道有这么个文件,还真没仔细的看过。这一研究不要紧,许多问题都迎刃而解。最先引起笔者注意的两行是: # Port 22 # Protocol 1,2 这两行的意思就是说,默认连接的端口是22,默认连接使用的ssh协议1,2都可以。看过<<从ssh服务谈服务器安全>>的朋友还记得里面有关于这两点的描述吧。直接打开~/.ssh/config把这两行也加去: Port 1222 Protocol 2 是不是又省去了很多东西呢? 4.添加便于访问的主机名 这点严格来说算不上是ssh命令独有的。无论使用哪种客户端软件都会有保存会话的功能,但是ssh命令有没有读取默认会话配置的功能呢?笔者也想了很长时间,但是没找到解决办法。其实笔者就是觉得每次都要ssh xxx.xxx.xxx.xxx有点太累,主要是笔者对数字天生不感冒。咋办呢?老大说,你直接用域名不就得了?嗯?域名好记,但是好记是好记,也不短啊,咋办呢?直接写hosts得了!因为域名的出现是因为hosts不够用了。在hosts够用的情况下,为啥不用hosts呢?再说不但一劳永逸,还节省了解析时间,一举两得,于是乎:sudo vi /etc/hosts xxx.xxx.xxx.xxx web 以后再访问web的时候,直接ssh web.嗯,有点符合linux的简洁高效的思想了。 5.ssh 中文乱码问题 世界真美好。丰富多彩,五彩缤纷。linux下正常显示中文的问题,一直是笔者最关心的问题。当使用ssh登陆到中文环境的linux服务器上时,中文还是乱码。咋办呢?这天生一对的东西,能不能解决这个问题呢?答案是肯定的。在/etc/ssh/ssh_config有这么一句话: SendEnv LANG LC_ALL 这个选项默认是打开的,意思是发送系统语言环境。网上有说可以写成SendEnv LANG=en.US.UTF-8 LC_ALL=en.US.UTF-8。但是根据笔者的理解:当LC_ALL设置的时候,LANG就算设置了也要服从LC_ALL的,所以笔者直接在~/.ssh/config里加入了这句: SendEnv LANG LC_ALL=en.US.UTF-8 哈哈,中文就正确显示了。生活真美好! 6.ssh客户端启用ssh key转发 看过<<linux远程管理的屠龙刀(终极篇)>>的朋友,应该记得里面有一个自动转发key的功能,在远程到一台linux再ssh其它机器的时候可以用你本机的私key自动去验证。极大的提高的工作效率和安全性。这个功能用普通的ssh命令可不可以实现呢?答案还是那么的肯定!但是要分两步走,首先vi ~/.ssh/config加入: ForwardAgent yes 然后再执行命令: ssh-add 它会默认把~/.ssh/id_rsa加到你的中转代理里。哇卡卡,我胡汉三又回来了~~~ 7.防止断开连接 ssh服务端,出于安全和节省资源的考虑,会把一段时间不活动的会话自动断开。虽然经过前面的改造你连接一台机器已经是很省事的事儿了。但是出去抽根儿烟回来,就要再这么登陆一次,让人感觉实在不爽。那咋办呢?俗话说:上有政策,下有对策。 vi ~/.ssh/config ServerAliveInterval=60 这样服务器是不是变得很乖了呢:) 8.亢龙无悔 还记得<<linux远程管理的屠龙刀(终极篇)>>有提到,在使用字符界面的图形工具时会乱码的情况呢?笔者惊喜的发现,那个问题在使用ssh这个客户端工具的时候,根本不存在!

是什么原因呢?ubuntu对中文环境支持的好?因为用了GNOME Terminal 2.28.1?因为ssh启用了对utf8的支持?不想追究原因了,因为我已经喜欢上ubuntu了。 本文就要结束了,但是对于ssh和linux的学习和使用依然还要继续,小结一下吧:有心的读者可能都发现了。本篇里提到的这些功能,都是在secureCRT里有提到。没有提到的功能,会在下一节的<<linux下远程管理利器-tmux>>继续提.在这里,笔者想说:完成同样的功能,linux和windows的区别就在是不是有图形界面。两个操作系统,两种生活方式,我喜欢快捷高效的命令行,你呢?本文出自 “rainbird” 博客,请务必保留此出处http://rainbird.blog.51cto.com/211214/248225
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: