ssh是用来远程登陆linux系统的默认工具,使用方便,安全性强。
但当用户需要同时管理很多台机器,或者需要多次重复登陆某台机器的时候,每次输入密码(尤其是强密码)就成为了很蛋疼的一个操作。
ssh为用户提供了一种方便且安全的解决方案,即通过密钥来进行认证客户机,使得客户机在把自己的公钥添加到服务器端的受信任列表后,可以无密码登陆该远程机器。
该工具即为ssh-keygen。
ssh-keygen有N多可以附加的参数,其中最常用为-t,用来设置生成密钥所使用的算法类型(rsa/dsa),可通过以下命令实现:
[cce_bash] ssh-keygen -t rsa ssh-keygen -t dsa [/cce_bash]
如果没有附加-t参数,则默认为使用rsa加密。
执行ssh-keygen命令会出现如下提示:
[cce_bash] Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. [/cce_bash]
其中第二行是让你输入保存的路径,一般为默认即可。第三、四行,则是让你输入你的密钥的passphrase,即为密码一样的东西,目的是为了对密钥对的私钥进行加密,可以降低私钥被盗用的风险。
以默认生成路径为例,你可以在~/.ssh/目录下看到id_rsa和id_rsa.pub两个文件,其中id_rsa为私钥,id_rsa.pub为公钥。为了实现无密码登陆的目的,我们还需要将id_rsa.pub的内容添加到服务器端的/root/.ssh/authorized_keys文件中,方法就不做赘述了。
[update]: authorized_keys的属性需要设置为600,否则会有问题。
在操作完成后尝试进行ssh连接,会发现如果在之前生成密钥对的时候设置了passphrase,这时会要求我们输入密码短语。为了实现免密码登陆,还需要进行两步操作:
[cce_bash] eval `ssh-agent` ssh-add [/cce_bash]
然后按要求输入passphrase即可。
下面部分参考自http://www.newsmth.net/pc/pccon.php?id=1363&nid=130053
passphrase是用来对密钥对的私钥进行加密的,不会在网络上传播。
缺点:最后两步必需每次登录都执行。因为3设置环境变量,不同的登录是不同的。但对于shell,可以放在.bash_profile中执行,对于cron脚本,也可以在脚本中设置执行;4更是致命的,因为它是交互的,无法自定执行。
解决:只好设置passphrase为空,这样最后两步也就省掉了。
附:
ssh-agent 程序如同一个看门人,它根据需要安全地提供对安全密钥的访问。ssh-agent 启动后,它就会在后台运行,并且可以由 ssh 和 scp 程序等其他 OpenSSH 应用程序所使用。这就使得 ssh 程序可以请求一个已经解密了的密钥,而不是在每次需要时向您询问私钥的安全口令。
近期评论