bash-4.2# ssh-copy-id -i /root/,ssh/id dsa.pub hd2ile or directorybin/ssh-copy-id:ERROR: mktemp failedbash-4.Z# bin/ssh-copy-id: INF0: Source of key(s)to be installed: "/root/.ssh/id_dsa .pub' nktemp: failed to create file via template '/usr/local/jdk/,ss
时间: 2025-03-13 22:14:24 浏览: 47
### 解决 `ssh-copy-id` 命令执行时 `mktemp` 失败的问题
当遇到 `ssh-copy-id` 执行过程中 `mktemp` 创建临时文件失败的情况,通常是因为目标主机上的环境配置或者权限设置存在问题。对于PowerShell版本的`ssh-copy-id`函数实现[^1],可以考虑以下几个方面来排查并解决问题:
- **确认SSH密钥存在**:确保本地用户的`.ssh`目录下确实存在公钥文件(`id_rsa.pub`)。如果不存在,则需要先通过`ssh-keygen`工具生成一对新的SSH密钥对。
```powershell
if (!(Test-Path "$publicKey")){
Write-Error "ERROR: failed to open ID file '$publicKey': No such file"
}
```
- **检查远程服务器端的权限**:验证是否有足够的权限在远程机器上创建或修改`.ssh`目录及其下的`authorized_keys`文件。这涉及到用户身份认证以及目标系统的访问控制策略[^2]。
- **替代方案——手动添加公钥**:作为临时解决方案,在无法立即修正`mktemp`错误的情况下,可以选择直接将本地的公钥内容追加到远程主机相应账户的`~/.ssh/authorized_keys`文件中。此方法绕过了自动化的脚本流程,减少了中间环节可能出现的问题。
```powershell
& cat "$publicKey" | ssh $args $userAtMachine "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys || exit 1"
```
上述代码片段展示了如何利用管道操作符将本地公钥发送至远端,并安全地附加到授权键列表里。这种方式同样能够达到允许无密码登录的效果而不依赖于可能有问题的标准`ssh-copy-id`命令行为。
#### 注意事项
为了防止潜在的安全风险,请务必谨慎处理涉及敏感信息的操作,比如私钥管理等。同时建议定期审查和更新相关配置以保持最佳实践标准。
阅读全文
相关推荐













