ssh登录远程主机不需密码,有木有!

       众所周知当远程登录主机的时候必须进行认证输入密码,如果我们由于某种原因需要频繁的远程登录主机,那就要一遍一遍的输入密码,这将让人轻者烦躁,重则抓狂,现在我们可以一劳永逸,嘿嘿...
       在进行这个“一劳”之前我们要先了解用户登录远程主机的认证过程,我们以主机a和b为例,现在主机a想要远程登录主机b,先向b发送一个登录信息,b将向a发送一个回应信息,要求b进行身份认证,a应该将用户名和对应的密码发给b,b经过核对成功后就将让a登录,但是现在互联网是一个鱼龙混杂之地,林子大了说不定就专门有窃取你的用户名和密码的鸟,因此出于安全考虑a发给b的用户名要进行加密,加密的方式就是公钥加密,b主机生成一对公钥和私钥,当a主机向b发送登录请求的时候,b就询问a是否要进行连接,是的话就接受b向a发送的公钥对中的公钥,a用b的公钥将自己的密码进行加密发送给b。当登录完成a和b之间通信的时候,信息也要加密,此时加密的内容较多所以就不再时候效率低下的公钥加密,而是才用加息加密,对方也采用同样的字符串进行解密即可,由于对称加密虽然效率高,但是安全性较低,时间长了加密用的字符串就容易被哪些鸟破解,所以系统默认每一个小时自动协商换用其他的字符串进行加密,当然我们也可以指定系统更换加密字符串的时间,这样安全性就大大的提高了。

    我们假设a将以redhat的身份登录主机b,主机b的地址为192.168.1.1
    首先,我们在主机a上生成一对公钥和密钥,输入命令

      ssh-keygen -t rsa (-t指定生成密钥对的类型,现在使用rsa的较多),我们将看见系统输出让你选择保存密钥对名字,你可以自己起名,我们采用默认,然后系统又将让你选择保存密钥对的位置,默认为保存在当前目录的隐藏目录.ssh下,你可以自己指定保存地址我们此处采用默认地址,然后又将提示你是否对生成的密钥对进行加密,密钥对就放在主机a上,为防止其他人偷窥选择加密更安全,我们现在不进行加密,好了,系统将通知你密钥对已经生成和存放的位置,我们根据提示进入到相关位置将会发现id_rsa(私钥)和id_rsa.pub(公钥)两个文件。OK,这说明我们在主机a上生成密钥对成功。
       接下来我们将主机a的公钥拷贝到主机b对应a将要使用的登录名的家目录下,Linux专门有进行公钥在主机之间进行拷贝的命令,ssh-copy-id -i (-i指定拷贝的是公钥文件,系统将以a的登录名自动的放置在b主机对应a的登录名的家目录下)后面跟上公钥的地址及名字及主机b的地址,

       ssh-copy-id - i ./.ssh/id_rsa.pub redhat@192.168.1.1 即可,系统将提示你是否连接,选择yes,然后输入对应的密码(我们这将是左后一次输入密码),拷贝成功与否,系统将给出提示,成功的话 我们以后就可以以redhat用户名直接登录b而不需要输入密码,如果没有成功就重复以上步骤。
    通过同样的方法我们可以实现其他用户名登录远方主机不再输密码。
       ssh登录远方主机不再输密码,有木有!

      (也可直接将a主机公钥上传到b主机对应用户的.ssh下,改名为authorized_keys)