jcloud/dashboard/src2/components/group/SSHCertificateDialog.vue
2025-04-12 17:39:38 +08:00

151 lines
3.7 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<Dialog
:options="{
title: 'SSH 访问',
size: 'xl'
}"
v-model="show"
>
<template #body-content v-if="$bench.pg">
<div v-if="certificate" class="space-y-4">
<div class="space-y-2">
<h4 class="text-base font-semibold text-gray-700">步骤 1</h4>
<div class="space-y-2">
<p class="text-base">
执行以下 shell 命令以在本地存储 SSH 证书
</p>
<ClickToCopyField
:textContent="certificateCommand"
:breakLines="false"
/>
</div>
</div>
<div class="space-y-2">
<h4 class="text-base font-semibold text-gray-700">步骤 2</h4>
<div class="space-y-1">
<p class="text-base">
执行以下 shell 命令以 SSH 进入您的 bench
</p>
<ClickToCopyField :textContent="sshCommand" />
</div>
</div>
<div class="space-y-2">
<h4 class="text-base font-semibold text-gray-700">步骤 3</h4>
<div class="space-y-1">
<p class="text-base">
请谨慎使用仅用于
<a
href="/docs/benches/debugging"
class="underline"
target="_blank"
>调试</a
>
目的不要像在本地机器上那样安装/卸载应用程序请使用 UI 进行操作
</p>
</div>
</div>
</div>
<div class="space-y-2 text-p-base text-gray-700" v-else>
<p v-if="!$bench.pg.user_ssh_key">
看起来您还没有添加 SSH 公钥请前往
<router-link
:to="{ name: 'SettingsDeveloper' }"
class="underline"
@click="show = false"
>
开发者设置</router-link
>
添加您的 SSH 公钥
</p>
<p v-else-if="!$bench.pg.is_ssh_proxy_setup">
bench 未启用 SSH 访问请联系支持以启用访问
</p>
<p v-else>
您需要 SSH 证书才能访问您的 bench此证书仅适用于您的公私钥对并且有效期为 6 小时
</p>
<p>
请参阅
<a href="/docs/benches/ssh" class="underline" target="_blank"
>SSH 访问文档</a
>
了解更多详情
</p>
</div>
</template>
<template
#actions
v-if="
!certificate &&
$bench.pg?.is_ssh_proxy_setup &&
$bench.pg?.user_ssh_key
"
>
<Button
:loading="$releaseGroup.generateCertificate.loading"
@click="
async () => {
await $releaseGroup.generateCertificate.fetch();
await $releaseGroup.getCertificate.reload();
}
"
variant="solid"
class="w-full"
>生成 SSH 证书</Button
>
</template>
<ErrorMessage
class="mt-3"
:message="$releaseGroup.generateCertificate.error"
/>
</Dialog>
</template>
<script>
import { getCachedDocumentResource } from 'jingrow-ui';
export default {
props: ['bench', 'releaseGroup'],
data() {
return {
show: true
};
},
resources: {
bench() {
return {
type: 'document',
pagetype: 'Bench',
name: this.bench,
onSuccess(pg) {
if (pg.is_ssh_proxy_setup && pg.user_ssh_key) {
this.$releaseGroup.getCertificate.reload();
}
}
};
}
},
computed: {
$bench() {
return this.$resources.bench;
},
$releaseGroup() {
return getCachedDocumentResource('Release Group', this.releaseGroup);
},
certificate() {
return this.$releaseGroup.getCertificate.data;
},
sshCommand() {
if (!this.$bench.pg) return;
return `ssh ${this.$bench.pg.name}@${this.$bench.pg.proxy_server} -p 2222`;
},
certificateCommand() {
if (this.certificate) {
return `echo '${this.certificate.ssh_certificate?.trim()}' > ~/.ssh/id_${
this.certificate.key_type
}-cert.pub`;
}
return null;
}
}
};
</script>