【问题标题】:Google Cloud ssh key error - python script谷歌云 ssh 密钥错误 - python 脚本
【发布时间】:2018-11-25 08:01:35
【问题描述】:

我有一个 Python 脚本,我尝试在 Google Cloud Compute Engine 上运行。我在 Compute Engine 上设置并运行了 Jupyter Notebooks,当我连接到它并从连接到 Compute Engine 实例的笔记本电脑上的笔记本窗口运行 SFTP 连接脚本时,它运行正常。

当我通过命令行直接在 Compute Engine 上运行相同的脚本时,我收到一个 SSH 错误。

(2018-06-15 12:39:52; transport.py:1636) DEBUG:paramiko.transport: Adding ecdsa-sha2-nistp521 host key for sftp.############.com: b'ff97f###################'

(2018-06-15 12:39:52; transport.py:1636) DEBUG:paramiko.transport: Trying SSH agent key b'bc574#######################'

(2018-06-15 12:39:52; transport.py:1636) DEBUG:paramiko.transport: userauth is OK

(2018-06-15 12:39:52; transport.py:1636) INFO:paramiko.transport: Authentication (publickey) failed.

(2018-06-15 12:39:52; transport.py:1636) INFO:paramiko.transport: Disconnect (code 7): Bad service id

(2018-06-15 12:39:53; get_file_sftp.py:29) ERROR:__main__: SFTP Connection: Connection Error

我已尝试使用

生成密钥
ssh-keygen hostname

它创建了一个 ECDSA 密钥,但是现在当我从命令行进行常规 ssh 连接时(在我开始弄乱 keygen 之前它正在工作)我收到错误“shell 请求在通道 0 上失败”,所以我'让事情变得更糟,代码仍然无法运行。

对主机名执行 ssh-keyscan 会返回两条记录,一条 RSA 和一条 ECDSA

这是我的 Python 代码

import paramiko
from parse_config import fn_parse_config
from configparser import ConfigParser
import logging
import logging.config
import datetime

def fn_get_file_sftp():

    #initialise logging function
    logging.config.fileConfig('logging.conf', disable_existing_loggers=False)
    logger=logging.getLogger(__name__)

    #get details from config files
    sftp_params = fn_parse_config("etl_process.ini", "remote_sftp")
    sftp_folders = fn_parse_config("etl_process.ini", "sftp_folders")

    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

    #print('start')
    try:
        logger.info("SFTP Connection:Send credentials")

        ssh.connect(**sftp_params)
        logger.info("SFTP Connection:SUCCESS")

    except paramiko.SSHException:
        logger.error("SFTP Connection: Connection Error")


    sftp = ssh.open_sftp()
    #sftp.chdir("/vivobarefoot/")
    print (sftp.listdir("/"))

    for file in sftp.listdir("/"):
        sftp.get(remotepath = sftp_folders.get('remote_path') + file, localpath=sftp_folders.get('local_path')  + file )
        logger.info("RETRIEVED SFTP FILE: " + file)
        sftp.remove(sftp_folders.get('remote_path') + file)
        logger.info("REMOVED SFTP FILE: " + file)
    ssh.close()
    logger.info("SFTP Connection:CLOSED")

fn_get_file_sftp() 

【问题讨论】:

    标签: python google-compute-engine ssh-keys


    【解决方案1】:

    好的我找到了解决方案,它来自this,运行命令

    gcloud compute ssh INSTANCE_NAME
    

    这样做会创建 Python 脚本所需的 SSH 密钥文件 - 因此无需更改 Python 代码。如果我尝试在 Ubuntu 的命令行中运行基本 ssh 连接,我仍然会收到错误“通道 0 上的 shell 请求失败”,所以当我尝试通过 Unix 命令执行此操作时,我显然破坏了一些东西,但我的主要要求是让 python 脚本工作。

    ========================= 这是我用来查找此修复程序的信息来源

    https://groups.google.com/forum/#!topic/gce-discussion/PXEzoZQpcSo

    1. 向 GCE 防火墙添加规则:$ gcloud compute firewall-rules create mySSH --allow tcp:22 --source-ranges 0.0.0.0/0
    2. 通过 telnet 测试规则:$ telnet IP 22
    3. 如果 telnet 工作正常,则 SSH 正在接受连接,因此请尝试 ssh:$ gcloud compute ssh INSTANCE_NAME

    【讨论】:

      猜你喜欢
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 2013-12-18
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多