标签: ssh-keys

如何使用 SELinux 策略限制对私有 ssh 密钥的访问?

我正在使用 Fedora 发行版 - 带有预装的 SELinux 策略。我想限制对~/.ssh文件夹中我的私钥的不安全访问- 以防止可能在我的帐户下运行的恶意软件泄漏。根工具包是不可能的。


更新 #1: 我想解决 Fedora 新手用户的企业问题 - 没有 USB 令牌等。他们可能使用非常弱的密码。如果只有root用户和 ssh 客户端程序可以访问私钥,那就没问题了。实际的人类用户不需要查看私钥 - 我不知道为任何人查看私钥的原因,即使是一次。


我怎样才能做到这一点?建议使用 SELinux。

security linux fedora selinux ssh-keys

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

如何以编程方式查找默认 ssh 密钥?

根据我的大部分经验,默认情况下,ssh将在 ~/.ssh/id_rsa(.pub) 中查找默认密钥对。

\n\n

有时,我尝试编写脚本来利用这个默认的关键位置,但最终我对其进行了硬编码(例如DEFAULT_KEY_LOCATION="${HOME}/.ssh/id_rsa"或类似的东西),我觉得这是一个 BadThing\xe2\x84\xa2。

\n\n

是否有任何环境变量或 ssh 工具的输出可以告诉我用户默认密钥的位置?

\n\n

例如,是否有类似的命令ssh-defaults --key-location或环境变量 $SSH_DEFAULT_KEY?

\n

ssh bash ssh-keys

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

为一个身份文件指定多个 SSH 签名证书

我希望为 SSH 身份验证实现签名证书。我已经按照这里的步骤操作,现在正在尝试弄清楚我将如何在我的系统上实现它。

例如,我们有两个环境:生产和测试;每个人都有自己的“用户密钥”来签署其他密钥。我希望能够控制谁可以访问每个环境,但我遇到的不便是允许一个用户使用相同的私钥访问两个环境。

从'-i identity_file'下'ssh'的手册页:

ssh 还将尝试从通过将 -cert.pub 附加到身份文件名获得的文件名中加载证书信息

这似乎意味着除了添加 .ssh/config 文件条目以使其使用正确的证书之外,我还必须拥有私钥的多个副本(只是名称不同)并相应地命名证书文件。

我的理解是,如果您在 .ssh/config 中指定多个 IdentityFile 条目,ssh 将尝试每个条目。但是,似乎没有选项(至少我在文档中找不到)来指定证书。

有没有办法在 .ssh/config 或包含要检查的证书列表的文件中指定证书文件(假定的 -cert.pub 除外)?

ssh ssh-keys

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

rsync + 公钥认证安全

我已经阅读了几篇如何使用 Rsync 和公钥身份验证自动备份文件的文章。它们都非常相似。我刚刚完成了所有设置,一切正常,但是...我刚刚发现一篇文章说它不安全。我做了以下事情:

  1. 在备份服务器上,我生成了公钥和私钥。
  2. 我将公钥复制到远程(原始)服务器目录:(/var/sites/.ssh文件authorized_keys)。该目录归"user12"
  3. 我在authorized_keys文件中添加了以下内容: from="BACKUP.SERVERS.IP.ADDRESS",command="/root/validate_rsync"
  4. 我创建了一个文件 /root/validate_rsync ,内容如下:

    #!/bin/sh
    echo $SSH_ORIGINAL_COMMAND >> /var/log/synchronize-log.log
    case "$SSH_ORIGINAL_COMMAND" in
    *\&*)
    echo "Rejected"
    ;;
    *\;*)
    echo "Rejected"
    ;;
    *\(*)
    echo "Rejected"
    ;;
    *\{*)
    echo "Rejected"
    ;;
    *\<*)
    echo "Rejected"
    ;;
    *\>*)
    echo "Rejected"
    ;;
    *\`*)
    echo "Rejected"
    ;;
    *\|*)
    echo "Rejected"
    ;;
    rsync\ --server*) 
    $SSH_ORIGINAL_COMMAND
    ;;
    *)
    echo "Rejected"
    ;;
    esac
    
    Run Code Online (Sandbox Code Playgroud)

我运行 rsync 命令:

rsync -avzp --del -e "ssh -p 2211" user12@ORIGINAL.SERVERS.IP:/var/sites/photos/ /var/sites/sync/photos
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:文件权限问题/root/validate_rsync。我将文件/root/validate_rsync …

rsync ssh-keys

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

在 puppet 中向用户添加两个或多个 SSH 密钥

我需要一种解决方案,以便能够向一个用户添加多个 SSH“密钥”。

class user {
  user { 'k':
    ensure => present,
    comment => 'bogo user',
    home => '/home/k',
    managehome => true
  }
  ssh_authorized_key { 'k_ssh':
  user => 'k',
  type => 'rsa',
  key => 'AAAAB3NzaC1yc2EAAAADAQABAAABAQDk656+4Ivl5MnFBSmQw+hnsd7DsueGbZ5HbVlzE8BvYxbwlWAO5DiVw2p1qae/WLJNJDDl7unZemLApR+YkKIL6HXbCUj8V8+KHqSyE9pshMiRj/Lh2lNhZQPFbE8cc6TNY3YVSeyKY0mw8Uj4MBGWnv62DWoO5QuM17CJrD6gH1VlkCqVt8c7jSd9ijmCume5QExwlUtMjl60ZyfbTRbz16aQJNKbqdeIGKA6rB97xet1cHNZ08cCd37GqtMyMiqYwgxxaG87y9DekotLQ9Zw12gyMVgaeGuihZfIV+F6HS1vKNjiL+av+zKxWPidSjlQf2qhthnaMnfPWGjjQfJ7',
  }
}
Run Code Online (Sandbox Code Playgroud)

puppet ssh-keys

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

使用 ssh 密钥时强制更改过期密码

我工作的环境中,我在多台 Linux 机器上拥有一个帐户,其中帐户和密码是独立管理的(没有活动目录/LDAP/等),并且密码每 30 天过期。因此,我认为使用 ssh 密钥管理我的身份验证会更容易。我可以使用我的 ssh 密钥进行身份验证。但是,我发现当我的密码过期时,当我尝试使用 ssh 密钥连接时,系统会提示我更改密码。这是正常行为吗?我认为使用密钥对的全部目的是绕过使用您的密码。难道只有当我使用密码登录时,系统才会提示我更改密码吗?

security ssh password-management ssh-keys

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

将已知密钥/指纹添加到 known_hosts 的好做法是什么

与此类似的问题有很多答案,但我似乎无法找到一个明确的答案。他们要么至少获取一次公钥,要么完全忽略密钥,要么直接写入 known_hosts 文件(暗示没有散列)

我有服务器的指纹和/或公钥。我想要一个 shell 命令将它添加到客户端的known_hosts文件中。这必须使用任何配置(散列/无散列)

此外,该脚本将从该服务器执行 git pull 操作,因此我不知道此时提供端口信息是否相关。请告诉我是不是。

谢谢。如果这已经得到回答并且我以某种方式错过了它,请随时为我指出正确的方向。

PS - 额外信息:我询问端口的原因之一是因为我做了以下操作但没有成功(我知道这是从主机获取我宁愿不这样做的密钥):

ssh-keygen -R my.awesome.host # hostname
ssh-keygen -R 1.2.3.4         # IP
ssh-keygen -R my.awesome.host,1.2.3.4
ssh-keyscan -H my.awesome.host,1.2.3.4 >> ~/.ssh/known_hosts
ssh-keyscan -H 1.2.3.4 >> ~/.ssh/known_hosts
ssh-keyscan -H my.awesome.host >> ~/.ssh/known_hosts
Run Code Online (Sandbox Code Playgroud)

但是当我 git clone (通过 ssh)时,我遇到了一个响亮的:

The authenticity of host '[my.awesome.host]:7999 ([1.2.3.4]:7999)' can't be established.
RSA key fingerprint is fi:ger:pr:in:ti:nf:or:ma:ti:on
Are you sure you want to continue connecting (yes/no)?
Run Code Online (Sandbox Code Playgroud)

ssh user@my.awesome.host没有提示我关于指纹。

linux ssh public-key ssh-keys

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

ECDSA 密钥指纹 - 看起来是 base64 编码,但字符太少

我已经设置了一个GitLab VM,并在其上创建了一个项目。现在我正在尝试使用我的 git 客户端从另一台机器连接到它(Git for Windows v2.7.1 ...也尝试升级到最新版本 2.15.1,但没有变化)。

在 Windows 机器上,我尝试:

git push -u origin --all
The authenticity of host 'localgit.local (10.1.2.3)' can't be established.
ECDSA key fingerprint is SHA256:twmcV7LjBtI9vUsDeFEHeH0lUcBAihWtGye0K9vHCrk.
Are you sure you want to continue connecting (yes/no)? no
Run Code Online (Sandbox Code Playgroud)

我选择“否”是因为当我在虚拟机上仔细检查时,我发现了不同的指纹:

ssh-keygen -lf /etc/ssh/ssh_host_ecdsa_key.pub
256 7e:e4:4e:7f:47:b0:41:75:2c:45:bd:be:f5:44:77:d7 /etc/ssh/ssh_host_ecdsa_key.pub (ECDSA)
Run Code Online (Sandbox Code Playgroud)

好的,它是十六进制格式,所以我将其转换为 base64,对吗?

hex: 7ee44e7f47b041752c45bdbef54477d7
base64: fuROf0ewQXUsRb2+9UR31w==
Run Code Online (Sandbox Code Playgroud)

好吧,这不匹配......如果我走另一条路并将该 base64 指纹转换为十六进制并看看它是什么样子怎么办?结果我不能,它是 43 个字符,并且 base64 字符串的长度必须是 4 的倍数。

关于我在这里缺少什么的任何想法?

git ssh-keys gitlab

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

如何使用证书颁发机构通过 SSH 提供临时访问权限?

我正在尝试使用 aws EC2 实例上的证书颁发机构通过 SSH 提供临时访问,但无法正确执行。您能否帮助指导如何实现这一目标?过程如下所述:

Step 1: Generate CA certificate on user's machine (currently doing for testing) : ssh-keygen -f ssh_ca

Step 2: Generate user's ssh keys using (on users machine): ssh-keygen
-f user_ssh_key

Step 3: Generate CA approved public key using user's public key: ssh-keygen -s ssh_ca -I host_name -h -n host_name -V +1d user_ssh_key.pub , this gives user_ssh_key-cert.pub (Public key which is signed)

Step 4: Copied ssh_ca.pub (CA pub key) and user_ssh_key ,user_ssh_key-cert.pub (user's pub and private …
Run Code Online (Sandbox Code Playgroud)

linux ssh linux-networking ssh-keys certificate-authority

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

在与 ssh 连接之前,如何将 .pem 私钥指纹条目添加到 known_hosts?

警告 -> 阅读此问题描述时请小心。在写这个问题时,我有一些不正确的假设。请务必阅读我的回答,解释我错在哪里!

我在 AWS 中有主机 A 作为 EC2 实例。

我是一个嵌入在 .PEM 文件中的私钥,我可以用它来托管带有 SSH 密钥 Z 的 A。如果我使用-l参数将它传递给 ssh 命令,并且如果我关闭了严格的主机检查,这会起作用-o StrictHostKeyChecking=no

即使我“知道”这是正确的主机,我也强烈希望保留严格的主机检查,因为我正在与 AWS 接口交互,从它们获取 ip/dns,并且我在我自己的小 VPC 世界中.

似乎提供指纹-> 主机映射的唯一方法是在known_hosts文件中提供它。

那是对的吗?

如果这是正确的,我如何获取嵌入在我从 AWS 获得的 .PEM 文件中的私钥,并为单个指纹构建正确的条目 -> 临时known_hosts文件的主机映射,我可以在登录时读取该文件EC2 实例?

我不想做的事

  • 使用ssh-keyscan. 所有这一切都是盲目地接受远程客户端的指纹,而不验证它是否与密钥匹配。我认为?
  • 关掉StrictHostKeyChecking。我想尽早建立良好的实践,我现在需要知道如何做到这一点,因为我将需要知道一般如何做到这一点。(this我的意思是如何根据我拥有的密钥使用 SSH 指纹来验证我正在连接的主机的身份。)
  • 乱搞ssh-add。我想将其写入一个易于锁定访问的文件,而不是将其放入正在运行的进程中。

编辑:奇怪的是,当我尝试从 pem 文件中提取指纹时,它与我在连接时看到的指纹不匹配,并提示我。

从 PEM 中提取指纹

bash-4.2$ ssh-keygen -l -E md5 -f ./blah.PEM
2048 MD5:be:b1:d7:e1:f0:0f:ce:41:60:fa:97:dc:b8:2c:ed:08 no comment (RSA)
bash-4.2$ …
Run Code Online (Sandbox Code Playgroud)

ssh ssh-keys

6
推荐指数
2
解决办法
2637
查看次数