两台主机间免密操作
很多时候,我们都需要ssh免密操作,因为shell脚本中无法输入密码。
ssh登陆、scp文件传输等都需要免密。
总之,如果主机A需要在主机B执行命令,就必须登陆主机B,这时候,我们可以通过配置,让主机A的某个用户可以免密登陆主机B,这样就可以了。
登陆------->执行命令或脚本
例子:
在主机A上进行scp文件传输,不论是本地传给远程,还是远程传输到本地,都需要远程主机B的密码,这时候,我们就可以通过配置免密,使得我们可以做到A->B和B<-A的文件传输都不需要远程主机B的密码。
ssh登陆流程
ssh中,主机A发送登陆请求的时候,会将公钥也带去,当主机B收到主机A的远程登陆请求的时候,去查看登陆用户所在家目录的.ssh/authorized_keys
文件,如果当前的登陆请求的公钥在这个文件中,就不去验证密码,直接登陆成功。如果不存在,就去验证密码的正确性。
所以,通过上图我们清楚的知道,想要用户Tom在主机A中免密登陆主机B,
只要在A总生成公钥,然后放到B的/home/tom/.ssh/authorized_keys目录即可。
1.生成公钥和私钥
输入ssh-keygen -t rsa -P ''
然后回车,生成公钥和私钥,结果如下:
ssh-keygen -t rsa -P ''
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hjs/.ssh/id_rsa):
Created directory '/home/hjs/.ssh'.
Your identification has been saved in /home/hjs/.ssh/id_rsa.
Your public key has been saved in /home/hjs/.ssh/id_rsa.pub.
The key fingerprint is:
f4:99:87:a1:06:8b:5a:7d:f1:88:b3:34:27:6c:94:4e hjs@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| |
| . |
| E o . |
| B = * = |
| o % S * . |
| o o O . |
| . . |
| |
| |
+-----------------+
看到已经生成两个文件:
id_rsa id_rsa.pub
id_rsa
是私钥、id_rsa.pub
是公钥
-P表示密码,-P ” 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。如果原来的~/.ssh文件夹已经存在,回车后要输入y,以确认重新生成公钥和私钥。
2.公钥放到远程主机
scp .ssh/id_rsa.pub hjs@8.8.8.8:/home/hjs/id_rsa.pub
The authenticity of host '8.8.8.8 (8.8.8.8)' can't be established.
ECDSA key fingerprint is 1b:ec:cf:4c:06:15:1b:8e:27:75:6d:9e:6e:66:f7:6f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '8.8.8.8' (ECDSA) to the list of known hosts.
hjs@8.8.8.8's password:
id_rsa.pub
现在就可以ssh、scp操作就可以免去远程主机B的密码了