使用ssh-copy-id复制SSH密钥时被要求输入密码的问题咨询
ssh-copy-id时明明没给密钥设密码,却还是被要求输入密码? 嘿,别慌,这其实是个很容易搞混的点——这里要求你输入的不是SSH密钥的保护密码(passphrase),而是远程服务器上deploy用户的系统登录密码!下面给你拆解几种常见的原因:
首次连接,还没建立信任关系
ssh-copy-id的作用就是把你的公钥上传到远程服务器的~/.ssh/authorized_keys文件里,让后续登录可以免密码。但第一次执行这个命令的时候,远程服务器还没有你的公钥,所以必须先用密码登录到远程服务器,才能完成公钥的写入操作。输完这次密码后,下次用deploy_rsa密钥登录就不用再输密码啦。指定的公钥文件路径不对
如果你运行命令的当前目录里没有deploy_rsa.pub这个文件,ssh-copy-id会自动 fallback 到默认的密钥文件(比如~/.ssh/id_rsa.pub)。如果默认密钥不在远程服务器的信任列表里,就会触发密码登录要求。你可以检查下当前目录是否有目标公钥,或者用绝对路径指定,比如:ssh-copy-id -i ~/.ssh/deploy_rsa.pub deploy@multicrew.co.uk远程服务器SSH配置限制了公钥登录
有些服务器的sshd_config配置里,可能关闭了公钥登录(PubkeyAuthentication no)或者强制开启了密码登录(PasswordAuthentication yes)。这种情况下哪怕你传了公钥,服务器也不会用它来验证身份,只能走密码登录流程。如果是这种情况,需要联系服务器管理员调整SSH服务配置。远程服务器上的权限问题
远程服务器的~/.ssh目录权限必须是700,authorized_keys文件权限必须是600——如果这两个路径的权限太宽松(比如给了其他用户读写权限),sshd会出于安全考虑拒绝使用这个公钥,从而 fallback 到密码登录。如果已经上传了公钥但还是被要求输密码,可以登录到远程服务器检查这两个权限是否符合要求。
内容的提问来源于stack exchange,提问作者AdmagTwoXray

