当应用于shell脚本中时,很经常需要使用公钥进行ssh或者scp之类的操作。这样才能把一些shell脚本完全脱离人工干涉。

ssh-keygen命令提供了这样的功能:

0、应用场景:需要从服务器138,公钥控制服务器135和105.

1、首先在138上,生成密钥和公钥:

ms@tj1cantispam002 ~ $ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ms/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ms/.ssh/id_rsa.
Your public key has been saved in /home/ms/.ssh/id_rsa.pub.
The key fingerprint is:
b6:29:ea:5b:1a:72:97:4a:71:d7:6a:f8:a3:88:15:03 ms@tj1cantispam002

可以看到,新生成的文件包括:id_rsa和id_rsa.pub。前者是放置在138上的密钥,后者的内容可以追加到105和135的authorized_keys文件中。

2、放置公钥

将id_rsa.pub scp到105和135上,追加到对应用户(这里是ms)home目录下.ssh/authorized_keys文件中:

cat /path/to/138/id_rsa.pub >> ~/.ssh/authorized_keys

3、免密码,使用公钥登陆

在138上,这时可以直接登陆105和135了:

ssh ms@10.60.0.105

ssh ms@10.60.1.135

需要注意的是,不同机器间,需要使用同样的用户账号名称。比如,这里我使用的都是“ms”账户。

另外,在该账户的.ssh目录下,会自动生成的known_hosts文件,保存了ssh、scp登陆过的主机信息。

————————————–

如果按照以上步骤配完,仍然无法免密码登陆的话,考虑以下解决方案:


1、如果除了你之外别人对“authorized_keys”文件也有写的权限,SSH就不会工作。 
2、对ssh使用 -v 参数debugv发现已经公钥授权已经通过,但接下来还是采用密码认证。百思不得其解。于是在网上查,好多人都遇到了这个问题,也有很多的解决方法,但每一个都试过了就是不行。
  • 方法一:改.ssh目录的权限为700      无效
  • 方法二:重新生成密钥               无效
  • 方法三:修改sshd_config里的选项    无效
  • 方法四:把可以登录的机器上的和ssh
     相关文件按原权限拷贝到本地         无效
  • 最后想到可能中途拷错,对所有的相关文件md5发现是一样的,很无语.......
    无意中发现这台机器配了samba并把root目录做了samba映射,可能是为了方便把root目录的权限改成了777。我当时用samba也很容易出现权限问题,当时也是用这种很“暴力”的方法解决的,但我不是对/root目录是对其下的一个小目录。想到/root目录在Linux上是有较强的安全管理规则的。可能是这个出了问题。对root改回650,再次测试成功通过。心喜!

Leave a Reply