SSH建立信任关系

发表于

A机器不用密码直接ssh登陆B机器:

1、在B机器上,生成B机器的公私钥匙对,用这条命令生成:ssh-keygen -b 1024 -t rsa

[root@localhost ~]# ssh-keygen -b 1024 -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
40:44:8d:2c:20:bd:c0:1b:b2:01:9f:e8:f9:bb:db:67 [email protected]

可以看到公钥和私钥都生成在了.ssh目录下,公钥为id_rsa.pub,私钥为id_rsa
重命名这两个文件,把公钥内容写入authorized_keys文件中
[root@localhost ~] cd .ssh
[root@localhost .ssh]# mv id_rsa.pub id_rsa_B_root.pub
[root@localhost .ssh]# mv id_rsa id_rsa_B_root
[root@localhost .ssh]# cat id_rsa_B_root.pub >> authorized_keys

2、拷贝B机器的私钥到A机器的.ssh目录(没有.ssh目录的话,手动建立)
用这个命令:scp ~/.ssh/id_rsa_B_root root@A机器IP:~/.ssh/
完成拷贝

3、登录A机器,在.ssh目录下建立config文件,进行配置。
[root@localhost .ssh]# vi config 内容如下:
Host B
Hostname 6.6.6.6
User root
Port 22
IdentityFile ~/.ssh/id_rsa_B_root

4、在A机上修改这两个文件的权限
[root@localhost .ssh]# chmod 600 config
[root@localhost .ssh]# chmod 600 id_rsa_B_root

搞定!这样就可以拿着B机的私钥id_rsa_B_root放到其他任何机器上,免密码登录B机了。

 

============

如果执行以上操作后,登陆还是需要密码,应该就是权限的问题了。做如下尝试:

A机:
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/id_rsa_B_root
ssh-agent bash
ssh-add ~/.ssh/id_rsa_B_root

B机:
chmod 700 ~/.ssh/
chmod 600 ~/.ssh/authorized_keys
用root用户重启sshd进程

还有一个需要注意的地方,~/.ssh/config文件中,Hostname是域名或者IP地址,Host是主机名,建议Host或者Hostname只写一个,因为两个都写的话,可能造成免密失败,有以下三种情况:
1, 如果两个都写的话,ssh root@B是可以免密登陆的,但是ssh [email protected]就需要输入密码。原因:网络查询有这样的解释“.ssh/config文件机制,该命令ssh name@host首先匹配host中的Host字段.ssh/config,而不是HostName子字段。这让我困惑了好几个星期......”
2, 如果只写Host不写Hostname,需要在/etc/hosts文件中配置B的IP地址
3, 如果不写Host只写Hostname,可以直接用ssh [email protected]免密登陆