参考
- https://zhuanlan.zhihu.com/p/146976128
- https://www.myfreax.com/how-to-set-up-ssh-keys-on-ubuntu-20-04/
- https://www.cnblogs.com/deepinnet/p/13663534.html
- https://blog.csdn.net/counsellor/article/details/81182567
环境
环境 | 版本 | 说明 |
---|---|---|
Ubuntu | Ubuntu 24.04 LTS | |
openssh-client | 1:9.6p1-3ubuntu13 | dpkg -l | grep "ssh" # 查询已安装软件包版本 |
openssh-server | 1:9.6p1-3ubuntu13 | dpkg -l | grep "ssh" # 查询已安装软件包版本 |
正文
服务器(要登陆的机器)
- 安装 openssh-server
sudo apt install openssh-server
- 安装完成后,SSH服务默认自动启动,你可以通过以下命令校验服务运行状态:
sudo systemctl status ssh
- 如果你启用了防火墙,请确保防火墙打开了 SSH 端口,命令如下:
sudo ufw allow ssh
- 允许远程登录
sudo nano /etc/ssh/sshd_config # 修改配置 PubkeyAuthentication yes
- 重启 ssh 服务
service ssh restart
客户机(本地机器)
- 安装 ssh 客户端
sudo apt install openssh-client
- 生成密钥
# 你可以不使用任何参数直接生产SSH私钥与公钥。也可以使用您的电子邮件地址作为注释来生成新的4096位SSH密钥对。 # ssh-keygen -t rsa -b 4096 -C "[email protected]" ssh-keygen # 系统将提示您指定文件名Enter file in which to save the key (/用户名家目录/.ssh/id_rsa):。默认位置和文件名应该适合大多数用户。 按Enter接受并继续 # 接下来,系统会要求您输入安全密码或者称为密码短语Enter passphrase (empty for no passphrase):。密码短语增加了一层额外的安全性。 # 如果您设置密码短语,则每次使用该密钥登录到远程计算机时,系统都会提示您输入密码短语。如果您不想设置密码短语,请按Enter。 # 如果你没有什么特别的要求你在运行ssh-keygen命令,全部直接回车Enter键使用默认值创建SSH密钥即可。 要验证是否生成了新的SSH密钥对,请运行命令ls ~/.ssh/id_*查看SSH密钥是否存在。如果存在说明您已经在# # Ubuntu Linux计算机成功生成了SSH密钥。 ```bash
- 复制到远程服务器。(或手动复制客户机的
~/.ssh/id_rsa.pub
追加到到远程服务器的~/.ssh/authorized_keys
)# server_username是远程服务器用户的名称,server_ip_address是你的服务器IP地址。系统将提示您输入远程用户密码。 # 通过身份验证后,公钥 ~/.ssh/id_rsa.pub 将追加到远程用户 ~/.ssh/authorized_keys 文件中,然后ssh-copy-id将会退出。 ssh-copy-id server_username@server_ip_address
验证
- 输入远程机器用户名与ip即可免密登录。
ssh remote_username@server_ip_address
额外
- 禁用SSH密码身份验证。(可选)
禁用密码身份验证会为服务器增加一层安全保护。在禁用SSH密码身份验证之前,请确保您可以免密码登录服务器,并且你登录用户具sudo权限。
完成后,保存文件并运行命令sudo systemctl restart ssh重新启动SSH服务。此时,基于密码的身份验证已被禁用,你将不能使用密码登录。
注意:禁用密码登录后,请保管好你的SSH密钥文件,如果VPS提供商提供VNC远程控制可以很容易恢复,如果没有就........。# 登录到远程服务器 ssh sudo_user@server_ip_address # 远程服务器执行修改配置 sudo nano /etc/ssh/sshd_config
# 修改下面几行 PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no
# 服务器端重启ssh生效配置 sudo systemctl restart ssh #在你的服务器上