配置流程

客户端生成密钥对

ssh-keygen 这个命令是专门用来生成密钥的。下面列出基本的四个选项:

  • -t 用来指定密钥类型(dsa | ecdsa | ed25519 | rsa | rsa1);
  • -P 用来指定密语
  • -f 用来指定生成的密钥文件名
  • -C 用来添加注释

将公钥部署到服务器

ssh 免密登录的原理就是用户使用私钥加密,然后服务端使用公钥进行解密,从而验证用户身份。所以这里我们需要将自己的公钥部署到服务器上。

使用 scp 或者你的工具将公钥上传到服务器并将文件内容追加到 ~/.ssh/authorized_keys中。例如:

#在本机上执行此命令,上传公钥
scp -P your_port host.pub user@hostname:/tmp

#在服务器上执行此命令,追加到authorized_keys
cd /tmp && cat host.pub >> ~/.ssh/authorized_keys

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

修改服务器 ssh 配置

上传公钥后还需要在配置文件中打开公钥认证才行。

# 编辑 ssh 配置文件
sudo vim /etc/ssh/sshd_config

# 打开以下配置
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

重启 sshd

sudo systemctl restart sshd.service
# or
sudo service sshd restart

连接服务器

ssh -p port username@domain -i /path/to/private/key

xshell 之类的导入私钥即可。

禁止密码登录

为了更高的安全性,可以关闭密码登录,只使用密钥登录。

sudo vim /etc/ssh/sshd_config

# 找到以下语句
#PasswordAuthentication yes 
# 改为
PasswordAuthentication no

# 保存重启
sudo systemctl restart sshd.service

BUG 记录

we did not send a packet, disable method

这个问题大部分资料都是说目录权限的问题,但在我这里目录权限是正确的。Google 了半天发现有人说他的是 public-key 的问题,前面少了个 s (详见这里)。然后去检查一下发现我的最前面也是少了个 s …… 这次诡异的 bug 就这么解决了……

Reference: https://unix.stackexchange.com/questions/131886/ssh-public-key-wont-send-to-server

Last modification:May 24th, 2021 at 05:06 pm
If you think my article is useful to you, please feel free to appreciate