在Ubuntu中生成用于无密码登录的SSH密钥
SSH(安全shell)是一种加密网络协议,用于使用TCP协议来确保安全性和可靠性,从而在远程客户端和服务器之间建立安全连接。
基于SSH的连接支持各种身份验证方法,其中一些是:
- 基于密码的身份验证
- 基于密钥的身份验证
默认情况下,在两台计算机之间创建新的SSH连接将使用基于密码的身份验证。
但是,如果您经常从同一个客户端登录到服务器,则每次登录服务器时都要输入密码,这可能很麻烦并且令人讨厌。
本教程介绍了使用公钥登录远程服务器的其他替代身份验证。
让我们看看如何在经常使用的特定客户端和服务器计算机上进行设置,以便我们可以安全地自动从该计算机登录!
检查客户端计算机上的现有SSH密钥
第一部分处理在客户端计算机中生成私钥-公钥对。
公用密钥稍后会复制到服务器,并用于身份验证。
在设置任何SSH密钥之前,请确保针对此客户端/服务器组合不存在任何现有密钥。
让我们运行此bash脚本来检查文件是否存在(您也可以直接在终端上键入该文件)
if test -f ~/.ssh/id_*.pub; then echo "Found" else echo "Not Found" fi
找不到SSH公钥
如果显示"未找到",则表明该文件不存在,我们已准备好为此连接创建新密钥。
否则,您可以直接使用现有键并跳过下一步。
但是,如果您不想使用旧密钥,则可以按照下一步操作删除旧密钥并生成新密钥。
为客户端服务器计算机生成新的SSH密钥对
下面的命令将生成一个新的4096位SSH密钥对,其ID为您的ID(可以识别出任何东西!)作为注释:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
通过运行此命令配置密钥位置和密码短语后,我们现在将为我们生成新的密钥以及密钥指纹。
SSH生成新的公钥
现在,让我们使用ls
检查私钥-公钥是否确实存在。
ls ~/.ssh/id_*
您应该获得以下输出:
/root/.ssh/id_rsa /root/.ssh/id_rsa.pub
这意味着" id_rsa"是您的私钥,而" id_rsa.pub"是您的公钥。
注意:切勿在计算机之间共享您的私钥。
这就是为什么您拥有公共密钥的原因。
因此,我们可以将同一公钥复制到多个服务器到ssh上,同时使用本地计算机上的私钥来维持更高的安全性。
将公钥复制到服务器
由于我们在客户端上拥有SSH密钥对,因此要登录到远程服务器,我们需要在此处复制公共密钥。
我们可以使用scp将文件复制到服务器,但是使用ssh-copy-id可以更好地替代ssh键。
您可以使用软件包管理器安装" ssh-copy-id"(如果不可用)。
ssh-copy-id server_username@server_ip
输入服务器用户名密码后,我们现在将通过公共密钥通过身份验证以登录到服务器。
输出将类似于以下内容:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/client_user/.ssh/id_rsa.pub" /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys SERVER_USER@SERVER_IP's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'SERVER_USER@SERVER_IP'" and check to make sure that only the key(s) you wanted were added.
这意味着我们可以通过另外的基于密钥的身份验证从客户的特定机器上使用ssh
!
要测试它,请立即尝试" ssh"到服务器!
ssh server_user@server_ip
调试潜在问题
但是,有些人可能仍然会看到密码提示以及基于密钥的密码短语!到底是怎么回事?
SSH添加公钥
这里详细说明了可能的原因。
似乎我们对远程服务器上的~/.ssh目录没有适当的权限。
HOME目录"~","~/.ssh"目录和"~/.ssh/authorized_keys"文件的内容只能由我们写入。
否则,它将感觉其他用户可以访问,这就是为什么还要求输入密码的原因。
让我们先检查主目录的权限。
由于我们只能写,因此我们不需要更改该目录的权限。
同样,查看模式并使用chmod
更改模式。
让我们递归使用chmod -R~/.ssh 700
更改这些文件和目录的权限。
现在,对其进行测试以查看是否可行。
调试潜在问题–第2部分
如果仍然无法正常工作,则该线程提到ssh配置文件中的某些选项可能已禁用。
在服务器中检查"/etc/ssh/sshd_config",以确保未禁用" RSAAuthentication"," PubkeyAuthentication"和" UsePAM"选项。
另外,请确保您在配置中显式设置了" PasswordAuthentication no",以为我们的用户禁用基于密码的身份验证。
如您所见,对我而言确实如此! " PubKeyAuthentication"也被禁用,因此它提示我输入密码,因为会话未将其用作主要的身份验证模式!
我取消了这一行的注释,并重新启动了ssh以应用更改。
sudo systemctl restart ssh