Wednesday, March 21, 2007

使用ssh 客户密钥快速登录

使用ssh 密钥代替密码验证来加速并自动登录如果您是几台机器的管理员,那么能够快速导航到任意指定服务器上的某个shell 是很关键的。必须键入“ssh my.server.com”(后面跟有密码)不仅乏味,而且容易分散注意力。必须突然从“哪里出现问题了?”转到“到达出问题的地方”并回到“那么这究竟是怎么一回事?”,使得不少管理员都未老先衰。这种方法也会提出类似于“我为什么进入了这间房屋?”的数字等价问题(此外/usr/games/fortune 只会使这个问题变得更加糟糕)。
缓慢费力地登录到机器上意味着花在解决问题的精力减少了。较新版本
的ssh 提供了一种安全的方法即公钥交换,可以替代反复地输入密码。
要使用ssh 服务器的公钥,首先需要生成公钥/ 私钥对:
$ ssh-keygen -t rsa
对于DSA 密钥也可使用-t dsa,或者若使用v1 协议则使用-t rsa1。(如果确实在使用v1 协议,那应该感到惭愧哦。赶快升级到v2 吧!)在输入上述命令后,可看到如下内容:
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rob/.ssh/id_rsa):
只需在此敲回车键。系统就会提示输入通行短语;只需连续两次敲入回车键(但应该阅读下面的安全通告)。结果看上去应该像下面显示的这样:
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/rob/.ssh/id_rsa.
Your public key has been saved in /home/rob/.ssh/id_rsa.pub.
The key fingerprint is:
a6:5c:c3:eb:18:94:0b:06:a1:a6:29:58:fa:80:0a:bc rob@localhost

这样将会创建两个文件,~/.ssh/id_rsa 和~/.ssh/id_rsa.pub。要对服务器使用此密钥对,可尝试:
$ ssh server "mkdir .ssh; chmod 0700 .ssh"
$ scp .ssh/id_rsa.pub server:.ssh/authorized_keys2
当然,要用服务器名代替server。每次系统都会提示您输入密码。现在,只需简单地键入ssh server,无须输入密码即可自动登录。如果登录成功,系统也会将此公钥用于scp。
如果该工具不能让您登录,请检查您在~/.ssh/* 和server:~/.ssh/* 上的文件许可。您的公钥(id_rsa)应该是0600(仅显示在本地机器上),在所有其他机器上则应该是0655 或更大的数字。非常好。现在您可以快速而明了地使用ssh 服务器了。还有可能比这更快地连接到经常要连接的机器上吗?答案当然是肯定的,请参阅第67小节“Turbo 模式的ssh 登录”。
安全性因素
有些人认为使用公钥会导致潜在的安全风险。但毕竟用户必须窃取您的私钥才能访问您的服务器。虽然如此,密码也存在这样的问题。好好想想,为了对机器(或scp 文件)进行shell 访问,您每天要输入多少次同一个密码?那些机器中有多少台(或全部)都使用同一个密码?是否曾经以不太可靠的方式使用密码(在Web站点上,在并非总能保持及时更新的个人计算机上,或者在您无法直接控制的带有ssh 客户端的机器上使用密码)?如果经常遇到以上任意一种情形,那么就必须考虑对相同设置采用一个ssh 密钥,这可以使得攻击者实际上不可能在未经授权的情况下获得访问权限(当然,首先要假定您安全地保存了您的私钥)。

No comments :