一直以来都是使用OpenSSH,其密钥格式是使用的自己的OpenSSH格式,公钥认证登陆的方式非常简单,下面会直接举例说明,原理性的东西大家google去搜索。还有一些密钥是使用IETF SECSH格式的,这个应该是延续早期SSH版本的密钥形式。

环境:
机器A:使用OpenSSH
机器B:使用OpenSSH
机器C:使用ssh2 (具体是SSH Secure Shell 3.2.9.1 (non-commercial version)
机器D:使用ssh2

情景1:从机器A 登陆到 机器B
机器A上生成公钥和私钥:先到用户目录下,# ssh-keygen -t rsa,不想用密码就直接一路回车。
机器A的用户目录下回生成一个目录.ssh/,里面有id_rsa(私钥文件)和 id_rsa.pub (公钥文件)
把id_rsa.pub的内容放到机器B的用户目录的~/.ssh/authorized_keys里(没有.ssh目录就mkdir一个)。
这时,从机器A使用ssh登陆到机器B是不需要密码的。

情景2:从机器C 登陆到 机器D
机器C上使用的ssh2用的密钥格式是IETF SECSH。
机器C上生成公钥和私钥:先到用户目录下,# ssh-keygen2 -t rsa,同上。
机器C的用户目录下回生成一个目录.ssh2/,里面有id_rsa_2048_a(私钥文件)和 id_rsa_2048_a.pub (公钥文件)
在.ssh/ 建立文件identification内容为“IdKey id_rsa_2048_a”,这个意思貌似是声明一下私钥是id_rsa_2048_a。
登陆机器D,在用户目录下建立.ssh目录,建立文件authorization,内容为“Key xxx.pub”(多机器认证是可以写多行的),xxx.pub(xxx自己定义)在同样的目录下,内容和机器C上生成的公钥id_rsa_2048_a.pub相同。
这时,从机器C使用ssh登陆到机器D是不需要密码的。

情景3:从机器A 登陆到 机器C
机器A(OpenSSH格式)和机器C(IETF SECSH格式)使用的不同版本的密钥格式。
这里我们需要用机器A的私钥生成IETF SECSH格式的公钥,而不是直接使用id_rsa.pub。
在机器A上,# ssh-keygen -e -f ~/.ssh/id_rsa,这时候会产生IETF SECSH格式的公钥内容,把内容放到机器C的~/.ssh/xxx.pub(xxx自己定义名字)里,然后建立文件authorization,内容为“Key xxx.pub”。
这时,从机器A使用ssh登陆到机器C是不需要密码的。

其他情况相信你了解原理之后也很容易实现,去试试吧。

小知识点:
ssh-keygen -e -f ~/.ssh/id_rsa 把 OpenSSH 格式的密钥转化成 IETF SECSH 格式的
ssh-keygen -i -f ~/.ssh/id_rsa 把 IETF SECSH 格式的密钥转化成 OpenSSH key 格式的