有什么巧妙的方法可以将密码放入 SSH 密钥中吗?

有什么巧妙的方法可以将密码放入 SSH 密钥中吗?

我的主机使用密码而不是 id_rsa 来通过 SSH 连接。但是,除了每次都输入密码外,有没有办法将密码放在我的 .ssh/config 中?

例如:

Host gravy_access
Hostname 127.0.0.1
User my_name_is_gravy
Password gravy_password

这样当我ssh gravy_access访问时它会立即允许。

答案1

不,我认为你不能这样做。但为什么不创建密钥呢?使用 ssh-keygen 创建密钥(无需密码),然后将公共部分复制到远程主机并将其添加到 ~/.ssh/authorized_keys。

请记住,任何获得您的私钥的人都可以访问您将公钥添加到 ~/.ssh/authorized_keys 的任何主机。

因此请始终保管好你的私钥私人的

正如 Iain 在下面评论的那样,更安全方法是使用密码创建密钥,但使用 ssh-agent 缓存它。输入

ssh-add your_key_file

然后系统会要求您输入密码。密码随后会被缓存,只要您不注销,它就会一直留在那里,供 ssh 用于登录或远程命令执行,或供 scp 使用。

答案2

答案3

使用 ssh 访问服务器有 6 种主要方式,可提供一定程度的安全性:

  1. 使用用户/密码组合(键盘交互)
  2. 使用 ssh 身份(无论是否受密码保护)
  3. 使用基于主机的身份验证
  4. 使用 ssh 证书
  5. 凯尔伯罗斯
  6. 聚丙烯酰胺

以下内容可能值得关注:

身份文件

要生成 ssh 标识文件对,请使用 ssh-key-gen 程序生成私钥(通常为~/.ssh/id_rsa)和~/.ssh/id_rsa.pub公钥(通常为 )对。将公钥放入登录用户主目录中名为 ~/.ssh/authorized_keys 的 0600 模式文件中。如果您未对私钥使用密码,则现在应该能够不使用密码登录。但是,使用密码保护私钥更为明智。通过运行 ssh-agent 进程并将密钥和所需的密码加载到其中,可以避免在每次连接时重新输入此短语。许多人在启动 X 会话时都会生成 ssh-agent 进程。

如果您需要 ssh-agent,您可以执行以下操作:

   eval `ssh-agent -s`
   ssh-add [optional ssh private file if not ~/.ssh/id_rsa]
   <enter passphrase>

该文件authorized_keys可以包含许多不同的密钥。还可以通过在文件中每个密钥行的开头使用控制短语来赋予这些密钥特殊的访问控制。例如,from="192.168.1.*密钥记录的开头将限制从 192.168.1.x 地址连接的主机使用该密钥。

基于主机的身份验证

基于主机的身份验证允许使用远程主机名和与其关联的用户名进行访问。这使用客户端主机的 ssh 密钥来允许访问,以及客户端主机对访问远程主机的用户的验证。这是一种弱安全形式,可能根本不应该使用,或者如果使用,则应仅在 LAN 上使用。

证书

证书提供了很多有趣的选项,虽然与身份密钥和 authorized_keys 的排列类似,但排列方式却与之相反,因此通常位于 authorized_keys 文件中的控件嵌入在证书中。想让某人有机会date在接下来的两天内仅以来自网络 x 的用户 bob 的身份在您的服务器上运行吗?证书似乎是实现此目的的一种非常好的方法。

man ssh-keygen

ssh-keygen 支持对密钥进行签名,以生成可用于用户或主机身份验证的证书。证书由公钥、一些身份信息、零个或多个主体(用户或主机)名称以及一组可选的约束组成,这些约束由证书颁发机构 (CA) 密钥签名。然后,客户端或服务器可以只信任 CA 密钥并在证书上验证其签名,而不是信任许多用户/主机密钥。请注意,OpenSSH 证书与 ssl(8) 中使用的 X.509 证书的格式不同,而且要简单得多。

答案4

如果你别无选择(因为你无权访问服务器配置,并且因为你的组织中的某些愚蠢规则禁止密钥认证),你可以使用密码,一个伪造交互式密码输入的小工具。

相关内容