You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Colab环境使用SCP传输文件遇主机密钥验证失败问题求助

解决Colab中SCP Host Key Verification Failed的问题

我之前在Colab里也踩过一模一样的坑——默认SSH配置目录的权限或路径问题,导致常规清除known_hosts的方法完全失效,给你几个亲测有效的解决方案:

方案1:自定义Known Hosts文件(最稳定可靠)

Colab默认的/root/.ssh目录经常会有读写权限限制,我们可以自己在可写的/content目录下创建专属的SSH配置:

  1. 先创建自定义的.ssh目录:
!mkdir -p /content/.ssh
  1. 获取目标主机的公钥并写入自定义known_hosts:
!ssh-keyscan [你的目标主机IP/域名] > /content/.ssh/known_hosts

(如果目标主机用了非默认SSH端口,比如2222,就加-p 2222参数)

  1. 用这个自定义文件执行SCP命令,同时指定你的私钥路径(如果私钥不在默认位置):
!scp -o UserKnownHostsFile=/content/.ssh/known_hosts -i /content/.ssh/id_rsa "/content/你的本地文件路径" [目标用户名]@[目标主机]:~/目标目录

方案2:修正StrictHostKeyChecking参数的写法

你之前用的单引号可能在Colab的shell环境里解析有问题,换成双引号试试,同时把参数放在SCP命令最前面:

!scp -o "StrictHostKeyChecking no" -o "UserKnownHostsFile=/dev/null" "/content/你的本地文件路径" [目标用户名]@[目标主机]:~/目标目录

UserKnownHostsFile=/dev/null是彻底跳过主机密钥检查,适合临时测试场景。

方案3:用Paramiko+SCPClient重写上传逻辑

如果之前的Paramiko代码没效果,大概率是没正确处理主机密钥或私钥加载,给你一个完整的可运行示例:

  1. 先安装依赖(如果没装过):
!pip install paramiko scp
  1. 执行上传代码:
import paramiko
from scp import SCPClient

# 替换成你的实际参数
HOST = "你的目标主机IP/域名"
USER = "目标主机用户名"
PRIVATE_KEY_PATH = "/content/.ssh/id_rsa"  # 你的私钥在Colab里的路径
LOCAL_FILE = "/content/要上传的文件路径"
REMOTE_DEST = "~/目标目录"

# 加载私钥
try:
    private_key = paramiko.RSAKey.from_private_key_file(PRIVATE_KEY_PATH)
except Exception as e:
    print(f"加载私钥失败:{e}")
    exit()

# 创建SSH客户端,自动接受主机密钥
ssh_client = paramiko.SSHClient()
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

try:
    # 连接目标主机
    ssh_client.connect(hostname=HOST, username=USER, pkey=private_key)
    # 上传文件
    with SCPClient(ssh_client.get_transport()) as scp:
        scp.put(LOCAL_FILE, remote_path=REMOTE_DEST)
    print("文件上传成功!")
except Exception as e:
    print(f"上传失败:{e}")
finally:
    ssh_client.close()

额外必查项

  • 确认你的公钥已经添加到目标主机的~/.ssh/authorized_keys
  • 目标主机的SSH服务是否正常运行,端口是否开放(可以用!telnet [主机] 22测试)
  • Colab里的私钥文件权限要正确,建议设置为!chmod 600 /content/.ssh/id_rsa(权限太宽会被SSH拒绝)

内容的提问来源于stack exchange,提问作者eddie

火山引擎 最新活动