/ 中存储网

Ubuntu下使用OpenSSH的八个小窍门分享

2011-05-28 00:00:00 来源:中存储网

来到ubuntu下以后,以前在windows下积累的“高效”办公的习惯都要重新改写。首当其冲的就是服务器的远程管理工作。今天的主角就是会伴随openssh-server一同发布的openssh-client。并且默认不安装openssh-server的情况下,大多的发行版也会默认集成这个东东。笔者以前在远程登陆到linux系统以后也会经常用里面的ssh命令再连到其它的机器,但是今天所提到的大部分的东西都是在笔者使用ubuntu以后才慢慢知道的。这个朴实无华的小东东究竟有什么样的能量呢?接下来就由笔者来分享这次的一个个小甜点:

1.私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/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远程管理的屠龙刀(终极篇)>>有提到,在使用字符界面的图形工具时会乱码的情况呢?笔者惊喜的发现,那个问题在使用openssh这个客户端工具的时候,根本不存在!

是什么原因呢?ubuntu对中文环境支持的好?因为用了GNOME Terminal 2.28.1?因为ssh启用了对utf8的支持?不想追究原因了,因为我已经喜欢上ubuntu了。

来自:http://rainbird.blog.51cto.com/211214/248225