我正在公司环境中设置 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 操作的能力。如果不能做到这一点,那将是一个真正的障碍。
我在运行时不断收到以下错误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 命令。
在本地机器上,我们有多个用户。
在远程机器上只有一个用户,所以我必须与that_user@remote_server连接。
是否可以为 local_machine 上的所有用户(每个用户将添加自己的)创建 RSA 密钥到远程服务器上的一个用户?
谢谢,
我在 Ubuntu 服务器上。我正在尝试启用 ssh 隧道,以便在我的项目中添加 git remote。
authorized_keys文件中当我尝试打开远程 shell 时出现错误Server refused our key。
检查日志: Connection closed by <ip> [preauth]在/var/log/auth.log.
更多信息:
~/.ssh/authorized-keys 拥有权限 664。
文件没有命名,authorized-keys这authorized_keys可能是个问题吗?
我错过了什么?
公司政策要求安全存储一些 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 详细失败,而不是要求输入(毫无意义的)密码?
不完整的解决方案:
IdentitiesOnly- ssh 然后将按预期尝试所有可用密钥- 但会导致服务器限制每个会话的身份验证尝试出现问题alias ssh='grep ^4096 <(ssh-add -l)' && ssh'- 有效,但如果有人想找出他的 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/机制?
作为使用带密钥对的 SSH 和 rsync 解决各种问题的背景,我想要一个简单的概述,了解 SSH 身份验证期间发生的事件序列,以及几个客户端和主机文件中的每一个如何发挥作用。
谷歌发现了很多细节层次的解释,要么范围狭窄,要么范围广泛,细节混乱。更不用说许多不正确或混乱的解释和论坛帖子。
我最终创建了几个图表来澄清两件事:
我将在下面的答案中发布这些内容。
我无法通过 SSH 连接到 Google Cloud 服务上的实例。
我不太熟悉虚拟机管理和故障排除,但已经尝试了我所知道的一切,谷歌可以提供给我,包括:
无论我尝试什么,唯一的结果是一个加载符号,后跟以下内容:
到项目元数据的密钥传输花费了异常长的时间。传输到实例元数据可能会更快,但只会将密钥传输到该虚拟机。如果您希望从此虚拟机通过 SSH 连接到其他虚拟机,则需要相应地传输密钥。
我不能这样做,因为我没有 GCloud 用于 SSH 进入实例的私钥,并且使用 PuTTY 根本不起作用,因为我给服务器的任何公钥都不起作用全部。
ssh virtual-machines ssh-keys google-compute-engine google-cloud-platform
我正在尝试在多个 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或唯一的解决方案是使用解决方法?
当我使用新的 EC2 生成的密钥对创建运行 Ubuntu 18.04 的新 EC2 实例时,我使用 puttygen 将生成的 .pem 转换为 .ppk,然后尝试使用 PuTTY 连接到该实例,系统会显示预期的确认提示SSH 指纹:
PuTTY 向我展示了 MD5 哈希值的十六进制表示形式。这是 PuTTY 支持的唯一指纹格式。
在 PuTTY 之外,目前首选的指纹格式是以 Base64 表示的 SHA256 哈希值。
如果我查看新创建的实例的 EC2 系统日志,我果然会看到 SSH 指纹、Base64 表示形式的 SHA256:
查看此答案,Amazon Linux 过去(也许仍然如此?)以十六进制输出哈希值,而不是 Base64。
如何验证 EC2 系统日志中显示的 Base64 SHA256 指纹是否与 PuTTY 所连接的内容匹配?我宁愿避免安装 EC2 特定的工具。
顺便说一句,当我从 PowerShell 使用 OpenSSH 时,我在确认指纹时没有遇到任何问题。(我会考虑使用这个而不是 PuTTY,但它似乎缺乏鼠标支持。)
另外,我发现这个答案内容丰富,但它没有给我答案。
(屏幕截图中显示的所有详细信息都反映了一个短暂的实例。我已经销毁了密钥对。)
ssh-keys ×10
ssh ×9
security ×2
amazon-ec2 ×1
git ×1
gpg ×1
pki ×1
putty ×1
ssh-agent ×1
ubuntu-14.04 ×1