我不想完全禁用密码远程登录,但我想让我的帐户只能通过密钥对身份验证访问(还有其他用户想要使用密码登录)。是否可以在每个用户的基础上更改此设置,理想情况下不更改系统设置?
并且明确地说,我的帐户具有 sudo 访问权限,因此我不想锁定密码。
作为对我上一个问题的跟进,我决定创建如下本地用户帐户。
adduser --system --no-create-home USERNAME
Run Code Online (Sandbox Code Playgroud)
现在,我希望本地用户能够使用ssh. 根据我的理解,ssh工作如下。
假设我有 2 台机器(比如alpha和beta)。
ssh user@beta~/.ssh/authorized_keys在beta机器下。/~/.ssh在alpha机器下。现在我计划为用户实现无家。因此,假设我adduser在没有任何用户家的情况下进入beta机器,我是否仍然能够从alpha ssh 进入beta 版?
我对 OpenSSH 很感兴趣,我知道该/etc/ssh目录是用于 ssh 守护进程的,而该~/.ssh目录是用于特定用户的。
两个目录都包含私钥和公钥:
但是这些键之间有什么区别呢?我很困惑,因为我作为用户使用的那些在我的主目录中,在/etc/ssh?
我在将公钥复制到authorized_keys并用额外的换行符或空格或其他东西结束时遇到了问题。
有没有办法简单地验证密钥看起来像有效密钥?我没有私钥。
ssh-agent -t在 [1] 中有一些关于现有功能的简短讨论,早在 2001 年 debian-devel [2] 上就有一个帖子希望有一个不活动超时功能。在 SE [3] 上有一个类似的讨论,用于选美。
我不得不想知道地球上的其他地方是如何保护 ssh 密钥的——我是否遗漏了一些明显的东西,这对我来说是一个痛点,而且显然没有其他人?具体来说,我正在考虑脚本化的 ssh 交互,例如使用 ansible。看来今天,你的选择是:
seahorse/gnome-keyring-daemon几乎不支持这么多 [4]TMOUTshell var(感谢 freenode #openssh IRC 上的人的建议)如果您使用简短的 ssh 代理超时、强密码短语和不同的密钥文件来为您进行身份验证的每种角色类型:这将导致非常令人沮丧的一天!
我已经尝试过 gpgkey2ssh 和智能卡,但这并不能真正解决这个特定问题:我仍然需要 ssh-agent 功能,而且我不想每 5 分钟重新验证一次以防止我的私钥被暴露在我的电脑空闲时在内存中。
我做错了吗?
[2] https://lists.debian.org/debian-devel/2001/09/msg00851.html
[3] https://serverfault.com/questions/518312/putty-pageant-forget-keys-after-period-of-inactivity
[4] https://bugs.launchpad.net/ubuntu/+source/gnome-keyring/+bug/129231
我想将现有的公钥(使用 生成ssh-keygen)从PEM-format 转换为DER-format
我试过:
openssl rsa -in ~/.ssh/id_rsa.pub -inform PEM -pubin -outform DER -out ~/.ssh/id_rsa.pub.der
Run Code Online (Sandbox Code Playgroud)
不幸的是,这给出了以下错误:
unable to load Public Key
139946985690784:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: PUBLIC KEY
Run Code Online (Sandbox Code Playgroud)
该文件~/.ssh/id_rsa.pub包含一个公钥;cat ~/.ssh/id_rsa.pub给出:
ssh-rsa ...... user@machine
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我希望能够使用
ssh user@host
没有-i identity_rsa_or_else_private_key_file. 配置中是否有某个地方ssh可以指出私钥所在的位置,以便ssh自动选择一个进行连接(这样我就不必键入了-i key_file)?
在使用parallel-ssh(和相关工具)执行任务时,我想使用受密码保护的 SSH 密钥。但是,我无法让它发挥作用。
所有关于 的文档都parallel-ssh表明我应该能够使用--askpass或-A做到这一点:
-A
--askpass
Prompt for a password and pass it to ssh. The password may be
used for either to unlock a key or for password authentication. The
password is transferred in a fairly secure manner (e.g., it will not
show up in argument lists). However, be aware that a root user on
your system could potentially intercept the password.
Run Code Online (Sandbox Code Playgroud)
但是,当我输入密钥的密码时,它不起作用:
$ parallel-ssh --hosts=machines --user=my_user --askpass \
--timeout=0 …Run Code Online (Sandbox Code Playgroud) 假设我有一组机器(这里称为客户的机器),只允许一小部分人(称为支持人员)通过 SSH 进入,每台机器只使用一个帐户(支持访问帐户)。
支持人员只能使用密钥登录客户的机器。此外,支持人员可以发展,因此离开支持人员的人不得登录任何客户机器。因此,员工被禁止读取用于登录客户机器的私钥。此外,禁止修改authorized_keys客户机器上的文件。
为了实现该配置,我想到了使用支持人员将登录的 SSH 代理(使用 LDAP 身份验证,但这是另一个问题)并且包含私钥。
问题是:如何让支持人员在无法读取的情况下使用 SSH 私钥?
我相信我必须在代理机器上创建一个以 root 身份运行的守护进程,它将接受用户的请求并为他们打开一个 SSH 会话,但我不知道该怎么做。有任何想法吗?
ssh ×9
security ×3
conversion ×1
cryptography ×1
openssh ×1
openssl ×1
parallel-ssh ×1
privileges ×1
ssh-agent ×1