一、系统环境
- 主机环境为Win10系统,需连接到的系统为Ubuntu18.04系统(使用Win10下子系统功能安装),
- Win10下所需软件Putty下载地址
- Ubuntu下所需软件openssh-client,openssh-server
二、问题来源
我已经在Ubuntu系统下安装了openssh-client,openssh-server软件,也已经通过ssh-keygen -t rsa
命令生成了公钥和私钥。在项目中使用Fabric库连接Ubuntu系统进行自动化部署时,一直提示我输入密码。
三、排除思路
经过一番搜索,找到问题的根源是Ubuntu系统无法识别我的身份,需要进行身份验证。因此联想到可不可以通过免密登录来解决这个问题,于是进行了一番验证之后,果然成功了。
四、操作步骤
(一)使用Putty生成公钥及私钥
- Win10下需借助Putty来生成公钥及私钥,并把公钥放到Ubuntu系统中。在上面的链接中下载Putty。
- 按照这个教程的步骤分别在本地保存私钥,并把公钥放到Ubuntu系统中。
(二)修改Ubuntu系统中.ssh相关文件的权限
修改.ssh文件夹及其下面authorized_keys文件权限。
注意:.ssh文件位置由ssh-keygen -t rsa
命令的执行用户确定。如果是非root用户,该文件在/home/
目录下相应的用户文件夹下。
chmod 700 ~/.ssh/
chmod 600 .ssh/authorized_keys
(三)Fabric脚本编写
- 运行puttygen.exe,load 前面保存的私钥文件(格式为.ppk),然后选择菜单Conversions->Export OpenSSH key,保存文件。
- 在Fabric脚本中加入下面代码
from fabric.api import run, env, roles, prefix, put ,cd
env.key_filename = ['D:/DjangoProject/fabT'] # 导出的OpenSSH key文件路径
env.roledefs = {
'develop': [
'你的用户名@主机地址'],
}
@roles('develop')
def deploy(version):
run(你的业务代码)