从命令行而不是文件传递私钥到scp

有没有办法将私钥的内容直接传递给scp命令,而不必将其复制到文件并通过-i /path/to/key.pem选项指向它?

所以不要这样做:

scp -i key.pem source target

我可以做类似以下的事情吗?

scp -i '-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAMIIEowIBAA...\n' source target

当然,我试过这个,它不起作用,但也许这可以通过一些BASHpipe道,输出redirect或类似的东西来实现。

我需要这样做的原因是因为我无法将密钥存储在文件系统中(这是一个非常漫长而无聊的故事),每次使用不同的密钥都需要执行该命令数百万次,所以额外的磁盘I / O将在我们的结果中显着。

如果你不能透露更多的信息,我们真的不能帮你:关于服务器故障的问题需要为我们提供足够的上下文来智能地分析问题,而这个问题不是。

我可以明确地告诉你的是,“在命令行上传递密钥”是一个坏主意:如果你这样做,你inheritance了这个问题中讨论的所有问题, 基本上意味着机器上的任何人都可以看到你的私钥 。 (这就是为什么sshscpsftp命令不允许你这么做)

考虑使用ssh-agent来处理你的密钥 – 这里有一些额外的含义,但是你基本上可以把你的密钥存储在文件系统中,把它们加载到代理中,然后让代理把密钥传递给客户端authentication的目的(这应该解决,或至less减less你的性能问题)。

如果ssh-agent不适合你的需要,那么你就可以用黑客来重新编译SSH客户端,以某种方式支持你想要的东西。

如果你绝对必须在命令行上指定文件,你可以像这样上传一个文件:

 echo -ne '-----BEGIN ...\n' | ssh target_host "cat > ~/.ssh/authorized_keys" 

echo的-n选项可以抑制尾随的换行符。 -e选项扩展转义字符,如\n 。 如果你想附加到文件而不是replace它,你可以使用>>而不是>