ssh自动登录配置
2012-06-01 10:22:12 阿炯

ssh输密码登录的过程很不方便,于是我们就需要布署密匙的方式来自动验证登录,即使用公钥认证(ssh public key authentication);将客户端机器的ssh public key添加到服务器的 ~/.ssh/authorized_keys 文件中,可实现ssh的免密码登录。这样做使得登录服务器更加安全和快捷。

原理:通过ssh的key生成工具,我们会得到一个公匙,一个私匙,公匙我们需要保存在服务器端,私匙我们保存在客户端 ,在客户端通过ssh客户端软件连接到服务器上,通过成对密匙较验身份信息,获取授权。

下面是简单的配置方法

如果你使用的是linux操作系统,我们可以用ssh-keygen工具生成一对秘匙,它包含私匙 id_rsa和公匙id_rsa.pub。当在询问你输入密码时直接回车。
ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hto/.ssh/id_rsa): 
Created directory '/home/hto/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/hto/.ssh/id_rsa.
Your public key has been saved in /home/hto/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

生成的密匙默认放在主目录下面的'.ssh'目录下,~/.ssh/id_rsa和~/.ssh/id_rsa.pub这两个文件。

在windows下可以用putty自带的PUTTYGEN.EXE工具生成秘匙,xshell可以从'Tools->User Key Mangager'进行操作。

我们用上传工具,把id_rsa.pub 密匙传到远程服务器端的/root目录下面。
1.sftp、scp、ssh-copy-id上传
2.cat .ssh/id_rsa.pub | ssh user@remoteserver 'cat >> .ssh/authorized_keys' 当然'.ssh'目录在存在。

接下来我们用ssh客户端软件登录远程服务器,在远程服务器端执行下面命令。
mkdir ~/.ssh
chmod 700 ~/.ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub

到这里,密匙己经布好了。你可以通过这个安装好的密匙,免输入密码即可登录shell了。

如果你用了putty的key导出工具导出公匙,就不能直接这样做了,你要用ssh自带的工具,导入公匙。
ssh-keygen -i -f ~/id_rsa.pub >> ~/.ssh/authorized_keys

是在linux客户端下面,那么我们就要确保id_rsa.pub和id_rsa位于~/.ssh/目录下,这样才可以使用这个Key自动登入服务器。
在ssh工具包中,已经包含了用于将公有key文件复制到它将要无认证登录的机器上。
$ ssh-copy-id --help
Usage: /usr/bin/ssh-copy-id [-i [identity_file]] [user@]machine

$ ssh-copy-id -i id_rsa.pub web@192.168.20.179
web@192.168.20.179's password:
Now try logging into the machine, with "ssh 'web@192.168.20.179'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.


更多关于key自动登录问题请参见:ssh-key自动登录问题集

如果还有问题的话,可以参看下面的操作步骤。


客户端生成公钥和私钥

生成一个名为test的公钥和私钥对,密码留空不输入。具体的说明请看这里: ssh-keygen 基本用法

$ cd .ssh/
$ ssh-keygen -t rsa -f test -C "freeoa-key"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

配置公钥到服务器

将公钥内容添加到服务器的~/.ssh/authorized_keys 文件中。

alias 实现命令快速登陆

做好配置之后,通过ssh可以直接登录了。对经常登录的服务器,可以将ssh登录命令的alias加到 ~/.bash_profile文件中。
alias 100='ssh freeoa@192.168.10.100'

登录的时候:
$ 100

无法登录一般的原因

客户端的私钥和公钥文件位置必须位于 ~/.ssh 下。

确保双方 ~/.ssh 目录,父目录,公钥私钥,authorized_keys 文件的权限对当前用户至少要有执行权限,对其他用户最多只能有执行权限。

注意git登录,要求对公钥和私钥以及config文件,其他用户不能有任何权限。

服务器端 ~/.ssh/authorized_keys 文件名确保没错 :).

ssh-copy-id

ssh-copy-id 是一个小脚本,你可以用这个小脚本完成以上工作。这个脚本在linux系统上一般都有,不过在一些新版本上这个小工具已经没有了。