在Linux主机间通常用ssh命令互相跳转,比如从源主机登录到目标主机,一般要提供目标主机的用户名和密码。有时会用ssh命令在另一台主机上直接实现命令行操作,或者在脚本中实现ssh命令,每次都要提供用户名和密码就会比较麻烦了。
那么如何实现不提供密码就能登录到目标主机呢?Linux提供了一套方案,可以让主机之间建立信任,不需要提供密码就能够相互登陆。
我们这里假设有两台Linux主机,分别为host-src和host-dst。要求实现host-src可以不用密码登录到host-dst上。
操作步骤
1.生成ssh-key
ssh-keygen
中间会要求写入ssh-key的地址,直接按回车用默认文件夹 /root/.ssh/id_rsa,即可。
还会要求写入passphase,相当于一个口令。为免麻烦也可以不填。
2. 将产生的id_rsa.pub文件中的内容,添加到host-dst的/root/.ssh/authorized_keys文件中。
scp /root/.ssh/id_rsa.pub host-dst:/root/.ssh/ ssh -t host-dst "cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys && rm -f /root/.ssh/id_rsa.pub"
在host-src上,尝试ssh host-dst,就不需要密码了。
想一下上述操作的原因
其实可以想到,如果想要达到上述的目的,就需要让host-dst相信host-src是可靠的。host-src如果能够提供一个证书,证明host-src到host-dst是可靠的就可以了。
Linux上提供了一个ssh-keygen命令来创建和管理这些证书。简单的执行ssh-keygen命令就可以生成主机的证书。
证书保存的位置在/root/.ssh,这是一个隐藏的文件夹,这里保存了主机的证书。证书分为dsa和rsa两种,认证方式不同,一般根据需要选择一种就可以了,ssh-keygen默认选择rsa证书。打开/root/.ssh文件夹可以看到有id_rsa和id_rsa.pub两个文件,这是证书的公钥和私钥,公钥有一个.pub的后缀。
公钥和私钥成对出现,才能成为一个完整的身份认证。如果把公钥登记到host-dst,那么当host-src需要登录到host-dst时,只要host-src的私钥能和host-dst的公钥对应起来,host-dst就能够信任host-src是经过认证的。这就像是身份证的身份认证机制相同,一方面我们需要想*机关提交个人身份信息,这是公钥,一方面我们要保留身份证,这是私钥。
将id_rsa.pub文件内容添加到host-dst的/root/.ssh/authorized_keys文件中,这就是将公钥登记到host-dst的过程了。