有没有办法将私钥的内容直接传递给scp
命令,而不必将其复制到文件并通过选项指向它-i /path/to/key.pem
?
因此不要这样做:
scp -i key.pem source target
我可以做如下的事情吗?
scp -i '-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAMIIEowIBAA...\n' source target
当然,我尝试过这个,但它不起作用,但也许可以通过一些 BASH 管道、输出重定向或类似的东西来实现。
我需要这样做的原因是因为我无法将密钥存储在文件系统中(这是一个非常漫长而无聊的故事),并且此命令需要每次使用不同的密钥执行数百万次,因此额外的磁盘 i/o 对我们的结果来说将非常重要。
答案1
如果你不能透露更多信息我们真的无法帮助您:有关 Server Fault 的问题需要提供足够的背景信息,以便我们能够智能地分析问题,但这个问题却没有。
我可以明确地告诉你的是,“在命令行上传递密钥”是一个坏主意:如果你这样做,你就会继承所有讨论的问题这问题这基本上意味着机器上的任何人都可以看到你的私钥。(这就是为什么ssh
、scp
、 和sftp
命令不允许您这样做的原因。)
考虑使用ssh-agent
来处理你的密钥——这里有一些额外的含义,但你基本上可以将你的密钥存储在文件系统上,将它们加载到代理中,然后允许代理将密钥传递给客户端进行身份验证(这应该可以解决问题,或者至少减少您的表现问题)。
如果ssh-agent
不适合您的需要,您就只能破解并重新编译 SSH 客户端来以某种方式支持您想要的内容。
答案2
如果您必须在命令行上指定文件,则可以像这样上传文件:
echo -ne '-----BEGIN ...\n' | ssh target_host "cat > ~/.ssh/authorized_keys"
-n
echo 选项会隐藏尾随的换行符。该选项-e
会扩展转义字符,例如\n
。如果您想要附加到文件而不是替换它,则可以使用>>
而不是>
。