Loading... <div class="tip share">请注意,本文编写于 1203 天前,最后修改于 1203 天前,其中某些信息可能已经过时。</div> ## 配置流程 ### 客户端生成密钥对 `ssh-keygen` 这个命令是专门用来生成密钥的。下面列出基本的四个选项: - `-t` 用来指定密钥类型(`dsa | ecdsa | ed25519 | rsa | rsa1`); - `-P` 用来指定密语 - `-f` 用来指定生成的密钥文件名 - `-C` 用来添加注释 ### 将公钥部署到服务器 ssh 免密登录的原理就是用户使用私钥加密,然后服务端使用公钥进行解密,从而验证用户身份。所以这里我们需要将自己的公钥部署到服务器上。 使用 `scp` 或者你的工具将公钥上传到服务器并将文件内容追加到 `~/.ssh/authorized_keys`中。例如: ```bash #在本机上执行此命令,上传公钥 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 配置 上传公钥后还需要在配置文件中打开公钥认证才行。 ```bash # 编辑 ssh 配置文件 sudo vim /etc/ssh/sshd_config # 打开以下配置 RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys ``` 重启 sshd ```bash sudo systemctl restart sshd.service # or sudo service sshd restart ``` ### 连接服务器 ```bash ssh -p port username@domain -i /path/to/private/key ``` xshell 之类的导入私钥即可。 ### 禁止密码登录 为了更高的安全性,可以关闭密码登录,只使用密钥登录。 ```bash 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 (详见[这里](https://unix.stackexchange.com/questions/131886/ssh-public-key-wont-send-to-server))。然后去检查一下发现我的最前面也是少了个 s …… 这次诡异的 bug 就这么解决了…… **Reference: ** https://unix.stackexchange.com/questions/131886/ssh-public-key-wont-send-to-server 最后修改:2021 年 05 月 24 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏