Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
后端镜像
Tabby
提交
2af1e6e6
T
Tabby
项目概览
后端镜像
/
Tabby
通知
41
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Tabby
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
2af1e6e6
编写于
6月 20, 2021
作者:
E
Eugene Pankov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixes
上级
55299127
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
28 addition
and
12 deletion
+28
-12
terminus-local/src/index.ts
terminus-local/src/index.ts
+2
-0
terminus-settings/src/components/settingsTab.component.scss
terminus-settings/src/components/settingsTab.component.scss
+1
-0
terminus-ssh/src/api.ts
terminus-ssh/src/api.ts
+24
-11
terminus-ssh/src/components/editConnectionModal.component.ts
terminus-ssh/src/components/editConnectionModal.component.ts
+1
-1
未找到文件。
terminus-local/src/index.ts
浏览文件 @
2af1e6e6
...
...
@@ -6,6 +6,7 @@ import { ToastrModule } from 'ngx-toastr'
import
TerminusCorePlugin
,
{
HostAppService
,
ToolbarButtonProvider
,
TabRecoveryProvider
,
ConfigProvider
,
HotkeysService
,
HotkeyProvider
,
TabContextMenuItemProvider
,
CLIHandler
,
ConfigService
}
from
'
terminus-core
'
import
TerminusTerminalModule
from
'
terminus-terminal
'
import
TerminusElectronPlugin
from
'
terminus-electron
'
import
{
SettingsTabProvider
}
from
'
terminus-settings
'
import
{
TerminalTabComponent
}
from
'
./components/terminalTab.component
'
...
...
@@ -47,6 +48,7 @@ import { AutoOpenTabCLIHandler, OpenPathCLIHandler, TerminalCLIHandler } from '.
NgbModule
,
ToastrModule
,
TerminusCorePlugin
,
TerminusElectronPlugin
,
TerminusTerminalModule
,
],
providers
:
[
...
...
terminus-settings/src/components/settingsTab.component.scss
浏览文件 @
2af1e6e6
...
...
@@ -19,6 +19,7 @@
width
:
190px
;
flex
:
none
;
overflow-y
:
auto
;
flex-wrap
:
nowrap
;
}
>
.tab-content
{
...
...
terminus-ssh/src/api.ts
浏览文件 @
2af1e6e6
...
...
@@ -320,16 +320,23 @@ export class SSHSession extends BaseSession {
this
.
remainingAuthMethods
=
[{
type
:
'
none
'
}]
if
(
!
this
.
connection
.
auth
||
this
.
connection
.
auth
===
'
publicKey
'
)
{
for
(
const
pk
of
this
.
connection
.
privateKeys
??
[])
{
try
{
this
.
remainingAuthMethods
.
push
({
type
:
'
publickey
'
,
name
:
pk
,
contents
:
await
this
.
fileProviders
.
retrieveFile
(
pk
),
})
}
catch
(
error
)
{
this
.
emitServiceMessage
(
colors
.
bgYellow
.
yellow
.
black
(
'
!
'
)
+
` Could not load private key
${
pk
}
:
${
error
}
`
)
if
(
this
.
connection
.
privateKeys
?.
length
)
{
for
(
const
pk
of
this
.
connection
.
privateKeys
)
{
try
{
this
.
remainingAuthMethods
.
push
({
type
:
'
publickey
'
,
name
:
pk
,
contents
:
await
this
.
fileProviders
.
retrieveFile
(
pk
),
})
}
catch
(
error
)
{
this
.
emitServiceMessage
(
colors
.
bgYellow
.
yellow
.
black
(
'
!
'
)
+
` Could not load private key
${
pk
}
:
${
error
}
`
)
}
}
}
else
{
this
.
remainingAuthMethods
.
push
({
type
:
'
publickey
'
,
name
:
'
auto
'
,
})
}
}
if
(
!
this
.
connection
.
auth
||
this
.
connection
.
auth
===
'
agent
'
)
{
...
...
@@ -717,7 +724,7 @@ export class SSHSession extends BaseSession {
const
userKeyPath
=
path
.
join
(
process
.
env
.
HOME
!
,
'
.ssh
'
,
'
id_rsa
'
)
if
(
await
fs
.
exists
(
userKeyPath
))
{
this
.
emitServiceMessage
(
'
Using user
\'
s default private key
'
)
privateKeyContents
=
fs
.
readFile
(
userKeyPath
,
{
encoding
:
null
})
privateKeyContents
=
await
fs
.
readFile
(
userKeyPath
,
{
encoding
:
null
})
}
}
...
...
@@ -740,11 +747,17 @@ export class SSHSession extends BaseSession {
async
parsePrivateKey
(
privateKey
:
string
):
Promise
<
any
>
{
const
keyHash
=
crypto
.
createHash
(
'
sha512
'
).
update
(
privateKey
).
digest
(
'
hex
'
)
let
passphrase
:
string
|
null
=
await
this
.
passwordStorage
.
loadPrivateKeyPassword
(
keyHash
)
let
triedSavedPassphrase
=
false
let
passphrase
:
string
|
null
=
null
while
(
true
)
{
try
{
return
sshpk
.
parsePrivateKey
(
privateKey
,
'
auto
'
,
{
passphrase
})
}
catch
(
e
)
{
if
(
!
triedSavedPassphrase
)
{
passphrase
=
await
this
.
passwordStorage
.
loadPrivateKeyPassword
(
keyHash
)
triedSavedPassphrase
=
true
continue
}
if
(
e
instanceof
sshpk
.
KeyEncryptedError
||
e
instanceof
sshpk
.
KeyParseError
)
{
await
this
.
passwordStorage
.
deletePrivateKeyPassword
(
keyHash
)
...
...
terminus-ssh/src/components/editConnectionModal.component.ts
浏览文件 @
2af1e6e6
...
...
@@ -64,6 +64,7 @@ export class EditConnectionModalComponent {
)
async
ngOnInit
()
{
this
.
connection
.
algorithms
=
this
.
connection
.
algorithms
??
{}
for
(
const
k
of
Object
.
values
(
SSHAlgorithmType
))
{
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
if
(
!
this
.
connection
.
algorithms
[
k
])
{
...
...
@@ -76,7 +77,6 @@ export class EditConnectionModalComponent {
}
}
this
.
connection
.
algorithms
=
this
.
connection
.
algorithms
??
{}
this
.
connection
.
scripts
=
this
.
connection
.
scripts
??
[]
this
.
connection
.
auth
=
this
.
connection
.
auth
??
null
this
.
connection
.
privateKeys
??=
[]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录