Linux实现ssh公钥登录的步骤

【3.5】实现Linux上SSH公钥认证的免密码登录需要按照以下步骤进行,这里以两台Linux主机A和B为例:

步骤1:在本地生成SSH密钥对

在主机A上,打开终端,输入以下命令:

ssh-keygen -t rsa

按照提示,选择生成SSH密钥对的类型(通常选择默认的RSA),然后可以选择是否设置密码(直接回车表示无密码)。

步骤2:将公钥复制到目标主机B

使用以下命令将生成的公钥复制到目标主机B上:

ssh-copy-id username@B

这会要求输入目标主机B的用户密码。输入后,公钥将被复制到B主机的~/.ssh/authorized_keys文件中。

步骤3:测试SSH连接

尝试使用SSH连接到目标主机B:

ssh username@B

如果一切设置正确,应该可以无密码登录到目标主机B。

验证是否成功:

  • 成功情况:

    • 执行ssh username@B时,应该直接登录到主机B而无需输入密码。
    • 如果执行ssh -v username@B,可以看到详细的调试信息,其中包括尝试使用公钥进行身份验证。
  • 失败情况和解决方法:

    • 文件权限: 如果~/.ssh~/.ssh/authorized_keys 的权限设置不正确,可能导致身份验证失败。确保这些目录的权限是安全的。
      chmod 700 ~/.ssh
      chmod 600 ~/.ssh/authorized_keys
      
    • 公钥格式问题: 确保公钥的内容是正确的,没有多余的空格或换行符。
    • SSH服务配置问题: 在目标主机B上,确保SSH服务已正确配置允许公钥身份验证。

注意事项:

  • 在主机A上的~/.ssh/id_rsa.pub 文件是公钥文件,可以在其中找到复制到目标主机B的公钥。
  • 如果使用不同的用户名,确保在命令中替换username为目标主机B上的实际用户名。
  • 在SSH连接时,可以通过添加-v选项查看详细的调试信息,帮助诊断问题。

如果出现问题,根据错误信息进行调试,并根据上述失败情况和解决方法进行修复。

4.0

要在Linux系统中使用SSH公钥实现免密码登录,你需要在本地机器上生成一对密钥,并将公钥复制到远程服务器。以下是具体操作步骤及其命令。

在本地生成密钥对

  1. 打开一个终端。

  2. 运行 ssh-keygen 命令来生成新的密钥对。

    ssh-keygen -t rsa -b 4096
    

    -t rsa 指定了密钥类型为RSA,-b 4096 指定了密钥长度为4096位。

  3. 系统会提示你输入保存密钥对的文件名(默认为 ~/.ssh/id_rsa)。

  4. 接着系统会提示你输入密钥的密码短语(passphrase),不希望设置可以直接按回车跳过。

  5. 成功生成密钥后,你将看到如下信息:

    Your identification has been saved in /your/home/directory/.ssh/id_rsa.
    Your public key has been saved in /your/home/directory/.ssh/id_rsa.pub.
    

将公钥复制到远程服务器

  1. 使用 ssh-copy-id 命令将公钥添加到远程服务器的 ~/.ssh/authorized_keys 文件中。

    ssh-copy-id user@remote_host
    

    其中,user 是远程服务器的用户名,remote_host 是远程服务器的地址或主机名。

  2. 输入远程用户的密码进行认证。

  3. 成功添加后,你将看到类似以下输出:

    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'user@remote_host'"
    and check to make sure that only the key(s) you wanted were added.
    

验证免密码登录是否成功

  1. 现在,尝试使用SSH登录远程服务器,如果一切正常,你应该不需要输入密码:

    ssh user@remote_host
    
  2. 如果设置了密钥密码短语,第一次使用时可能会被要求输入。

  3. 登录成功后,你将进入远程服务器的shell。

处理失败的情况

  • Permission Denied:如果收到“权限拒绝”的消息,请检查远程服务器的 ~/.ssh/authorized_keys 文件权限是否设置正确(应为600),以及 ~/.ssh 目录的权限(应为700)。

  • Connection Refused:如果连接被拒绝,请检查远程服务器是否运行着SSH服务,以及你是否使用了正确的端口和IP地址。

  • No such file or directory:如果出现这个错误,可能是因为远程服务器上不存在 ~/.ssh 目录,你需要手动创建它并设置正确的权限。

  • The agent has no identities:如果碰到这个错误,意味着SSH代理没有加载私钥。可以使用 ssh-add ~/.ssh/id_rsa 来解决。

  • Timeout:如果SSH尝试超时,请检查网络连接,确保远程主机可达,并且SSH端口(默认为22)没有被防火墙阻塞。

记住,任何时候更改了 ~/.ssh/authorized_keys 文件或相关目录和文件的权限,都可能需要重新验证和调整设置。如果遇到问题,查看日志文件通常有助于诊断,例如通过 journalctl -u ssh 或查看 /var/log/auth.log(取决于你的Linux发行版)。


阮一峰大神的文章每读一次都收获满满。必读系列
《SSH密钥登录》
《SSH原理和运用:远程登录》