我试图从正在运行的服务器生成一个cert.pem。我正在使用命令:
echo "" | openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null | sed -n echo '/BEGIN\CERTIFICATE/,/END\ CERTIFICATE/p' | tac | sed -n -e '1,/BEGIN/!d;p' | tac > cert.pem
但是我收到了: sed:无法读取/ BEGIN \ CERTIFICATE /,/ END \ CERTIFICATE / p:没有这样的文件或目录
如果我只使用命令:
openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null
它使用密钥从服务器返回信息。
任何人都可以帮我解释为什么我的命令没有运行?
谢谢!
答案 0 :(得分:1)
此命令适用于我(在openbsd上执行):
echo "" | openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' | tac | sed -n -e '1,/BEGIN/!d;p' | tac
如果引号中有刺,则无需转义空格。 并且在第一次' sed -n'
之后不需要回声 如果有人尝试此命令并且没有tac - 而是使用命令:perl -pe 'print reverse <>'
还要使用正确的主机名和端口。
所以新命令(没有tac
)是:
echo "" | openssl s_client -showcerts -prexit -connect 127.0.0.1:4709 2>/dev/null | sed -n '/BEGIN CERTIFICATE/,/END CERTIFICATE/p' | perl -pe 'print reverse <>' | sed -n -e '1,/BEGIN/!d;p' | perl -pe 'print reverse <>'