标签: ssh-keys

SSH 要求输入密码,即使安装了公钥

可能的重复:
共享 ssh 密钥的问题

我已经在两台服务器之间设置了公钥认证。一切正常,但我仍然被要求输入密码。

这是我的 sshd 配置文件的一部分,在设置系统后我没有更改。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys
Run Code Online (Sandbox Code Playgroud)

授权密钥文件存在和一切。我一直在使用许多机器上的公钥执行此过程,但从未遇到过这个问题。你会建议做什么?

调试输出给了我以下内容:

debug1: identity file /root/.ssh/identity type -1
debug3: Not a RSA1 key file /root/.ssh/id_rsa.
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug3: key_read: missing keytype
debug3: key_read: missing whitespace
debug3: key_read: missing whitespace
...
debug2: key_type_from_name: unknown key type '-----END'
debug3: key_read: missing keytype
debug1: identity file /root/.ssh/id_rsa type 1
debug1: identity file /root/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.1p1 Debian-5 …
Run Code Online (Sandbox Code Playgroud)

ssh public-key ssh-keys

6
推荐指数
1
解决办法
5314
查看次数

如何使用 SSH 公钥和 PuTTY 连接到 Linux 机器

我正在尝试设置从 Windows 7 机器到 Red-Hat Linux 机器的公共 SSH 密钥连接。最终目的是从命令终端使用pscp(PuTTY 的 版本scp),而无需重复输入密码。

根据 PuTTY 的文档和其他在线资源,我使用PuTTYgen生成了一个密钥对。然后我将生成的公钥复制到~/.ssh/authorized_keysLinux 机器上的一个文件中(据我所知,它运行 OpenSSH 服务器)。

为了检查连接,我运行 PuTTY 并在其 GUI 的适当位置设置用户名和私钥文件。

但是,当尝试使用 PuTTY 的 SSH 进行连接时,连接使用了预设的用户名,但我收到了“ Server refused our key”的错误消息并提示输入密码。

然后我尝试将PuTTYgen的 GUI 中的公钥文本复制粘贴到authorized_keys文件中,但它也不起作用。

  1. 我应该如何设置从 Win 7 到 Linux 的公钥连接?

  2. 我如何使用它pscp(而不是 PuTTY 的 ssh)?


更新:认为问题可能出在PuTTYgen密钥格式上,我ssh-keygen在 Linux 机器上使用来创建 RSA 密钥对。它生成了id_rsa私钥和id_rsa.pub公钥。尝试使用> ssh-add id_rsa没有成功,因为我 git 的回复是“ Could …

linux ssh windows-7 putty ssh-keys

6
推荐指数
1
解决办法
3万
查看次数

我应该将密钥库文件添加到版本控制中吗?

有什么理由不在版本控制中存储密钥库文件?这样做是否存在安全风险?

security version-control ssh-keys

6
推荐指数
1
解决办法
3108
查看次数

如何强制 SSH 忽略“主机 *”中列出的特定主机的 IdentityFile?

我的 SSH 配置文件设置为使用该Host *部分中的特定 IdentityFile作为默认密钥。对于一个特定的主机,我想提供一个不同的密钥(并且只有那个密钥,而不是默认密钥)。

我的 ~/.ssh/config 文件如下所示:

Host specialhost
HostName specialhostname.mydomain.com
IdentityFile %d/.ssh/special-key
LogLevel debug
IdentitiesOnly yes 

Host *
IdentityFile %d/.ssh/regular-key
IdentitiesOnly yes 
Run Code Online (Sandbox Code Playgroud)

不管我做什么,或者不管配置文件中部分的顺序如何,我的 SSH 客户端(OS X OpenSSH_6.2p2)首先提供“常规密钥”(服务器接受它,这不是我想要的)。

ssh_config 手册页说明了以下内容IdentityFile

配置文件中可以指定多个身份文件;所有这些身份都将依次尝试。

我不清楚它所指的“序列”,因为该Host *部分中列出的 IdentityFile总是首先提供,即使“specialhost”列在它之前(如上例所示)。这里IdentitiesOnly建议的技巧似乎只与 ssh-agent 提供的密钥相关。一些其他类似的问题还没有得到任何答案。

我想在该Host *部分中保留常规键,因为我将该键与许多其他主机一起使用,并且我不想IdentityFile在每个主机条目中复制该键。

有什么方法可以强制 SSH 仅使用 SSH 配置提供“特殊密钥” (并且无需将我的 IdentityFile 指令复制到所有其他主机)?我可以通过从该Host *部分中取出密钥,将它们添加到代理,然后使用IdentitiesOnly yesfor specialhost来了解如何实现这一点,但我真的更愿意避免使用 ssh-agent,除非没有其他方法。

ssh openssh ssh-keys

6
推荐指数
1
解决办法
2977
查看次数

当我将 SSH 公钥复制到另一台机器时,我需要在最后保留注释吗?

假设我有一个公共 RSA SSH 密钥,如下所示:

ssh-rsa ijvoienvejfvmiejnci3onrvejviewlonvcljnrijcnreionv me@machine
Run Code Online (Sandbox Code Playgroud)

如果我正在复制此密钥以与另一台机器共享,是否在末尾添加注释 ( me@machine)?我是否包括标题 ( ssh-rsa)?

linux ssh authentication rsa ssh-keys

6
推荐指数
1
解决办法
1330
查看次数

OpenSSH - 有什么方法可以保持严格的主机密钥检查但只检查密钥而忽略服务器的名称?

有没有一种方法可以保持严格的主机密钥检查行为检查服务器的密钥指纹(这实际上已经是主机的唯一身份),而不考虑主机名/IP?

问题

我有几个个人移动/漫游设备:电话、笔记本电脑、更多用作袖珍电脑的电话等,我经常在它们之间使用 SSH,使用 IP 地址而不是主机名。

每当我最终使用新网络(通常是某人的家庭/办公室/公共 WiFi)或现有网络上的 DHCP 租约到期时,这些设备的 IP 地址都会乱码,导致以下一种或两种情况:

  1. 同一主机与不变的主机密钥是在不同的位置-这样ssh的提示我确认同一主机密钥再次为新的IP。

  2. 新主机最终与之前连接的主机使用相同的 IP(但之前的主机现在还在不同的 IP 上处于活动状态) - 因此,当尝试连接到新主机时,ssh会将其视为众所周知的错误阻止连接,解决这个问题需要我使用配置选项管理多个已知主机文件,或者丢失以前主机的已知主机密钥关联。

我想要某种方式来保持自动主机密钥检查,但在我的用例中,将主机名/IP 与服务器本身相关联是没有意义的,因此:

  1. 显示为不同名称/IP 的相同主机密钥应被自动接受为已知主机。

  2. 先前已知 IP 地址上的不同主机密钥应该只会导致新密钥的“是/否”对话框。

换句话说,我想known_hosts被检查,就好像它只是一个已知键的列表,而不是一个已知名称(/IP)<-> 键元组的列表。

但是,安全

只是先占这个切线:

如果我可以让 SSH 忽略主机名/IP 并决定密钥是新的还是已知的,那么不会有真正的安全损失,因为服务器的主机密钥已经和我们一样安全了服务器的唯一标识符无论该服务器当前处于什么名称/IP,都可以获取。

中间人事件的唯一区别是我会得到是/否提示而不是连接顽固地中止,但同样我会立即知道出了什么问题,因为我将连接到主机密钥的设备我期待被人知道。

对其他可能的解决方案想法的评论

DNS 不适用,因为我们谈论的是在不同网络之间切换,通常是 LAN 私有 IP 地址等。

/etc/hosts 考虑到我可能经常更换网络,调整只是一种痛苦。

我不使用像 mDNS/ZeroConf/Bonjour 这样的自动发现/自我广告技术,因为它们为这些小型设备中的一些添加了不可忽视的设置、维护和安全审计的复杂性(在其中一些我必须编译我想从源代码使用),而且我通常不喜欢我的设备积极并不断地向整个网络宣传自己。

我目前使用的一个手动式非解决方案至少可以减轻known_hosts痛苦,即强制 ssh/dev/null用作已知主机文件 - 这意味着我每次都会收到提示验证密钥。但即使有我良好的记忆力和 ASCII 键艺术的帮助,这也不会扩展和破坏自动化,而且我一直在逃避它,因为现在起作用的键数量非常少。

我可以修补ssh以允许一个KeyOnly …

openssh ssh-keys

6
推荐指数
1
解决办法
1789
查看次数

如何将 SSH ed25519 密钥导入 GPG?

我有一个 SSH ed25519 密钥,我想将其作为身份验证子密钥导入到 GPG。似乎没有任何关于如何执行此操作的文档。

openssh ssh-keys x509 gnupg pkcs

6
推荐指数
1
解决办法
2444
查看次数

如何将 PuTTY 生成的公钥转换为 RFC 4716 格式?

我正在使用 PuTTYgen 来生成公钥和私钥。我的问题是,如何将此文件转换为 RFC4716 格式?

PuTTYgen 允许我以通用格式保存公钥,例如:文件格式:所有文件(*.*),并以本机 PuTTY 格式保存私钥。PuTTYgen 还允许将密钥导出为 OpenSSH 或 ssh.com。

尽管如此,我找不到任何允许我将文件转换为 RFC 4716 格式的选项。有人知道任何解决方案吗?我的操作系统是Windows。我感谢您提供的任何帮助!

putty public-key ssh-keys

6
推荐指数
1
解决办法
1万
查看次数

SSH 密钥显然已过期:

我的印象是 SSH 密钥没有过期时间,所以我有点困惑为什么客户昨天来找我,告诉我我们的 2 个密钥有:

客户留言:

I can see that the key on each account is due for a refresh today.
xxxx1282xxxx Key Expiry Date: 11 April 2019 17:10
xxxx2214xxxx Key Expiry Date: 11 April 2019 17:02
Run Code Online (Sandbox Code Playgroud)

知道他们是如何做到这一点的吗,因为这现在可能涉及一项工作,我必须获取 100 多个密钥的到期日期......

ssh-keys

6
推荐指数
1
解决办法
3万
查看次数

Dockerfile:使用无密码私钥克隆存储库。错误:“身份验证代理”或“read_passphrase:无法打开/dev/tty”

我尝试使用 Dockerfile 和 SSH 密钥对从 GitLab 克隆一个测试项目:ssh-keygen -t rsa -P ""。私钥无密码,公钥发布在 GitLab 帐户上。

其他人可以快速测试这一点,只需在 GitLab 上开设一个帐户并发布您的 SSH 公钥,然后添加一个新的空项目进行克隆即可。

没有 Docker,使用ssh -i C:\path\to\my\private_key\id_rsa git@gitlab.com,它就可以工作。没有 Docker,克隆项目也可以工作。

我将私钥加载到 Dockerfile 中,最后将其删除。不重要,但对于所有在这里看到安全风险的人来说:我在使用后直接删除客户端和服务器上的密钥对。我只在克隆时尝试绕过用户帐户的密码条目,因为这在 Dockerfile 运行期间似乎不起作用,并且将是真正的安全风险,因为它可能会将密码留在日志中。

开始:转到 Dockerfile 目录,将私钥“id_rsa”粘贴到新的“.ssh”子文件夹中。然后:

docker build -t NEW_IMAGENAME . --build-arg ssh_prv_key="$(cat ./.ssh/id_rsa)"
Run Code Online (Sandbox Code Playgroud)

到目前为止的工作代码:

FROM vcatechnology/linux-mint:18.2
ARG ssh_prv_key
RUN apt-get update && \
    apt upgrade -y && \
    apt-get install -y git  
RUN apt-get install -y openssh-client # openssh-server
RUN mkdir /root/.ssh/
RUN echo "Host *\n  User git\n  HostName …
Run Code Online (Sandbox Code Playgroud)

ssh clone git ssh-keys docker

5
推荐指数
1
解决办法
7367
查看次数