如何不输入密码实现SSH登录

SSH 协议是一个加密的网络协议,它广泛应用在远程登录等场景。使用过 SSH 命令的读者应该知道,SSH 命令需要你输入密码,同时在命令里是无法指定密码的,这在一些场景会很不方便。

SSH 提供了密码之外的其他认证方式,本文介绍使用公钥的方式进行认证。

公钥加密(非对称加密算法)

 公钥加密是一种应用非常广泛的加密算法。这个算法的核心是公钥和私钥这样的密钥对,公钥可以公开,私钥必须严格保密。公钥加密的信息,只有私钥能够解析;私钥的签名,公钥可以进行验证。

 公钥认证方式的核心是:将客户端的公钥,拷贝到远端服务器的authorized_keys文件里,实现认证。

客户端公钥生成

 生成公钥的方法非常简单,使用ssh-keygen即可。默认会生成~/.ssh/id_rsa的私钥和~/.ssh/id_rsa.pub的公钥。ssh-keygen的参数如下,读者可以根据自己实际的情况选择。

  • -t 指定密钥的类型,默认是 RSA ,推荐使用 ed25519
  • -b 指定密钥的长度,默认是2048。
  • -c 关于密钥的说明。
  • -f 指定密钥的文件名。
  • -p 私钥存储时会进行对称加密,增加黑客获取密钥的难度。

拷贝公钥到远端服务器

ssh-copy-id命令

 拷贝公钥到远端服务器最简单的方法是使用ssh-copy-id命令,ssh-copy-id [email protected],它的选项有:

  • -p 指定 SSH 端口,如果你修改过 SSH 的端口,可以使用这个参数来指定。
  • -i 指定需要拷贝的文件,建议指定具体的公钥文件。

使用shell命令

 下面命令的含义是将本地文件~/.ssh/id_rsa.pub的内容,通过ssh命令上传到远端服务器。读者可以根据实际情况修改命令里面的参数。

1
cat ~/.ssh/id_rsa.pub | ssh USER@HOST "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

使用公钥进行验证

 将本地的公钥拷贝到远端服务器之后,使用-i选项指定公钥文件,就可以使用公钥进行验证了。

1
ssh -i keyfile target_machine
使用 Hugo 构建
主题 StackJimmy 设计