如何使用ssh公钥进行gpg加密?

时间:2016-02-09 17:34:48

标签: ssh public-key-encryption gnupg

我在名为key.pub的文件中有一个公钥,内容如下:

ssh-rsa AAAAB...<snip>...t+f klahnakoski

我想用gpg来加密文件。所需的shell命令序列是什么?

我想这个序列看起来像是:

  • 将密钥转换为gpg友好格式
  • 使用
  • 创建一些凭据来签名密钥
  • 发明用户以便于将密钥添加到密钥环
  • 执行加密

谢谢!

2 个答案:

答案 0 :(得分:1)

RSA密钥只能用于加密一部分密钥长度。例如2048位RSA密钥只能用于加密大约245个字节。

请参阅:

https://security.stackexchange.com/questions/33434/rsa-maximum-bytes-to-encrypt-comparison-to-aes-in-terms-of-security

因此,要加密/解密大量数据(文件),您将使用对称密钥,该对称密钥是使用公钥加密的,而不是不是公钥本身。

此外,您不会将对称密钥添加到 public SSH密钥,因为对称密钥是秘密,而SSH公钥不是秘密。对称密钥应添加到 private SSH密钥。

它类似于以下内容:

要转换文件格式,请安装Monkeysphere工具集(Ubuntu)

import gzip


def to_gcs(request):    
    job_config = bigquery.QueryJobConfig()
    gcs_filename = 'filename_{}.csv'
    bucket_name = 'bucket_gcs_name'
    subfolder = 'subfolder_name'
    client = bigquery.Client()


    job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE

    QUERY = "SELECT * FROM `bigquery-public-data.google_analytics_sample.ga_sessions_*` session, UNNEST(hits) AS hits"
    query_job = client.query(
        QUERY,
        location='US',
        job_config=job_config)

    while not query_job.done():
        time.sleep(1)

    rows_df = query_job.result().to_dataframe()
    storage_client = storage.Client()

    storage_client.get_bucket(bucket_name).blob(subfolder+'/'+gcs_filename+'.gz').upload_from_string(rows_df.to_csv(sep='|',index=False,encoding='utf-8',compression='gzip'), content_type='application/octet-stream')

使用pem2openpgp工具将 private 密钥转换为gpg格式。通过管道导入gpg。

sudo apt-get install monkeysphere

编辑密钥中的信任级别。

pem2openpgp userid-ssh@example.com < id_rsa | gpg --import

# Check it's there
gpg --list-secret-keys

添加所需的信任级别(例如,最终)

导入的密钥仅适用于创建证书,不适用于签名或加密。

加密

密钥是RSA密钥,不能用于加密/解密大量数据。如果要这样做,则必须添加对称加密子项。加密时,GPG将使用此子密钥而不是原始的SSH密钥。

gpg --edit-key userid-ssh@example.com
gpg> trust

现在您可以使用基于 SSH密钥的身份进行加密和解密。

gpg> addkey
Please select what kind of key you want:
   (3) DSA (sign only)
   (4) RSA (sign only)
   (5) Elgamal (encrypt only)
   (6) RSA (encrypt only)
Your selection? 6

这有什么用?

好吧,使用GPG生成和管理SSH密钥作为身份验证子密钥比使用其他方法更有意义。实际上,它可以集成到SSH中,而不是ssh-agent。

答案 1 :(得分:0)

可能ssh-vault可能会给你一些想法,它遵循PGP的相同原则,并使用公共ssh密钥来加密密码。