假设我向某人提供了我的公共 SSH 密钥 id_rsa.pub,并且他/她将其安装在受到威胁的服务器上,然后我被要求登录。
登录过程是否涉及将我的私钥发送到受感染的服务器?
如果是,那么攻击者现在可以访问我的私人 SSH 密钥,这很可怕。
如果没有,那么为什么我会在 ssh -vvv 输出中看到这一行:
debug1: Server accepts key: pkalg ssh-rsa blen 277
Run Code Online (Sandbox Code Playgroud)
这意味着私钥已发送到服务器,并且它接受了它。
我误解了这个问题吗?
根据安全最佳实践,不应允许使用密码或密钥通过 SSH 进行 root 登录。相反,应该使用 sudo。
但是,如果您想使用 SSH (SFTP) 远程编辑服务器配置文件,例如 /etc 中的那些(Apache、Cron,等等),应该怎么做?
通过 SFTP 进行 root 访问的文件远程编辑是否与安全最佳实践兼容
应如何设置文件权限、用户组等以遵循安全最佳实践
目前,我使用受密码保护的公钥身份验证以 root 身份登录,但我不确定是否可以做一些更安全的事情,以便可以完全禁用面向 root 的 SSH 登录。
服务器是 Ubuntu 12.04。
虽然我可以使用该--edit-key命令确定我对单个 OpenPGP 公钥设置的信任级别,但是否有一种简单的方法可以从命令行列出所有公钥及其信任级别?
Ed25519 私钥可以通过执行以下操作生成openssl genpkey -algorithm ed25519 -outform PEM -out private.pem。我的问题是...使用 OpenSSL 有没有办法从私钥获取公钥?
使用 RSA 私钥,您可以做到openssl rsa -in private.pem -pubout。这给出了与 RFC5280 中的SubjectPublicKeyInfo相对应的密钥(至少对我来说是这样)。
但是我怎样才能获得 Ed25519 密钥的类似公钥呢?我想我可以使用私钥生成 CSR 并从 CSR 中获取它,但这似乎需要大量工作。当然,这比运行单个命令需要做更多的工作......
我正在帮助一位在使用公钥身份验证连接到我维护的服务器时遇到问题的朋友。公钥身份验证适用于其他几个用户。当然,我朋友的公钥在服务器上的authorized_keys-file中。
debug1: Host 'xxxxx' is known and matches the RSA host key.
debug1: Found key in /home/xxx/.ssh/known_hosts:3
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue:
publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
debug1: Next authentication method: gssapi-with-mic
debug1: Unspecified GSS failure. Minor code may provide more information
Credentials cache file '/tmp/krb5cc_1000' not found …Run Code Online (Sandbox Code Playgroud) 我正在编写使用 opessl 库来验证 DSA 签名的软件。我有来自发件人的 gpg 格式的公钥。如何将它们转换为 .pem 以便 openssl 可以读取它们?
我从另一个线程找到了这个:
gpgsm -o secret-key.p12 --export-secret-key-p12 0xXXXXXXXX
Run Code Online (Sandbox Code Playgroud)
要进行导出,我需要将密钥放在 gpgsm 钥匙圈中,不是吗?我只是不知道如何将我的密钥导入 gpgsm 正在使用的密钥环。我最终遇到错误:
gpgsm --import public.asc
gpgsm: total number processed: 0
gpgsm: error importing certificate: End of file
Run Code Online (Sandbox Code Playgroud)
可以gpgsm以某种方式使用 gpg:s 密钥环并从那里进行导出吗?
我想将我的公钥上传到密钥服务器,但我已经在没有 GPG 的情况下拥有了我的关键基础设施,我不想安装我不需要的额外软件。有没有一种简单的方法可以在不安装整个 GnuPG 软件套件的情况下对我的公钥进行 ASCII 保护?
我正在尝试从终端通过 SSH 连接到本地 IP 地址。命令是
ssh -v user@192.168.0.2
Run Code Online (Sandbox Code Playgroud)
但它没有连接。它不断给我错误
“权限被拒绝(公钥,密码)。”
我一直在寻找年龄,只是找不到问题所在。我可以通过Windows上的PuTTY使用相同的方法进行连接,也可以通过FileZilla进行连接
完整输出:
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: Connecting to 192.168.0.2 [192.168.0.2] port 22.
debug1: Connection established.
debug1: identity file /Users/[UserName]/.ssh/id_rsa type 1
debug1: identity file /Users/UserName/.ssh/id_rsa-cert type -1
debug1: identity file /Users/UserName/.ssh/id_dsa type -1
debug1: identity file /Users/UserName/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string …Run Code Online (Sandbox Code Playgroud) 我在其他线程中找不到我的具体案例。
基本上我有我的 PC (ubuntu)、一个代理 (Debian) 和一个目标 (Debian)。我想通过代理从 PC 到目标进行代理跳转。从代理到目标以及从 PC 到代理的身份验证使用公钥身份验证,每台机器都有自己的密钥对。
PC中的privkey与proxy中的PC pubkey相匹配,它们在默认目录中。所以,我只是运行ssh user@proxy inPC,它可以很好地连接到代理。在代理中,我必须指定ssh -i mypubkey user@targetserver连接正常(它不是默认密钥)。
现在,在 PC 上,我不知道如何运行一个命令并最终进入目标,因为我必须在代理中指定私钥。我试过:
ssh -J user@proxy user@target
ssh -Ao ProxyCommand="ssh -W %h:%p user@proxy" user@target
Run Code Online (Sandbox Code Playgroud)
但它给了我错误权限被拒绝(公钥)。
在代理服务器我试图添加IdentityFile指令中~/.ssh/config和/etc/ssh/ssh_config,但显然当我打电话从PC作为主机跳代理,它不需额外花费从这些文件中的配置。
如果我将私钥从代理带到 PC 并指定-i例如,它可以工作(那将是ssh -i mypubkey -J user@proxy user@target)。所以我的问题是:是否可以将私钥保留在代理中并在 PC 中引用它,这样我就不必将其移动到 PC 上?
我在解析 OpenSSH 公钥文件时遇到问题。我相信(但我不确定)格式在 RFC 4253, The Secure Shell (SSH) Transport Layer Protocol Section 6.6, Public Key Algorithms 中有详细说明。
对于 RSA 密钥,RFC 说:
“ssh-rsa”密钥格式具有以下特定编码:
Run Code Online (Sandbox Code Playgroud)string "ssh-rsa" mpint e mpint n这里的 'e' 和 'n' 参数构成了签名密钥 blob。
这就是问题开始的地方。该文档没有提供语法,也没有定义什么string和mpint是什么。这导致:
$ cat rsa.ssh.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSNM6RVVmwN3y0NurIQnmZgjcx5K5zzZu9nDqopW4J
In/mr8OYZI3heSJShnIM8EThvwVGXXXyyJVRQAvRHYFO4DxS6bufSNWr3BxBGaGYlYxI9mgvQnT6+MzE
3oZyEMdQNPlV5VfbileXlrPoAk1TkGdVdhwdLJMI2B4KUyMf+Q== jwalton@test
Run Code Online (Sandbox Code Playgroud)
进而:
$ echo 'AAAAB3NzaC1yc2EAAAADAQABAAAAgQDSNM6RVVmwN3y0NurIQnmZgjcx5K5zzZu9nDqopW4
JIn/mr8OYZI3heSJShnIM8EThvwVGXXXyyJVRQAvRHYFO4DxS6bufSNWr3BxBGaGYlYxI9mgvQnT6+M
zE3oZyEMdQNPlV5VfbileXlrPoAk1TkGdVdhwdLJMI2B4KUyMf+Q==' | base64 -d > rsa.bin
Run Code Online (Sandbox Code Playgroud)
最后:
$ hexdump -C rsa.bin
00000000 00 00 00 07 73 73 68 2d 72 73 61 00 00 00 03 …Run Code Online (Sandbox Code Playgroud)