出现Permission denied (publickey)的解决方法

1. 发现问题

在Linux终端使用ssh root@server_ip来连接到远程服务器时,出现Permission denied (publickey).提示

2. 分析问题

  • 远程主机禁用了ssh密码登录权限
  • 本地访问远程主机的公钥没有添加或者被取消(无法认证)

本地生成的一对秘钥,私钥~/.ssh/id_rsa公钥~/.ssh/id_rsa.pub。公钥~/.ssh/id_rsa.pub应该保存在远程服务器端已认证的秘钥文件内~/.ssh/authorized_keys

  • 远程服务器公钥文件夹权限错误(.ssh和.ssh/authorized_keys需要保证只有用户自己有权限,否则验证无效)

远程服务器~/.ssh文件夹及其文件权限不对,包括

~./ssh/authorized_keys文件权限

~/.ssh文件夹权限

~/.ssh文件夹所有权

3. 解决问题

  • 允许ssh密码登录权限

登录目标机器,打开/etc/ssh/sshd_config ,修改PasswordAuthentication no为:
PasswordAuthentication yes

# vim /etc/ssh/sshd_config

PasswordAuthentication yes

然后重启服务。

# service sshd restart
  • 公钥没有添加或被取消(大部分都是这个原因)

如果服务器端根本就没有添加公钥是断然不可能通过认证的。解决:

客户端已经有秘钥对:通过其它方式登录到远程服务器,查看~./ssh/authorized_keys文件中是否添加了公钥,若没有可直接将公钥内容拷贝到该文件末尾。

客户端没有秘钥对:通过ssh-keygen命令生成秘钥对,默认文件夹是~/.ssh文件夹,将.ssh文件夹内id_rsa.pub的内容拷贝到服务器上的~./ssh/authorized_keys文件末尾(若服务器上~./ssh/authorized_keys不存在,则也可以使用ssh-keygen来生成文件结构)

如果是你连接公司的项目服务器失败,大概率是你没有在git中配置你的Keys

解决办法:

        打开终端,执行以下代码块:

ssh-keygen -t rsa -C "your.email@guazi.com" -b 4096
pbcopy < ~/.ssh/id_rsa.pub

上述命令会在~/.ssh/目录下生成id_ras.pub公钥,并将其内容复制到剪贴板中,然后浏览器打开你们使用的git地址,选择 Add key,command + v 将你的开发环境的 Public key 添加到信任列表中。

  • 远程服务器公钥文件夹权限错误

通过其它方式登录到远程服务器,然后进行如下操作:

// 更改文件所有权。我用root登录,your_user是root
# chown -R your_user:your_group ~/.ssh  

// 更改.ssh文件夹权限
#  chmod 700 ~/.ssh

// 更改.ssh/authorized_keys文件权限
# chmod 600 ~/.ssh/authorized_keys

补充知识:ssh会话连接过程

本地向远程服务端发起连接

服务端随机生成一个字符串发送给发起登录的本地端

本地对该字符串使用私钥(~/.ssh/id_rsa)加密发送给服务端

服务端使用公钥(~/.ssh/id_rsa.pub)对私钥加密后的字符串进行解密

服务端对比解密后的字符串和第一次发送给客户端未加密的字符串,若一致则判断为登录成功
  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
双三次插值(bicubic interpolation)是一种二元插值方法,用于在二维平面上对离散的数据点进行插值,以获取平滑的曲面。双三次插值是基于三次多项式的插值方法,因此又称为cubic函数。 双三次插值的基本思想是:对于给定的离散数据点,利用局部的16个数据点,构建一个三次多项式,然后在每个小方块内进行插值,从而得到平滑的曲面。在插值的过程中,为了保证曲面的连续性和光滑性,需要满足一定的边界条件。 双三次插值函数的数学表达式如下: ``` f(x,y) = [1 x x^2 x^3] * M * [1 y y^2 y^3]' ``` 其中,M是一个4x4的矩阵,其元素为: ``` M = [ 0.0 1.0 0.0 0.0; -0.5 0.0 0.5 0.0; 1.0 -2.5 2.0 -0.5; -0.5 1.5 -1.5 0.5 ] ``` 双三次插值函数的实现需要对数据进行预处理,计算出每个小方块内的16个数据点和相应的M矩阵。然后,在需要进行插值的位置,根据相应的小方块内的数据点和M矩阵,计算出插值结果。 以下是MATLAB代码示例,用于实现双三次插值函数: ```matlab function f = bicubic_interp(x, y, data) % x, y: 插值位置 % data: 数据矩阵 % f: 插值结果 % 计算插值所在的小方块 i = floor(y); j = floor(x); % 计算插值位置相对于小方块的偏移量 u = x - j; v = y - i; % 构建M矩阵 M = [ 0.0 1.0 0.0 0.0; -0.5 0.0 0.5 0.0; 1.0 -2.5 2.0 -0.5; -0.5 1.5 -1.5 0.5 ]; % 计算插值结果 f = 0; for ii=0:3 for jj=0:3 % 计算当前数据点的坐标 idx_i = i + ii - 1; idx_j = j + jj - 1; % 处理边界情况 if idx_i < 1 || idx_i > size(data, 1) || idx_j < 1 || idx_j > size(data, 2) continue; end % 计算权值 wx = cubic(u - jj + 1); wy = cubic(v - ii + 1); % 计算插值结果 f = f + wx * wy * data(idx_i, idx_j); end end function w = cubic(x) % 计算三次插值权值 a = -0.5; if abs(x) < 1 w = (a+2) * abs(x)^3 - (a+3) * abs(x)^2 + 1; elseif abs(x) < 2 w = a * abs(x)^3 - 5*a * abs(x)^2 + 8*a * abs(x) - 4*a; else w = 0; end ``` 运行以上代码,可以得到双三次插值函数bicubic_interp的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值