- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个谷歌计算引擎实例,其默认服务帐户的形式为 <project-number>-compute@developer.gserviceaccount.com
.我可以使用我自己生成的一对 SSH key 通过 SSH 连接到我的计算实例。我关注了this guide我在其中使用了 service_account_ssh.py 的略微修改版本脚本。
这按预期工作。用线 oslogin.users().importSshPublicKey(parent=account, body=body).execute()
从脚本我可以添加我的公钥。这使我能够像这样简单地通过 SSH 连接到计算实例: ssh -i <private-key> <user>@<compute-instance-ip>
请注意,我没有为 SSH key 使用过期时间,也没有像示例脚本那样在生成后删除它们。
但是,我无法从服务帐户中删除公钥。根据OS Login API , 有一个 users.sshPublicKeys.delete
方法,但我无法让它工作。
我遇到的第一个问题是找不到 Python 引用操作系统登录 API。随着service_account_ssh.py
以脚本和 OS Login API 为例,我能够派生出 Python 方法:oslogin.users().sshPublicKeys().delete(name=key).execute()
但现在我卡在了 name
上 field 。根据文档 name
参数应该是公钥的指纹,格式为users/{user}/sshPublicKeys/{fingerprint}
无论我尝试什么,我都会收到 Python 错误: TypeError: Parameter "name" value "users/<project-number>-compute@developer.gserviceaccount.com/sshPublicKeys/<key-fingerprint>" does not match the pattern "^users/[^/]+/sshPublicKeys/[^/]+$"
.出于安全原因,我删除了我的实际值并将它们替换为 <project-number>
和 <key-fingerprint>
我用 ssh-keygen -lf <key>.pub
生成我的 key 指纹, 它以 SHA256:sadlkf43jqweIFND123oifja/sdflk3234j
的形式输出内容
因为我不太擅长正则表达式,所以我使用了 https://regexr.com/根据 ^users/[^/]+/sshPublicKeys/[^/]+$
测试我的字符串.正则表达式似乎与 key 指纹不匹配,因为有一个正斜杠 /
在我 key 的指纹中。如果我删除这个 /
正则表达式匹配并且我的 python 脚本没有抛出错误,但是,现在 key 指纹无效。
我快速检查了一堆其他 SSH key ,它们的指纹中都有一个正斜杠。但现在我不明白我怎么可能用正确的字符串调用 API。这正是我卡住的地方,我希望有人能帮助我。
我的问题是:如何使用操作系统登录 API 在 Python 中删除(或获取)我的 SSH key ?
最佳答案
首先尝试让用户注册 ssh key 条目。在控制台上,您可以注意到使用的名称与公钥值相同(在字符串的末尾,有些情况下有主机名)。
为了获取每个键的名称,我编写了以下代码:
from pprint import pprint
from googleapiclient import discovery
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = discovery.build('compute', 'v1', credentials=credentials)
# Project ID for this request.
project = '<project>' # TODO: Update placeholder value.
# The name of the zone for this request.
zone = '<zone>' # TODO: Update placeholder value.
request = service.instances().list(project=project, zone=zone)
# while request is not None:
response = request.execute()
for instance in response['items']:
for sshItems in instance['metadata']['items']:
if sshItems['key'] == 'ssh-keys':
sshPubKey = sshItems['value']
sshUser = sshPubKey.split(':',1)[0]
print(sshUser)
它获取您拥有的所有实例的每个 ssh key 的用户。然后您可以在您的 URL 中使用正确的用户名。
关于python - 如何使用 OS Login API 从 Google Compute 实例中删除或获取 SSH 公钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63704958/
嗨,我试图在亚马逊服务托管的计算机上远程登录。这是ubuntu 64位机器。 一开始,我能够使用客户端、远程桌面连接 (RDP) 登录计算机,并保持默认端口 (-1),而对于命令行,我使用 putty
我已将 Jenkins 设置为使用 Unix 用户/组数据库安全性,但除了运行 Jenkins 服务的用户之外,我无法使用我创建的任何用户登录。通过 ssh 或 su 登录服务器可以工作,但是当我尝试
我想通过 power shell 使用以下命令在 azure 中创建一个新的资源组: New-AzureRmResourceGroup - Name name -Location "WesternEu
我已经部署了由 spring boot 应用程序使用 oauth2 生成的 war 文件,以便使用 Azure 应用服务进行单点登录(仅限 https)。 当我浏览主页时,主页会加载一个登录按钮。单击
我已经部署了由 spring boot 应用程序使用 oauth2 生成的 war 文件,以便使用 Azure 应用服务进行单点登录(仅限 https)。 当我浏览主页时,主页会加载一个登录按钮。单击
我尝试按照一些 django 教程来创建登录名,但我一直在获取 ImportError at /login No module named login 我的文件结构是: -src -log
在我的 Spring 项目中,我将注销目标 url 设置为“/login?logout”以显示登录页面并显示消息“您现在已注销”。 在 Spring Security 配置中,我这样做了: @Over
我目前正在尝试为我在带有 Ubuntu 的虚拟机上运行的实际本地网页创建一个简单的登录页面。 我创建了 LoginPage.html在位置 /var/www/html . 然后 HTML 文件调用 l
我有两个安全区域,我为其提供基于表单的登录。 /用户 /admin 以下按预期工作: 访问 protected 资源时重定向到登录页面 当凭据为假时使用 ?error 参数重定向到登录页面 根据定义的
我有一个脚本,我通常用来同步AG登录。但是,我需要使用SQL凭据和密码将其实现为自动运行。有人知道我如何调整下面的脚本以使用SQL登录和密码吗?
更新 下面的 Flask 重定向(响应代码 302)似乎作为对 _dash-update-component 的响应传递。要求: b'\nRedirecting...\nRedirecting...\
这是我第一次使用 Django 登录模板,但遇到了问题。它一直说 login 不是一个有效的 View 函数,但我在我的用户应用程序的 urls.py 中定义了它: 不知道我做错了什么。 主 urls
我不是专业程序员,所以请原谅任何愚蠢的错误——我正在做一些研究,我正在尝试使用 Selenium 登录数据库以搜索大约 1000 个术语。 我有两个问题:1. 重定向到组织登录页面后如何使用 Sele
我正在使用 flutter,我想在我的应用程序中实现使用 Instagram 登录。所以我关注这个tutorial用于 Instagram 登录, 我成功登录但未获取用户详细信息,它正在打开重定向 U
每当我以访客身份重定向时,我都会收到错误消息: Missing required parameters for [Route: login] [URI: {locale}/login]. 但是当我登录
我已开始使用 Azure Pipelines 和 GitHub 支持的帐户并创建了我的第一个组织。我在该组织中没有任何项目。我在 portal.azure.com 上也没有任何订阅。我想使用 Azur
它给出错误:找不到“登录”的反向。 “登录”不是有效的 View 函数或模式名称。 网址.py urlpatterns = [ path('admin/', admin.site.urls),
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
我需要一个自定义的 Facebook 登录按钮。 fb:login-button 的 medium、large 等解决方案不是我需要的。我知道 FB TOS。我的按钮将非常相似。 如何将我的按钮转换为
Spring 版: 2.5.6 SEC01 Spring 安全版本: 3.0.0 RC1 我正在尝试将 Spring Security 与 Spring MVC 应用程序集成。安全部分主要基于 Spr
我是一名优秀的程序员,十分优秀!