SSH双机信任和免密码初探

在平常开发过程中,少不了的要使用ssh/scp等命令,在执行命令时经常发现会打印一写提示信息或者是需要进行交互的信息,但是一直以来都没有认真去了解过其具体过程,只止步于会用。今夜抽得一点闲暇时间,了解一下。

SSH双机信任,顾名思义,通过SSH给主备双机建立互相信任的关系,信任关系一旦建立,使用ssh登录,scp拷贝等都不需要再输入密码,即实现免密,一旦实现免密,就可以很方便的通过ssh将命令发送到对方兵器执行,方便管理。

 


假如目前局域网内有如下两台主机
主机A(ip:192.168.45.131)
主机B(ip:192.168.45.132)

分别在上述两台主机新建test用户
useradd test
passwd test
主机A(ip:192.168.45.131, user:test, pwd:test@131)
主机B(ip:192.168.45.132, user:test, pwd:test@132)

OK,由于test用户刚刚建立,其home目录下必定是没有.ssh目录的
[test@131 ~]$ pwd
/home/test
[test@131 ~]$ ls -a
. .. .bash_logout .bash_profile .bashrc .gnome2 .mozilla
[test@131 ~]$

132主机也是如此…


此时,在131主机上执行命令生成一对公私钥

[test@131 ~]$ mkdir -p /home/test/.ssh; ssh-keygen -t rsa -P “” -f /home/test/.ssh/id_rsa
Generating public/private rsa key pair.
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
d8:50:64:d3:a4:6b:f9:5e:0e:58:c9:cf:60:5b:35:6f test@131
The key’s randomart image is:
+–[ RSA 2048]—-+
| .=o. |
| o o. |
| . . o |
| + + . . o |
| . S . E|
| . = . |
| . + + |
| . + |
| . . |
+—————–+
[test@131 ~]$

  1. 如果不mkdir事先创建出.ssh目录,公私钥生成之后,是无法保存在/home/test/.ssh/目录下的;
  2. 也可以直接使用ssh-keygen -t rsa,但是这样需要做3次交互(第1次需要指定保存的文件,第二次需要指定密码,一般都是空密码,第三次需要再次确认密码),所以这里通过指定-P和-f参数,可以省去交互(主要是考虑到后续写shell脚本);

OK,此时在131主机上.ssh目录结构如下
/home/test/.ssh/
├── id_rsa
└── id_rsa.pub

在132主机上,还没有.ssh目录


将上述在131主机上生成的公钥,追加到132主机test用户的,这样131机器使用ssh/scp等命令就不需要再输入密码了。执行如下命令

[test@131 ~]$ ssh-copy-id -i /home/test/.ssh/id_rsa.pub “-p 22 test@192.168.45.132
The authenticity of host ‘192.168.45.132 (192.168.45.132)’ can’t be established.
RSA key fingerprint is 2f:49:29:b2:ab:1f:5e:5c:a1:b7:8d:46:a8:ed:ba:5f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.45.132’ (RSA) to the list of known hosts.
test@192.168.45.132‘s password:
Now try logging into the machine, with “ssh ‘-p 22 test@192.168.45.132‘“, and check in:

.ssh/authorized_keys

to make sure we haven’t added extra keys that you weren’t expecting.

[test@131 ~]$

从上述提示信息中可以知道,由于131主机是首次登录132主机,所以无法确定132主机的真实性(authenticity),说白了就是在131主机上的known hosts文件中找不到132主机的信息,因为131主机此时还没有文件,询问是否继续connect。

输入yes继续操作,提示尝试使用’-p 22 test@192.168.45.132‘登录主机,并且登记到132机器的.ssh/authorized_keys文件中。


OK,此时131主机上.ssh目录机构如下
[test@131 ~]$ tree /home/test/.ssh/
/home/test/.ssh/
├── id_rsa
├── id_rsa.pub
└── known_hosts

rsa公钥id_rsa.pub文件内容如下
[test@131 ~]$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAz8ZhK51W1fFdNy+1/K2k0qgOCS9iC84h0j6Ec3ZBrQ+gK+PzZZp8WImBNLFe0ghyfRCsXTYJ89LD1IUQWnm8m+I/54c6kgmiZkpf4srnfSDQjK+/KgoDcEZLmKtOJqBlktQbKxFD31P21zsJ1FJouA5elGrnvv5yPv8oUlCHCLiJPOjnb33c2dCwkDHaxqArA5lYxRrbGwM8hd+0dXdDRvxLAAaNzVe5Q6Rx3V0mIINT3ixcXBS/FEVn07rYg+JbDQiUeqFfDdfTfp/kjr7vVdV0EuSwXF+XBI/RKhiocPiD0re7kSBEoaDyrJv4oKoHzuB6cqGv7FyiauM39UAzaQ== test@131
[test@131 ~]$

新增的known_hosts文件,内容如下
[test@131 ~]$ cat .ssh/known_hosts
192.168.45.132 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzdXFovlYZ/IVbw3hOEsiBx5z6tcRPsFAyeS95tuWawwcIYeL624NvRnpzeml6yyxfLnZqn8XUoXUCcjayRkdI9yMK16GtELmBSqqPGRZizRtwvDzr5tc76zO+EWLbPG7FmADmv7wJGCZT4fGqn1lf8ujAwdKtfRTYf2bBQhHi8iOUxWBl/cAk9fDPaWMJTrywPBJgoc2mVy3R94OdlT4bLJtOifalzD1UbSTj4u1hQjLH5/6F8cDgOSH2BUvuYcRf9PjMhVzeGbvePVv4dMXXSr60CxOEu2G9wnQru7xciocpEEaNUoOqjop9ESWN9E+gL7lBTVavh4ID/lNIgK0Cw==
[test@131 ~]$

132主机上.ssh目录机构如下
[test@132 ~]$ tree /home/test/.ssh/
/home/test/.ssh/
└── authorized_keys

新增的authorized_keys文件,内容如下
[test@132 ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAz8ZhK51W1fFdNy+1/K2k0qgOCS9iC84h0j6Ec3ZBrQ+gK+PzZZp8WImBNLFe0ghyfRCsXTYJ89LD1IUQWnm8m+I/54c6kgmiZkpf4srnfSDQjK+/KgoDcEZLmKtOJqBlktQbKxFD31P21zsJ1FJouA5elGrnvv5yPv8oUlCHCLiJPOjnb33c2dCwkDHaxqArA5lYxRrbGwM8hd+0dXdDRvxLAAaNzVe5Q6Rx3V0mIINT3ixcXBS/FEVn07rYg+JbDQiUeqFfDdfTfp/kjr7vVdV0EuSwXF+XBI/RKhiocPiD0re7kSBEoaDyrJv4oKoHzuB6cqGv7FyiauM39UAzaQ== test@131
[test@132 ~]$


可以发现,这次操作中,131主机其实就是将自己的rsa公钥文件写入到了132主机的authorized_keys文件中,这样一来,131主机登录132主机便不需要再输入密码。

那known_hosts文件的作用是啥?ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告, 避免你受到DNS Hijack之类的攻击。

也就是说,131主机访问132主机时,131主机的ssh会把132主机的公钥记录在known_hosts文件中。但是132主机,我们并未生成过公钥,这个公钥是哪儿来的呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值