标签: ssh-keys

Git:ssh 密钥过期就像密码过期一样?

我正在公司环境中设置 git。Git 操作将主要通过 SSH 使用单个帐户进行,并使用 SSH 密钥进行访问控制。(http 将用于帐户配置、基于 Web 的代码浏览,但除此之外别无其他。)

但拥有永不过期的 SSH 密钥的想法对我来说听起来很愚蠢。只需要一台受感染的桌面即可泄露私钥,入侵者就可以永久访问我们的知识产权。

我已经进行了大量的谷歌搜索,但关于此的信息很少。这让我感到震惊,因为我不认为我走错了路。

定期使密钥过期很容易,尽管 GitLab 和 Stash 等工具并没有让这件事变得简单。我们有一个“ git login”包装脚本,用于将 SSH 公钥发送到服务器。它可以确保旧密钥不仅被重复使用,而且还可以确保使用特殊密钥(如 中指定的~/.ssh/config),以便我们不会定期覆盖某人的密钥~/.ssh/id_da*并阻止他们的其他登录。config(尽管对于我的一些 lon-linux (Windows) 用户来说,在 ssh 文件中指定的非默认位置使用密钥可能会出现问题。)

还有其他人这样做过吗?什么是行业最佳实践?

更新

好吧,看来部分答案是“这正是 SSH 密码的用途。” 所以剩下的问题是这样的

有没有办法强制使用和定期更改密码?我假设人们会遵守,只是需要对他们来说很容易。

而且,话虽如此,ssh 密码消除了在 cron 作业中执行 git 操作的能力。如果不能做到这一点,那将是一个真正的障碍。

security git ssh-keys

5
推荐指数
1
解决办法
4071
查看次数

SSH 尝试时“权限被拒绝(公钥)”和“key_load_public:没有这样的文件或目录”

我在运行时不断收到以下错误ssh -v -i privatekey user@server.org

OpenSSH_6.9p1, LibreSSL 2.1.8
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to server.org [XXX.XXX.XXX.XXX] port 22.
debug1: Connection established.
debug1: identity file privatekey type 1
debug1: key_load_public: No such file or directory
debug1: identity file privatekey-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.1
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.1 pat OpenSSH* …
Run Code Online (Sandbox Code Playgroud)

ssh ssh-keys

5
推荐指数
1
解决办法
2万
查看次数

创建 SSH 密钥

我是新手,所以我希望我不要问废话。

我想在没有密码的情况下向远程服务器发送 SSH 命令。

在本地机器上,我们有多个用户。

在远程机器上只有一个用户,所以我必须与that_user@remote_server连接。

是否可以为 local_machine 上的所有用户(每个用户将添加自己的)创建 RSA 密钥到远程服务器上的一个用户?

谢谢,

ssh ssh-keys

5
推荐指数
1
解决办法
775
查看次数

连接被 <ip> [preauth] 关闭

我在 Ubuntu 服务器上。我正在尝试启用 ssh 隧道,以便在我的项目中添加 git remote。

  • 在我的本地 win7 机器上,我使用 PuTTYgen 生成了密钥对。
  • 我将公钥粘贴到authorized_keys文件中
  • 我将私有 PuTTY ppk 文件路径设置为 putty Auth 配置

当我尝试打开远程 shell 时出现错误Server refused our key

检查日志: Connection closed by <ip> [preauth]/var/log/auth.log.

更多信息:

~/.ssh/authorized-keys 拥有权限 664。

文件没有命名,authorized-keysauthorized_keys可能是个问题吗?

我错过了什么?

ssh ssh-keys ubuntu-14.04

5
推荐指数
1
解决办法
3万
查看次数

强制 ssh 使用代理,而不直接访问 IdentityFile

公司政策要求安全存储一些 ssh 密钥,例如存储在专用 USB 设备上。使用 gnupg 和 来使用未存储在主机上的密钥可以完美地工作enable-ssh-support,即使使用多个密钥时也是如此:

Host example.com
    HostName ssh.example.com
    IdentityFile ~/.ssh/smartcard.pub
Host example.net
    HostName git.example.net
    IdentityFile ~/.ssh/another-smartcard.pub
Host example.org
    HostName sftp.example.org
    IdentityFile ~/.ssh/id_rsa.pub

IdentitiesOnly yes
PasswordAuthentication no
PubkeyAuthentication yes
Run Code Online (Sandbox Code Playgroud)

但是,当拔掉硬件时,gpg 会从代理中删除密钥,随后的 ssh 调用会导致:

Enter passphrase for key '/home/user/.ssh/smartcard.pub':
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,因为 ssh 和 ssh-agent 都应该清楚该文件仅包含公钥。如果 ssh 无法访问指定的密钥,是否有一种好方法可以让 ssh 详细失败,而不是要求输入(毫无意义的)密码?

不完整的解决方案:

  1. 删除IdentitiesOnly- ssh 然后将按预期尝试所有可用密钥- 但会导致服务器限制每个会话的身份验证尝试出现问题
  2. 以某种方式包装 ssh alias ssh='grep ^4096 <(ssh-add -l)' && ssh'- 有效,但如果有人想找出他的 ssh 设置被破坏的原因,则会引起头痛

ssh gpg ssh-keys ssh-agent

5
推荐指数
1
解决办法
1605
查看次数

您如何从谷歌计算引擎实例安全地检索 ssh 主机密钥?

我想~/.ssh/known_hosts用新创建的 GCE 实例的主机密钥信息更新我的。但我不确定如何安全地检索该信息。

我想像

gcloud compute ssh <GCEUSER>@<GCEHOST> --command='ssh-keyscan 127.0.0.1'
Run Code Online (Sandbox Code Playgroud)

可能工作。但是(根据gcloud 计算 ssh 文档)似乎只是一个包装器ssh(并且,根据StrictHostKeyChecking=no在 $HOME/.config/gcloud/logs/ 下的关联日志文件中列出的参数中看到的,显然没有做任何事情某种检查主机的身份)。

似乎确实有一种方法可以使用 Web 控制台来启动基于浏览器的 ssh 会话(并以交互方式/手动方式运行ssh-keyscan),但是 1)我看不到内部结构以了解它是否真的像它应该的那样安全和 2) 不是用于脚本集成的有效 API。

是否有gcloud用于安全检索 GCE 实例的主机密钥的 API/机制?

security ssh ssh-keys google-compute-engine

5
推荐指数
1
解决办法
1581
查看次数

SSH 身份验证序列和密钥文件:解释

作为使用带密钥对的 SSH 和 rsync 解决各种问题的背景,我想要一个简单的概述,了解 SSH 身份验证期间发生的事件序列,以及几个客户端和主机文件中的每一个如何发挥作用。

谷歌发现了很多细节层次的解释,要么范围狭窄,要么范围广泛,细节混乱。更不用说许多不正确或混乱的解释和论坛帖子。

我最终创建了几个图表来澄清两件事:

  • 准备使用密钥进行 SSH 通信时涉及哪些文件和操作
  • 这些文件在建立连接的过程中会做什么。

我将在下面的答案中发布这些内容。

ssh pki ssh-keys

5
推荐指数
1
解决办法
1890
查看次数

Google Cloud Services - 根本无法通过 SSH 连接到实例

我无法通过 SSH 连接到 Google Cloud 服务上的实例。

我不太熟悉虚拟机管理和故障排除,但已经尝试了我所知道的一切,谷歌可以提供给我,包括:

  • 尝试从外部程序进行 SSH
  • 将磁盘复制并安装到新实例上
  • 使用串行控制台连接到两者
  • 在不同的托管位置尝试上述所有操作

无论我尝试什么,唯一的结果是一个加载符号,后跟以下内容:

到项目元数据的密钥传输花费了异常长的时间。传输到实例元数据可能会更快,但只会将密钥传输到该虚拟机。如果您希望从此虚拟机通过 SSH 连接到其他虚拟机,则需要相应地传输密钥。

我不能这样做,因为我没有 GCloud 用于 SSH 进入实例的私钥,并且使用 PuTTY 根本不起作用,因为我给服务器的任何公钥都不起作用全部。

ssh virtual-machines ssh-keys google-compute-engine google-cloud-platform

5
推荐指数
1
解决办法
4万
查看次数

ssh-copy-id 不适用于 .pem 文件

我正在尝试在多个 EC2 实例上复制 SSH 公钥。

阅读ssh-copy-id手册页,当您传递密钥文件时,程序会添加.pub扩展名(如果缺少)。

AWS 密钥是按.pem格式生成的,我可以使用此解决方法:

ssh-keygen -y -f my-new-key.pem | ssh user@host \
-i already-on-remote-server-key.pem 'cat > ~/.ssh/authorized_keys'
Run Code Online (Sandbox Code Playgroud)

但疑问仍然存在......是否可以使用ssh-copy-id文件.pem或唯一的解决方案是使用解决方法?

ssh ssh-keys amazon-web-services

5
推荐指数
1
解决办法
7081
查看次数

使用 PuTTY 连接到新的 Amazon EC2 实例时如何确认 SSH 指纹?

当我使用新的 EC2 生成的密钥对创建运行 Ubuntu 18.04 的新 EC2 实例时,我使用 puttygen 将生成的 .pem 转换为 .ppk,然后尝试使用 PuTTY 连接到该实例,系统会显示预期的确认提示SSH 指纹:

PuTTY指纹检查提示

PuTTY 向我展示了 MD5 哈希值的十六进制表示形式。这是 PuTTY 支持的唯一指纹格式。

在 PuTTY 之外,目前首选的指纹格式是以 Base64 表示的 SHA256 哈希值。

如果我查看新创建的实例的 EC2 系统日志,我果然会看到 SSH 指纹、Base64 表示形式的 SHA256:

EC2系统登录新实例

查看此答案,Amazon Linux 过去(也许仍然如此?)以十六进制输出哈希值,而不是 Base64。

如何验证 EC2 系统日志中显示的 Base64 SHA256 指纹是否与 PuTTY 所连接的内容匹配?我宁愿避免安装 EC2 特定的工具。

顺便说一句,当我从 PowerShell 使用 OpenSSH 时,我在确认指纹时没有遇到任何问题。(我会考虑使用这个而不是 PuTTY,但它似乎缺乏鼠标支持。)

PowerShell 中的 ssh 命令

另外,我发现这个答案内容丰富,但它没有给我答案。

(屏幕截图中显示的所有详细信息都反映了一个短暂的实例。我已经销毁了密钥对。)

ssh putty amazon-ec2 ssh-keys

5
推荐指数
1
解决办法
3123
查看次数