为服务器设置了定时任务,每天准时备份一次数据库,但备份的文件始终还是在云端。本着不能把鸡蛋放在一个篮子里的原则,想要利用putty自带的psftp工具把备份文件同步到本地,因为是一个需要长期持续的操作,手动来完成实在有点儿枯燥,于是想利用批处理命令来完成这个步骤。
自动化的处理自然需要省略掉输入账户密码的流程,于是首先需要解决的是免密码登陆的问题,服务器使用的是阿里云的服务器,在阿里云的官网云服务器ECS管理页面申请并绑定了密钥,然后按照官网教程将下载好的pem文件转化成ppk文件,最后用putty加载ppk登陆。虽然阿里云的动态教程说的很详细,然而并没有什么用,折腾了一下午,最后还是没能成功登陆......
利用puttygen自主生成密钥对
免密登陆的原理,其实是在本地主机生成一组相关的数据,一部分用于登陆时由本地发送给服务器验证,另一部分用来放在服务器上,供服务器验证请求的数据。就象武侠剧里的玉佩梗,两块玉咔哒一合上,就算是找到亲人了。为啥本地生成的数据可以供服务器用于验证呢,因为这一块数据你得先登陆上服务器,然后再粘贴进指定的文件。反正都已经上来了,管你是主子还是黑客呢,一个字从了。
puttygen是putty自带的用来生成密钥对的小工具,点击主界面上的“Generate”按钮,软件就会开始生成随机码,比较有意思的设定是:在生成随机码期间需要用户不断的移动鼠标,鼠标的轨迹可能会被读取并影响随机码的生成。
进度条刷满进行下一步操作,首先点击“Save private key”,保存用于本地的私钥文件,文件名随意,自己觉得方便输入就行,注意该文件的后缀名为“ppk”,如果用户输入为“bitop”,那么就会生成一个全名为“bitop.ppk”的私钥文件。
接下来复制上方文本框内的所有内容,上方的文本框因为尺寸较小,所以框选复制的时候需要注意下拉一下鼠标,以避免漏掉一些内容导致最后无法通过验证。
登陆服务器提交数据
进入根目录下的隐藏文件夹“.ssh”:
cd .ssh
打开密钥文件,这个文件是个空文件,利用vim打开它,把从本地复制过来的一堆数据粘贴进去,粘贴前记得先按一下insert切换到输入模式:
vim authorized_keys
putty免密码登陆
接下来测试一下是否能够成功免密登陆,打开putty,选择左侧菜单中的connection -> ssh -> auth,在该界面找到“Browse”,点击并选择我们刚才生成的“bitop.ppk”文件;
选择左侧菜单顶部的“Session”返回登录页面,有设置完后找不着返回按钮直接关掉整个程序经历的同仁过来握个爪。
在host name对话框输入用户名与服务器ip地址,不带上用户名的情况下会要求输入用户名,输入后直接登陆不会再跳出密码输入窗口,用户名与服务器ip之间需要加一个@符号,假设用户名为root;
root@101.102.103.104
成功实现免密码登陆,阿里云给的密钥是pem格式的,教程里说明要用puttygen转换为ppk格式,但按教程操作进行转换后,仍旧会提示“服务器拒绝了这个key”。反而是用puttygen自主生成密钥对更为可靠一些。
权限导致的问题
因为涉及到用户登陆这样的安全性操作,“.ssh”文件夹与“authorized_keys”是有权限要求的,笔者的服务器默认已经设置好了权限,所以可以顺利登陆,如果有遇到按照上述教程无法登陆的情况,请查询或者干脆用以下命令重新设置一下权限:
cd ~
chmod 700 ~/.ssh
cd ~/.ssh
chmod 600 authorized_keys