客户端配置
设定 ~/.ssh/config
设置主机条目ssh
非常简单,并且可以节省很多麻烦。这是一个例子:
Host digitaloceanbox
Hostname 111.111.111.111
User root
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/digitalocean-rsa
ForwardX11 yes
Host github github.com
Hostname github.com
User git
PubKeyAuthentication yes
IdentityFile /home/user/.ssh/github-rsa
ForwardX11 no
在此示例中,我们设置digitaloceanbox
和github
,github.com
以便我们可以执行以下命令:
ssh github
ssh digitaloceanbox
如果我们要使用与配置文件中指定的用户不同的用户身份登录,则只需将其放在开头user@
:
产生金ssh
钥
ssh-keygen -t rsa -b 4096 -C user@homemachine
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/digitalocean-rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/digitalocean-rsa
Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub.
The key fingerprint is:
SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine
请注意,当由提示时,我已经指定了要生成的私钥的完整路径ssh-keygen
。我还定义了注释(-C
),它使我可以轻松识别远程计算机上的键。
这将创建两个文件:
.ssh/digitalocean-rsa
.ssh/digitalocean-rsa.pub
- 公钥。这是您存储在服务器上以进行身份验证的内容。
当您提供ssh
密钥时,请确保它是.pub
版本!!当您添加到时~/.ssh/config
,请确保添加与您添加到系统的公钥匹配的正确私钥。
服务器配置
大多数安装将启用“公共密钥身份验证”。如果您开始做所有的事情,那么您可能会遇到一些问题。在OP遇到问题的地方,我建议OP删除/root/.ssh/
目录以重新开始。
不建议您用于ssh
访问远程系统上的root用户。建议您ssh
成为另一个用户,然后使用您的密码(sudo su -
)升级为root用户。
使用添加密钥到主机 ssh-copy-id
无论您决定创建另一个用户并ssh
以该用户还是root用户的身份使用,以下是建议ssh
在服务器上放置密钥的方法:
ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
这样可以sshd
创建具有所需权限的所需目录和文件。这意味着您零散使用权限或需要记住详细信息的机会为零。只需使用该工具上传密钥即可。
禁用密码认证
话虽如此,一旦您拥有了自己的密钥并验证了您能够使用密钥进行连接,建议您在其中禁用密码身份验证sshd
并重新启动服务:
- 编辑
/etc/ssh/sshd_config
PasswordAuthentication no
sudo systemctl restart sshd
新用户呢?
如果禁用密码身份验证,那么如何锁定新用户?一种方法是将模板文件添加到/etc/skel
目录中。锁定一位用户的密钥后,请执行以下操作:
sudo cp -r .ssh/ /etc/skel/
ls /etc/skel/.ssh
- 编辑其中找到的所有文件,
/etc/skel/.ssh/
使它们为空白,除非您要为每个新创建的用户自动设置自己的密钥。
当您使用创建新用户时sudo useradd -m newuser
,该用户将具有.ssh/authorized_keys
,您可以对其进行编辑并具有适当的权限。
调试
您可以查看sshd
日志文件以查看连接失败或被拒绝的原因:
sudo tail -f /var/log/auth.log
在运行此命令时,请使用另一个终端尝试登录。提供的消息很多时候足以帮助您查明问题或在线找到解决方案。