首先,实现这个功能有两种方式,其一使用Linux自带的工具ssh-keygen生成密钥对,具体参考http://linux.vbird.org/Linux 架站文件--遠端連線伺服器4.5,具体步骤如下:

方法一:

1.在linux服务器端建立 Public與Private Key :

使用要远程登录linux服务器的用户名登录服务器,这里以用户wwdhks为例,然后使用 ssh-keygen 這個指令來進行Key的產生即可!

[wwdhks@www ~]$ ssh-keygen -t rsa   <==這個步驟在產生 Key pair

Generating public/private rsa key pair.

Enter file in which to save the key (/home/wwdhks/.ssh/id_rsa): www_wwdhks_id_rsa然后按下Enter

Created directory '/home/wwdhks/.ssh'.

Enter passphrase (empty for no passphrase): <==這裡输入私钥保护密码,制作私钥的时候要输入密码才能打开。

Enter same passphrase again:<==這裡输入私钥保护确认密码

提示“Enter file in which to save the key (/home/wwdhks/.ssh/id_rsa):”是指生成的密钥对存在什么地方叫什么名字,如果多台服务器的时候要区分开,按照IP或者计算机名称划分。

提示“Enter passphrase (empty for no passphrase):”是指是否使用密码来保护生成的密钥对里的私钥,如果不使用密码保护,任何人得到私钥都可以直接使用他。

在当前用户家目录的.ssh目录里生成两个文件:www_wwdhks_id_rsa和www_wwdhks_id_rsa.pub(或者是id_dsa和id_dsa.pub),前者是私钥,后者是公钥。公钥需要放到要登录的远程服务器上,私钥自己保留。

2.将公钥文件id_dsa.pub文件存到 authorized_keys 檔案中,

使用ls -a 查看~/.ssh 目录权限为:drwx------  2 wwdhks wwdhks 4096 07-04 09:30 .ssh wwdhks必须有x权限,因此使用命令chmod 700 ~/.ssh  否则wwdhks无权限进入该目录,登录的时候提示server refused our key。

mv ~/.ssh/id_rsa.pub  ~/.ssh/authorized_keys

Client 必須製作出 Public & Private 這兩把 keys,且 Private 需放到 ~/.ssh/ 內(linux下面才需要这样,window下面直接把私钥导入到putty便可以了,例如我们想通过bbs登录到www服务器,则需要将www服务器的私钥www_wwdhks_id_rsa拷贝到bbs服务器~/.ssh/目录下,并且名字是id_rsa,同时必须要切换到做了密钥认证的用户才可以登录,如果有几台服务器呢,那只能指定每台服务所使用的私钥了,参考:http://www.leeyupeng.com/2011/11/multiple-ssh-private-keys/);

Server 必須要有 Public Key ,且放置到使用者家目錄下~/.ssh/authorized_keys

未來,當您還想要登入其他的主機時,只要用puttygen.exe將您的私钥文件打开就可以看到公钥内容,然后复制公钥内容添加到其他主機上面欲登录帳號的 ~/.ssh/authorized_keys 這個檔案中!这样可以方便管理多台服务器但是安全性不够高,例如我们可以将www服务器的公钥添加到bbs服务器~/.ssh/authorized_keys里面,这样www服务器的私钥也可以登录bbs服务器了(经测试通过puttygen.exe将公钥copy到其它主机好像无法登陆,格式好像有点问题);

3.为了安全,登录到远程服务器,修改公钥的权限,最好为600,不能大于644,即组权限不能为写(该步骤为可选)

[wwdhks@www .ssh]$ chmod  600 authorized_keys

4.更改远程服务器ssh配置。我的实例是使用openssh,所以更改/etc/ssh/sshd_config中如下参数

PasswordAuthentication no       --这样就关闭了密码验证方式,通过ssh就算黑客有用户名密码没有私钥也无法登陆

更多参数设置可以参考鸟哥或者虚拟机里面的配置文件,记得修改文件之后一定要重启服务sshd才能生效

5.将id_rsa私钥文件下载到本地ftp或者smbclient(记得删除服务器上的~/.ssh/id_rsa),然后打开puttygen.exe---conversions---Import key---选择id_rsa文件---输入"生成密钥对时输入的密码"---确定---Save private key---保存成*.ppk文件,这样window下面就可以通过putty

登陆了,具体参考window下putty登陆linux

6.在Linux下,wheel组就类似于一个管理员的组。

通常在UNIX下,即使我们是系统的管理员,也不推荐用root用户登录来进行系统管理。一般情况下用普通用户登录,在需要root权限执行一些操作时,再su登录成为root用户。但是,任何人只要知道了root的密码,就都可以通过su命令来登录为root用户--这无疑为系统带来了安全隐患。所以,将普通用户加入到wheel组,被加入的这个普通用户就成了管理员组内的用户,但如果不对一些相关的配置文件进行配置,这个管理员组内的用户与普通用户也没什么区别--就像警察下班后,没有带枪、穿这便衣和普通人(用户)一样,虽然他的的确确是警察。根据应用的实例不同应用wheel组的方法也不同。这里对于服务器来说,我们希望的是剥夺被加入到wheel组用户以外的普通用户通过su命令来登录为root的机会(只有属于wheel组的用户才可以用su登录为root)。这样就进一步增强了系统的安全性。具体步骤如下
1)修改 /etc/pam.d/su 文件,找到“#auth           required        pam_wheel.so use_uid

这一行,将行首的“#”去掉。

然后,用“usermod -G wheel 用户名”将一个用户添加到wheel组中。

然后,用刚刚被添加到wheel组的用户登录,并执行su命令登录为root用户…这时,输入了正确的root密码可以正常的登录为root用户。但是,如果换成一个不属于wheel组的用户时,执行了su命令后,即使输入了正确的root密码,也无法登录为root用户--普通用户登录为root用户的权限被×××了~(会收到“密码错误”的提示)。这样无疑提高了系统的安全性~

(以上步骤基于CentOS,并适用于Fedora Core和RHEL。。。。)

方法二:

以上方式只适合于linux到linux,很多人估计跟我一样,客户机使用putty或其他win版的ssh客户端,他们的配置稍微不一样点点,但原理都一样,以下简介使用putty实现密钥对验证用户的步骤。

 

1.下载完整的putty软件包,我们使用软件包中的puttygen.exe生成密钥对。运行puttygen.exe

2.选择要生成的密钥对的类型和长度,点击Generate,然后将鼠标放到“key”框中随意移动(产生随机数据),待到第一 次的进度条走完后,生成密钥对。

3.生成密钥对后,可以修改密钥对的“Key comment”(密钥说明)、“Key passphrase”(密钥的使用密码就是我们登陆 linux要输入的第一个密码)。 一切ok后,点下面的 Save private key把私钥保存起来,扩展名是 .ppk 的文件。此时不 要关闭程序。使用Putty登陆远程服务器,在用户目录下,创建~/.ssh/authorized_keys 复制Puttygen.exe程序Public key for pasting into Open SSH authorized_keys file:下面的内容到服务器上的authorized_keys文件中粘贴并保存退 出,记得使用vi粘贴的时候不要漏掉ssh中的第一个s字母

4.为了安全,登录到远程服务器,修改公钥的权限,最好为600,不能大于644,即组权限不能为写(该步骤为可选)

5.使用ls -a 查看~/.ssh 目录权限为:drwx------  2 wwdhks wwdhks 4096 07-04 09:30 .ssh wwdhks必须有x权限,因此  使用命令chmod 700 ~/.ssh  否则wwdhks无权限进入该目录,登录的时候提示server refused our key。

6.如果使用点击“Save public key”保存公钥,并将刚刚生成的公钥拷贝至远程sshd服务器上对应用户家目录里的.ssh目 录内,改名为authorized_keys,同样最好是设置权限为600。这样好像不行,奇怪ing,因为保存私钥为文件时其中的内容 与Public key for pasting into Open SSH authorized_keys file:中的内容有点差别

总结:制作远程登录linux公钥与私钥有两种方式,使用linux自带的openssh或者使用puttygen.exe,使用openssh制作需要将私钥文件下载到windows,使用puttygen.exe转换为ppk私钥文件,这样putty才可以识别到,直接使用puttygen.exe制作时不能保存为公钥文件,直接复制公钥的内容然后粘贴到~/.ssh/authorized_keys 才行。此外还要注意权限,使用命令 chmod 700 ~/.ssh  否则wwdhks无权限进入该目录,还需修改authorized_keys权限 ,chmod  600 authorized_keys, 否则登录的时候提示server refused our key。最后,我们可以利用一个私钥制作成为N个私钥,内容一样,但是保密密码不一样(使用puttygen.exe重新生成),想要登入其他的主機時,只要用puttygen.exe將您的 私钥文件打开 就可以看到公钥内容,然后copy到其他主機上面欲登录帳號的~/.ssh/authorized_keys 這個檔案中!

 

无密码登陆验证可以考:http://wwdhks.blog.51cto.com/blog/839773/924409

 

基本流程:A要登陆B

1.A生成公钥和秘钥,然后将公钥拷贝到要登陆的服务器,因为B上有公钥,而A上有秘钥,刚好对的上,所有可以登录。