Ubuntu环境下本地传文件至远程服务器遇权限问题,求正确scp命令
解决SCP传输时"Permission denied (publickey)"的问题
这个错误是因为远程服务器启用了公钥认证机制,而你的本地机器还没完成密钥对的配置,导致服务器拒绝了无有效公钥的登录请求。下面是一步步的解决流程:
1. 生成SSH密钥对(如果本地还没有)
打开终端,运行以下命令生成更安全的ed25519类型密钥:
ssh-keygen -t ed25519
执行后按回车确认默认存储路径(一般是~/.ssh/id_ed25519),如果不需要每次传输都输入密码,直接回车跳过密码设置即可。
2. 将本地公钥复制到远程服务器
用ssh-copy-id工具自动完成公钥的配置,替换命令里的username和remote-server-ip为你的实际远程用户名和服务器IP/域名:
ssh-copy-id username@remote-server-ip
此时会提示你输入远程服务器的用户密码,输入后工具会自动把公钥添加到远程服务器的~/.ssh/authorized_keys文件中。
3. 正确的SCP传输命令
现在密钥配置完成,就可以正常传输zip文件了。命令格式如下(替换实际路径):
scp /path/to/your/local/file.zip username@remote-server-ip:/path/to/remote/target/directory/
举个例子,如果你本地的zip文件在~/Downloads/archive.zip,要传到远程服务器的/home/user/backups/目录下,命令就是:
scp ~/Downloads/archive.zip user@192.168.1.100:/home/user/backups/
额外注意事项
- 如果已经有密钥但还是报错,可能是本地SSH代理没加载密钥,运行
ssh-add ~/.ssh/id_ed25519(如果是RSA密钥就是~/.ssh/id_rsa) - 确保远程服务器的
~/.ssh目录权限是700,authorized_keys文件权限是600,否则服务器会因为权限过于开放拒绝公钥认证。可以在远程服务器上执行:chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
内容的提问来源于stack exchange,提问作者usergs




