全新安装 Ubuntu 15.10 后,当使用scp
或 时git clone
,出现以下警告(命令本身没有失败):key_load_public: invalid format
我怎样才能消除这个警告?
更新:这是输出scp -vvv
:
OpenSSH_6.9p1 Ubuntu-2, OpenSSL 1.0.2d 9 Jul 2015
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to ... [...] port 22.
debug1: Connection established.
key_load_public: invalid format
debug1: identity file /home/alexzeitler/.ssh/id_rsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_rsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_dsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_dsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_ecdsa type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_ecdsa-cert type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_ed25519 type -1
debug1: key_load_public: No such file or directory
debug1: identity file /home/alexzeitler/.ssh/id_ed25519-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.9p1 Ubuntu-2
答案1
检查文件/Users/alexzeitler/.ssh/id_rsa
。里面有什么?它是怎么到那里的?
它应该是你的私钥,不是吗?里面有什么吗/Users/alexzeitler/.ssh/id_rsa.pub
?它是有效的公钥吗?
如果您不使用这些键,请删除它们,消息就会消失。如果您以不同的方式使用它们,请将它们移到其他地方。如果它们的格式不同,也同样如此。
公共部分可能已损坏,因此您可以使用以下命令从私有部分重新创建它:
ssh-keygen -f ~/.ssh/id_rsa -y > ~/.ssh/id_rsa.pub
###hostkeys 可能性 另一种可能性是客户端正在尝试读取 的服务器公钥HostBasedAuthentication
。您不允许这样做吗/etc/ssh/ssh_config
?
这些文件之一可能丢失或损坏:
/etc/ssh/ssh_host_ecdsa_key.pub
/etc/ssh/ssh_host_ed25519_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
你的sshd
服务器没有抱怨吗?
答案2
Load key "/root/.ssh/id_rsa": invalid format
当我在 Dockerfile 中尝试时也遇到了类似的错误:
RUN echo "$ssh_prv_key" > /root/.ssh/id_rsa && chmod 600 /root/.ssh/id_rsa
这会导致类似identity file /root/.ssh/id_rsa type -1 invalid format
和 的错误read_passphrase: can't open /dev/tty
。不要使用echo "${SSH_PRIVATE_KEY}" >> /root/.ssh/id_rsa
来传递私钥!
正确的方法是使用
COPY id_rsa /root/.ssh/id_rsa
RUN chmod 600 /root/.ssh/id_rsa
解决方案解释:我的私钥格式错误 - 它不是多行,而是作为一行传递的,并且您可能遇到任何其他格式问题,例如在开头或结尾忘记了“-”,或者行尾出现错误,例如缺少换行符格式或行尾多了一个字母。
看Dockerfile:使用无密码私钥克隆 repo。错误:“身份验证代理”或“read_passphrase:无法打开 /dev/tty”更多细节,主要思想来自在docker文件中将私钥添加到ssh-agent,这个想法又来自Gitlab CI/Docker:ssh-add 不断要求输入密码。