小编Ser*_*ich的帖子

如何通过环境变量传递 ssh 密钥密码

ssh在我的应用程序中使用命令运行 shell 脚本。使用的私钥是通过密码加密的,问题是 - 当被问到时我无法交互地传递它。密钥没有添加到ssh-agent. 我无法执行,ssh-add my_key因为密码应该以交互方式传递。对终端通信有好处,但在应用内部使用不太好。

man page说:

显示和 SSH_ASKPASS

如果 ssh-add 需要密码短语,如果它是从终端运行的,它将从当前终端读取密码短语。如果 ssh-add 没有与之关联的终端,但设置了 DISPLAY 和 SSH_ASKPASS,它将执行 SSH_ASKPASS 指定的程序并打开 X11 窗口以读取密码。这在从 .xsession 或相关脚本调用 ssh-add 时特别有用。(请注意,在某些机器上,可能需要重定向来自 /dev/null 的输入才能使其工作。)

当我执行时,SSH_ASKPASS=file_with_passphrase ssh-add my_key我仍然要求输入密码,在这种情况下,看起来 env var 只是被忽略了。我尝试执行ssh -o BatchMode=yes并且服务器拒绝了编码的密钥,因为没有人能够对其进行解码。

我绝对可以在使用之前手动解码 ssh 密钥,ssh-agent但看起来我即将从SSH_ASKPASS变量中获得我需要的东西,但我不知道如何使它工作。很高兴得到社区帮助。

linux ssh shell ssh-keys ssh-agent

9
推荐指数
1
解决办法
8849
查看次数

导致'在初始化之前由闭包捕获的常量'错误的原因

在下面的课程

class Foo {
   let _defaultValue = "N/A"
   let value: String 

   init (dict: NSDictionary) {
       self.value = dict["bar"] as? String! ?? _defaultValue
   }
}
Run Code Online (Sandbox Code Playgroud)

编译因消息而失败 constant 'self.value' captured by a closure before being initialized

据我所知,没有操作员阅读_defaultValue,这个消息真的令人困惑.

我随机发明的变通方法让我更加困惑:

class Foo {
       let value: String 

       init (dict: NSDictionary) {
           let _defaultValue = "N/A"
           self.value = dict["bar"] as? String! ?? _defaultValue
       }
    }
Run Code Online (Sandbox Code Playgroud)

决策constant 'self.value' captured by a closure before being initialized声明和初始化内部构造关闭编译器抱怨和编程工作!

怎么解释这样的事情?

swift swift2

7
推荐指数
1
解决办法
2789
查看次数

将CustomObject列表转换为Guava Table集合,复杂性较低

我有

class CustomObject {
Integer day;
List<InnerObject> innerObjects;
///getter setter

}

class InnerObject {
String id;
List<String> someVal;
//getter setter

}
Run Code Online (Sandbox Code Playgroud)

我有一个

List<CustomObject>

而且我要

Table<String, Integer, List<String>>

我希望表代表id (from InnerObject)- >(day (from Custom object),List of someVal (from InnerObject)

为了使它干净我调整了一点名称,但结构与预期相同.

现在我的表现如何

final List<CustomObject> objects = ???
final Map<Integer, List<InnerObject>> dayVsInnerObjects = objects.stream()
.collect(toMap(CustomObject::getDay, CustomObject::getInnerObjects));


final Table<String, Integer, List<String>> table = HashBasedTable.create();

 dayVsInnerObjects.forEach((day, innerObjects) -> 
                            innerObjects.forEach(i -> {
                             table.put(i.getId(), day, i.getSomeVal());
            })
);
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 有没有更好的方法呢?可能是一个更好的番石榴/收集API,可以使它更清洁.
  2. 现在正在填充表,它是可变的.我们可以在创建它时让它变得不可变.
  3. 时间复杂度如果可以在这里减少.

lambda guava java-8

6
推荐指数
1
解决办法
665
查看次数

Gradle删除定义为任务输出的目录(陈旧目录)

我有一个unzipDatagradle任务定义如下:

task unzipFile(type: Copy) {
  dependsOn mkdirTrash
  dependsOn downloadFile

  from zipTree(file("$trashDir/file.zip"))
  into trashDir
}
Run Code Online (Sandbox Code Playgroud)

该任务将存档内容直接与存档本身一起解压缩到目录中(在trash目录中,该目录是所有任务工件的根,并且只有在完成所有准备任务后才能删除)。

在我将gradle包装器更新为4.2.1版本之前,一切一直可以正常工作。

任务执行开始产生错误:

FAILURE: Build failed with an exception.

* What went wrong:
Cannot expand ZIP 'trash/file.zip' as it does not exist.
Run Code Online (Sandbox Code Playgroud)

在调试输出中,我看到gradle删除了整个trash目录

> Task :unzipFile
11:56:23.145 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] Build operation 'Task :unzipFile' started
11:56:23.145 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Starting to execute task ':unzipFile'
11:56:23.145 [INFO] [org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter] Putting task artifact state for task ':unzipFile' into context took 0.0 secs.
11:56:23.204 [DEBUG] [org.gradle.internal.progress.DefaultBuildOperationExecutor] …
Run Code Online (Sandbox Code Playgroud)

java gradle

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

Kotlin随机数列表

我正在使用以下方法创建随机数列表

val randomList = List(4) { Random.nextInt(0, 100) }
Run Code Online (Sandbox Code Playgroud)

但是,这种方法行不通,因为我想避免重复

list kotlin

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

Int :: class.javaPrimitiveType.kotlin引用不等于Int :: class.javaObjectType.kotlin

我认为CASE 2也应该归结为真.这种行为是否正确?

// CASE 1
Int::class.javaPrimitiveType!!.kotlin == Int::class.javaObjectType.kotlin // true

// CASE 2
Int::class.javaPrimitiveType!!.kotlin === Int::class.javaObjectType.kotlin // false
Run Code Online (Sandbox Code Playgroud)

kotlin

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

标签 统计

kotlin ×2

gradle ×1

guava ×1

java ×1

java-8 ×1

lambda ×1

linux ×1

list ×1

shell ×1

ssh ×1

ssh-agent ×1

ssh-keys ×1

swift ×1

swift2 ×1