新安装的debian系统传输文件,相对于nfs/samba等文件服务器来说,scp无疑是最简便快捷的,但是在自动化脚本中使用就不怎么方便了,因为scp传输文件,默认是需要输入密码的,无论你当前使用的用户是否设置密码,都会弹出输入密码的提示,这就给自动化脚本造成了一点小小的障碍,我们要解决的就是去掉这个输入密码的提示,以前我一直照着别人给的方法依葫芦画瓢,总感觉繁琐,而且不理解原理,记忆起来也比较困难。其实只要建立2台主机的信任关系就达到目的了,以下是个最简单的实现方法:
目标:A机器使用scp命令直接向B机器传输文件,且不需要输入密码。
方法:
A机器需要进行的设置:
执行ssh-keygen命令,然后一路回车,最后会显示一个虚线框框起来的不规则字符,这时候去到当前用户目录查看,发现多了一个.ssh的目录,进入该目录,能看到一个id_rsa.pub的文件,这个文件就是公钥证书,打开它复制里面的内容到剪切板;
B机器需要进行的设置:
进入A机器scp传输文件时所使用的B机器的用户名对应的用户目录,新建一个.ssh目录(如果有直接进入),在该目录里新建一个文件authorized_keys,将刚才复制的剪切板的内容粘贴进入,保存退出。
验证:在A机器输入,scp 文件名 用户名@B机器IP:/目标目录 回车,不用输入密码,文件直接传输过去了。
另外附带说明一个问题,该问题我以前一直没仔细看,一直采用的是暴力方式,这次重装系统偶然发现了。假设我们按以上方法成功配置了,后来B机器重装了系统,这时候在A机器输入scp命令时,会出现warning开头的一大串命令,意思大致就是远程主机的身份信息发生变化了,并提示修改known_hosts文件,由于该文件里面信息复制混乱,基本无法区分哪条是哪个主机,我的笨办法就是全部删掉,当然这样会很麻烦,其他主机跟着倒霉,都要重新生成。以下是一个典型的提示信息示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
b8:bd:72:c0:02:32:b0:ac:b4:ab:c0:da:0f:b6:f1:87.
Please contact your system administrator.
Add correct host key in /home/showtime/.ssh/known_hosts to get rid of this message.
Offending key in /home/showtime/.ssh/known_hosts:1
RSA host key for 192.168.0.177 has changed and you have requested strict checking.
Host key verification failed.
lost connection
偶然发现了,其实不用暴力方法的,请看这句(第11行)
1 Offending key in /home/showtime/.ssh/known_hosts:1
已经明确提示了是哪一行了,因此编辑该文件,把对应行删除掉,然后再次连接时,会自动生成新的。