标签 密钥 下的文章

什么是基于 SSH 密钥的认证?

众所周知,Secure Shell,又称 SSH,是允许你通过无安全网络(例如 Internet)和远程系统之间安全访问/通信的加密网络协议。无论何时使用 SSH 在无安全网络上发送数据,它都会在源系统上自动地被加密,并且在目的系统上解密。SSH 提供了四种加密方式,基于密码认证基于密钥认证基于主机认证键盘认证。最常用的认证方式是基于密码认证和基于密钥认证。

在基于密码认证中,你需要的仅仅是远程系统上用户的密码。如果你知道远程用户的密码,你可以使用 ssh user@remote-system-name 访问各自的系统。另一方面,在基于密钥认证中,为了通过 SSH 通信,你需要生成 SSH 密钥对,并且为远程系统上传 SSH 公钥。每个 SSH 密钥对由私钥与公钥组成。私钥应该保存在客户系统上,公钥应该上传给远程系统。你不应该将私钥透露给任何人。希望你已经对 SSH 和它的认证方式有了基本的概念。

这篇教程,我们将讨论如何在 Linux 上配置基于密钥认证的 SSH。

在 Linux 上配置基于密钥认证的 SSH

为方便演示,我将使用 Arch Linux 为本地系统,Ubuntu 18.04 LTS 为远程系统。

本地系统详情:

  • OS: Arch Linux Desktop
  • IP address: 192.168.225.37/24

远程系统详情:

  • OS: Ubuntu 18.04 LTS Server
  • IP address: 192.168.225.22/24

本地系统配置

就像我之前所说,在基于密钥认证的方法中,想要通过 SSH 访问远程系统,需要将公钥上传到远程系统。公钥通常会被保存在远程系统的一个 ~/.ssh/authorized_keys 文件中。

注意事项:不要使用 root 用户生成密钥对,这样只有 root 用户才可以使用。使用普通用户创建密钥对。

现在,让我们在本地系统上创建一个 SSH 密钥对。只需要在客户端系统上运行下面的命令。

$ ssh-keygen

上面的命令将会创建一个 2048 位的 RSA 密钥对。你需要输入两次密码。更重要的是,记住你的密码。后面将会用到它。

样例输出

Generating public/private rsa key pair.
Enter file in which to save the key (/home/sk/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sk/.ssh/id_rsa.
Your public key has been saved in /home/sk/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:wYOgvdkBgMFydTMCUI3qZaUxvjs+p2287Tn4uaZ5KyE [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+=+*= + |
|o.o=.* = |
|.oo * o + |
|. = + . o |
|. o + . S |
| . E . |
| + o |
| +.*o+o |
| .o*=OO+ |
+----[SHA256]-----+

如果你已经创建了密钥对,你将看到以下信息。输入 y 就会覆盖已存在的密钥。

/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

请注意密码是可选的。如果你输入了密码,那么每次通过 SSH 访问远程系统时都要求输入密码,除非你使用了 SSH 代理保存了密码。如果你不想要密码(虽然不安全),简单地敲两次回车。不过,我建议你使用密码。从安全的角度来看,使用无密码的 ssh 密钥对不是什么好主意。这种方式应该限定在特殊的情况下使用,例如,没有用户介入的服务访问远程系统。(例如,用 rsync 远程备份……)

如果你已经在个人文件 ~/.ssh/id_rsa 中有了无密码的密钥,但想要更新为带密码的密钥。使用下面的命令:

$ ssh-keygen -p -f ~/.ssh/id_rsa

样例输出

Enter new passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved with the new passphrase.

现在,我们已经在本地系统上创建了密钥对。接下来,使用下面的命令将 SSH 公钥拷贝到你的远程 SSH 服务端上。

$ ssh-copy-id [email protected]

在这里,我把本地(Arch Linux)系统上的公钥拷贝到了远程系统(Ubuntu 18.04 LTS)上。从技术上讲,上面的命令会把本地系统 ~/.ssh/id_rsa.pub 文件中的内容拷贝到远程系统 ~/.ssh/authorized_keys 中。明白了吗?非常棒。

输入 yes 来继续连接你的远程 SSH 服务端。接着,输入远程系统用户 sk 的密码。

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

如果你已经拷贝了密钥,但想要替换为新的密码,使用 -f 选项覆盖已有的密钥。

$ ssh-copy-id -f [email protected]

我们现在已经成功地将本地系统的 SSH 公钥添加进了远程系统。现在,让我们在远程系统上完全禁用掉基于密码认证的方式。因为我们已经配置了密钥认证,因此不再需要密码认证了。

在远程系统上禁用基于密码认证的 SSH

你需要在 root 用户或者 sudo 执行下面的命令。

禁用基于密码的认证,你需要在远程系统的终端里编辑 /etc/ssh/sshd_config 配置文件:

$ sudo vi /etc/ssh/sshd_config

找到下面这一行,去掉注释然后将值设为 no

PasswordAuthentication no

重启 ssh 服务让它生效。

$ sudo systemctl restart sshd

从本地系统访问远程系统

在本地系统上使用命令 SSH 你的远程服务端:

$ ssh [email protected]

输入密码。

样例输出

Enter passphrase for key '/home/sk/.ssh/id_rsa':
Last login: Mon Jul 9 09:59:51 2018 from 192.168.225.37
sk@ubuntuserver:~$

现在,你就能 SSH 你的远程系统了。如你所见,我们已经使用之前 ssh-keygen 创建的密码登录进了远程系统的账户,而不是使用当前账户实际的密码。

如果你试图从其它客户端系统 ssh(远程系统),你将会得到这条错误信息。比如,我试图通过命令从 CentOS SSH 访问 Ubuntu 系统:

样例输出

The authenticity of host '192.168.225.22 (192.168.225.22)' can't be established.
ECDSA key fingerprint is 67:fc:69:b7:d4:4d:fd:6e:38:44:a8:2f:08:ed:f4:21.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.225.22' (ECDSA) to the list of known hosts.
Permission denied (publickey).

如你所见,除了 CentOS(LCTT 译注:根据上文,这里应该是 Arch)系统外,我不能通过其它任何系统 SSH 访问我的远程系统 Ubuntu 18.04。

为 SSH 服务端添加更多客户端系统的密钥

这点非常重要。就像我说过的那样,除非你配置过(在之前的例子中,是 Ubuntu),否则你不能通过 SSH 访问到远程系统。如果我希望给更多客户端予以权限去访问远程 SSH 服务端,我应该怎么做?很简单。你需要在所有的客户端系统上生成 SSH 密钥对并且手动拷贝 ssh 公钥到想要通过 ssh 访问的远程服务端上。

在客户端系统上创建 SSH 密钥对,运行:

$ ssh-keygen

输入两次密码。现在,ssh 密钥对已经生成了。你需要手动把公钥(不是私钥)拷贝到远程服务端上。

使用以下命令查看公钥:

$ cat ~/.ssh/id_rsa.pub

应该会输出类似下面的信息:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCt3a9tIeK5rPx9p74/KjEVXa6/OODyRp0QLS/sLp8W6iTxFL+UgALZlupVNgFjvRR5luJ9dLHWwc+d4umavAWz708e6Na9ftEPQtC28rTFsHwmyLKvLkzcGkC5+A0NdbiDZLaK3K3wgq1jzYYKT5k+IaNS6vtrx5LDObcPNPEBDt4vTixQ7GZHrDUUk5586IKeFfwMCWguHveTN7ykmo2EyL2rV7TmYq+eY2ZqqcsoK0fzXMK7iifGXVmuqTkAmZLGZK8a3bPb6VZd7KFum3Ezbu4BXZGp7FVhnOMgau2kYeOH/ItKPzpCAn+dg3NAAziCCxnII9b4nSSGz3mMY4Y7 ostechnix@centosserver

拷贝所有内容(通过 USB 驱动器或者其它任何介质),然后去你的远程服务端的终端,像下面那样,在 $HOME 下创建文件夹叫做 .ssh。你需要以 root 身份执行命令(注:不一定需要 root)。

$ mkdir -p ~/.ssh

现在,将前几步创建的客户端系统的公钥添加进文件中。

echo {Your_public_key_contents_here} >> ~/.ssh/authorized_keys

在远程系统上重启 ssh 服务。现在,你可以在新的客户端上 SSH 远程服务端了。

如果觉得手动添加 ssh 公钥有些困难,在远程系统上暂时性启用密码认证,使用 ssh-copy-id 命令从本地系统上拷贝密钥,最后禁用密码认证。

推荐阅读:

好了,到此为止。基于密钥认证的 SSH 提供了一层防止暴力破解的额外保护。如你所见,配置密钥认证一点也不困难。这是一个非常好的方法让你的 Linux 服务端安全可靠。

不久我会带来另一篇有用的文章。请继续关注 OSTechNix。

干杯!


via: https://www.ostechnix.com/configure-ssh-key-based-authentication-linux/

作者:SK 选题:lujun9972 译者:LuuMing 校对:pityonline

本文由 LCTT 原创编译,Linux中国 荣誉推出

 title=

学习使用 Seahorse GUI 工具去管理 PGP 和 SSH 密钥。

安全即内心的平静。毕竟,安全是许多用户迁移到 Linux 的最大理由。但是为什么要止步于仅仅采用该平台,你还可以采用多种方法和技术去确保你的桌面或者服务器系统的安全。

其中一项技术涉及到密钥 —— 用在 PGP 和 SSH 中。PGP 密钥允许你去加密和解密电子邮件和文件,而 SSH 密钥允许你使用一个额外的安全层去登入服务器。

当然,你可以通过命令行接口(CLI)来管理这些密钥,但是,如果你使用一个华丽的 GUI 桌面环境呢?经验丰富的 Linux 用户可能对于脱离命令行来工作感到很不适应,但是,并不是所有用户都具备与他们相同的技术和水平,因此,使用 GUI 吧!

在本文中,我将带你探索如何使用 Seahorse GUI 工具来管理 PGP 和 SSH 密钥。Seahorse 有非常强大的功能,它可以:

  • 加密/解密/签名文件和文本。
  • 管理你的密钥和密钥对。
  • 同步你的密钥和密钥对到远程密钥服务器。
  • 签名和发布密钥。
  • 缓存你的密码。
  • 备份密钥和密钥对。
  • 在任何一个 GDK 支持的格式中添加一个图像作为一个 OpenPGP photo ID。
  • 创建、配置、和缓存 SSH 密钥。

对于那些不了解 Seahorse 的人来说,它是一个管理 GNOME 钥匙环中的加密密钥和密码的 GNOME 应用程序。不用担心,Seahorse 可以安装在许多的桌面环境上。并且由于 Seahorse 可以在标准的仓库中找到,你可以打开你的桌面应用商店(比如,Ubuntu Software 或者 Elementary OS AppCenter)去安装它。你可以在你的发行版的应用商店中点击去安装它。安装完成后,你就可以去使用这个很方便的工具了。

我们开始去使用它吧。

PGP 密钥

我们需要做的第一件事情就是生成一个新的 PGP 密钥。正如前面所述,PGP 密钥可以用于加密电子邮件(通过一些工具,像 ThunderbirdEnigmail 或者使用 Evolution 内置的加密功能)。PGP 密钥也可以用于加密文件。任何人都可以使用你的公钥加密电子邮件和文件发给你(LCTT 译注:原文此处“加密”误作“解密”)。没有 PGP 密钥是做不到的。

使用 Seahorse 创建一个新的 PGP 密钥对是非常简单的。以下是操作步骤:

  1. 打开 Seahorse 应用程序
  2. 在主面板的左上角点击 “+” 按钮
  3. 选择 “ PGP 密钥 PGP Key ”(如图 1 )
  4. 点击 “ 继续 Continue
  5. 当提示时,输入完整的名字和电子邮件地址
  6. 点击 “ 创建 Create

 title=

图 1:使用 Seahorse 创建一个 PGP 密钥。

在创建你的 PGP 密钥期间,你可以点击 “ 高级密钥选项 Advanced key options ” 展开选项部分,在那里你可以为密钥添加注释信息、加密类型、密钥长度、以及过期时间(如图 2)。

 title=

图 2:PGP 密钥高级选项

增加注释部分可以很方便帮你记住密钥的用途(或者其它的信息)。

要使用你创建的 PGP,可在密钥列表中双击它。在结果窗口中,点击 “ 名字 Names ” 和 “ 签名 Signatures ” 选项卡。在这个窗口中,你可以签名你的密钥(表示你信任这个密钥)。点击 “ 签名 Sign ” 按钮然后(在结果窗口中)指出 “ 你是如何仔细的检查这个密钥的? how carefully you’ve checked this key? ” 和 “ 其他人将如何看到该签名 how others will see the signature ”(如图 3)。

 title=

图 3:签名一个密钥表示信任级别。

当你处理其它人的密钥时,密钥签名是非常重要的,因为一个签名的密钥将确保你的系统(和你)做了这项签名工作并且完全信任这个重要的密钥。

谈到导入的密钥,Seahorse 可以允许你很容易地去导入其他人的公钥文件(这个文件以 .asc 为后缀)。你的系统上有其他人的公钥,意味着你可以加密发送给他们的电子邮件和文件(LCTT 译注:原文将“加密”误作“解密”)。然而,Seahorse 在很长的一段时间内都存在一个 已知的 bug。这个问题是,Seahorse 导入使用 GPG 版本 1,但是显示的是 GPG 版本 2。这意味着,在这个存在了很长时间的 bug 被修复之前,导入公钥总是失败的。如果你想导入一个公钥文件到 Seahorse 中,你只能去使用命令行。因此,如果有人发送给你一个文件 olivia.asc,你想去导入到 Seahorse 中使用它,你将只能运行命令 gpg2 --import olivia.asc。那个密钥将出现在 GnuPG 密钥列表中。你可以打开该密钥,点击 “ 我信任签名 I trust signatures ” 按钮,然后在问题 “ 你是如何仔细地检查该密钥的? how carefully you’ve checked the key ” 中,点击 “ 签名这个密钥 Sign this key ” 按钮去签名。

SSH 密钥

现在我们来谈谈我认为 Seahorse 中最重要的一个方面 — SSH 密钥。Seahorse 不仅可以很容易地生成一个 SSH 密钥,而且它也可以很容易地将生成的密钥发送到服务器上,因此,你可以享受到 SSH 密钥验证的好处。下面是如何生成一个新的密钥以及如何导出它到一个远程服务器上。

  1. 打开 Seahorse 应用程序
  2. 点击 “+” 按钮
  3. 选择 “Secure Shell Key”
  4. 点击 “Continue”
  5. 提供一个密钥描述信息
  6. 点击 “Set Up” 去创建密钥
  7. 输入密钥的验证密钥
  8. 点击 OK
  9. 输入远程服务器地址和服务器上的登录名(如图 4)
  10. 输入远程用户的密码
  11. 点击 OK

 title=

图 4:上传一个 SSH 密钥到远程服务器。

新密钥将上传到远程服务器上以备使用。如果你的服务器已经设置为使用 SSH 密钥验证,那就一切就绪了。

需要注意的是,在创建一个 SSH 密钥期间,你可以点击 “ 高级密钥选项 Advanced key options ”去展开它,配置加密类型和密钥长度(如图 5)。

 title=

图 5:高级 SSH 密钥选项。

Linux 新手必备

任何 Linux 新手用户都可以很快熟悉使用 Seahorse。即便是它有缺陷,Seahorse 仍然是为你准备的一个极其方便的工具。有时候,你可能希望(或者需要)去加密或者解密一个电子邮件/文件,或者为使用 SSH 验证来管理 SSH 密钥。如果你想去这样做而不希望使用命令行,那么,Seahorse 将是非常适合你的工具。

通过来自 Linux 基金会和 edX 的 "Linux 入门" 免费课程学习更多 Linux 的知识。


via: https://www.linux.com/learn/intro-to-linux/2018/2/how-manage-pgp-and-ssh-keys-seahorse

作者:JACK WALLEN 译者:qhwdw 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

存储 SSH 的加密秘钥和记住密码一直是一个让人头疼的问题。但是不幸的是,在当前这个充满了恶意黑客和攻击的世界中,基本的安全预防是必不可少的。对于许多普通用户来说,大多数人只能是记住密码,也可能寻找到一个好程序去存储密码,正如我们提醒这些用户不要在每个网站采用相同的密码。但是对于在各个 IT 领域的人们,我们需要将这个事情提高一个层面。我们需要使用像 SSH 密钥这样的加密秘钥,而不只是密码。

设想一个场景:我有一个运行在云上的服务器,用作我的主 git 库。我有很多台工作电脑,所有这些电脑都需要登录到这个中央服务器去做 push 与 pull 操作。这里我设置 git 使用 SSH。当 git 使用 SSH 时,git 实际上是以 SSH 的方式登录到服务器,就好像你通过 SSH 命令打开一个服务器的命令行一样。为了把这些配置好,我在我的 .ssh 目录下创建一个配置文件,其中包含一个有服务器名字、主机名、登录用户、密钥文件路径等信息的主机项。之后我可以通过输入如下命令来测试这个配置是否正确。

ssh gitserver

很快我就可以访问到服务器的 bash shell。现在我可以配置 git 使用相同配置项以及存储的密钥来登录服务器。这很简单,只是有一个问题:对于每一个我要用它登录服务器的电脑,我都需要有一个密钥文件,那意味着需要密钥文件会放在很多地方。我会在当前这台电脑上存储这些密钥文件,我的其他电脑也都需要存储这些。就像那些有特别多的密码的用户一样,我们这些 IT 人员也被这些特别多的密钥文件淹没。怎么办呢?

清理

在我们开始帮助你管理密钥之前,你需要有一些密钥应该怎么使用的基础知识,以及明白我们下面的提问的意义所在。同时,有个前提,也是最重要的,你应该知道你的公钥和私钥该放在哪里。然后假设你应该知道:

  1. 公钥和私钥之间的差异;
  2. 为什么你不可以从公钥生成私钥,但是反之则可以?
  3. authorized_keys 文件的目的以及里面包含什么内容;
  4. 如何使用私钥去登录一个你的对应公钥存储在其上的 authorized_keys 文件中的服务器。

这里有一个例子。当你在亚马逊的网络服务上创建一个云服务器,你必须提供一个用于连接你的服务器的 SSH 密钥。每个密钥都有一个公开的部分(公钥)和私密的部分(私钥)。你要想让你的服务器安全,乍看之下你可能应该将你的私钥放到服务器上,同时你自己带着公钥。毕竟,你不想你的服务器被公开访问,对吗?但是实际上的做法正好是相反的。

你应该把自己的公钥放到 AWS 服务器,同时你持有用于登录服务器的私钥。你需要保护好私钥,并让它处于你的控制之中,而不是放在一些远程服务器上,正如上图中所示。

原因如下:如果公钥被其他人知道了,它们不能用于登录服务器,因为他们没有私钥。进一步说,如果有人成功攻入你的服务器,他们所能找到的只是公钥,他们不可以从公钥生成私钥。同时,如果你在其他的服务器上使用了相同的公钥,他们不可以使用它去登录别的电脑。

这就是为什么你要把你自己的公钥放到你的服务器上以便通过 SSH 登录这些服务器。你持有这些私钥,不要让这些私钥脱离你的控制。

但是还有一点麻烦。试想一下我 git 服务器的例子。我需要做一些抉择。有时我登录架设在别的地方的开发服务器,而在开发服务器上,我需要连接我的 git 服务器。如何使我的开发服务器连接 git 服务器?显然是通过使用私钥,但这样就会有问题。在该场景中,需要我把私钥放置到一个架设在别的地方的服务器上,这相当危险。

一个进一步的场景:如果我要使用一个密钥去登录许多的服务器,怎么办?如果一个入侵者得到这个私钥,这个人就能用这个私钥得到整个服务器网络的权限,这可能带来一些严重的破坏,这非常糟糕。

同时,这也带来了另外一个问题,我真的应该在这些其他服务器上使用相同的密钥吗?因为我刚才描述的,那会非常危险的。

最后,这听起来有些混乱,但是确实有一些简单的解决方案。让我们有条理地组织一下。

(注意,除了登录服务器,还有很多地方需要私钥密钥,但是我提出的这个场景可以向你展示当你使用密钥时你所面对的问题。)

常规口令

当你创建你的密钥时,你可以选择是否包含一个密钥使用时的口令。有了这个口令,私钥文件本身就会被口令所加密。例如,如果你有一个公钥存储在服务器上,同时你使用私钥去登录服务器的时候,你会被提示输入该口令。没有口令,这个密钥是无法使用的。或者你也可以配置你的密钥不需要口令,然后只需要密钥文件就可以登录服务器了。

一般来说,不使用口令对于用户来说是更方便的,但是在很多情况下我强烈建议使用口令,原因是,如果私钥文件被偷了,偷密钥的人仍然不可以使用它,除非他或者她可以找到口令。在理论上,这个将节省你很多时间,因为你可以在攻击者发现口令之前,从服务器上删除公钥文件,从而保护你的系统。当然还有一些使用口令的其它原因,但是在很多场合这个原因对我来说更有价值。(举一个例子,我的 Android 平板上有 VNC 软件。平板上有我的密钥。如果我的平板被偷了之后,我会马上从服务器上删除公钥,使得它的私钥没有作用,无论有没有口令。)但是在一些情况下我不使用口令,是因为我正在登录的服务器上没有什么有价值的数据,这取决于情境。

服务器基础设施

你如何设计自己服务器的基础设施将会影响到你如何管理你的密钥。例如,如果你有很多用户登录,你将需要决定每个用户是否需要一个单独的密钥。(一般来说,应该如此;你不会想在用户之间共享私钥。那样当一个用户离开组织或者失去信任时,你可以删除那个用户的公钥,而不需要必须给其他人生成新的密钥。相似地,通过共享密钥,他们能以其他人的身份登录,这就更糟糕了。)但是另外一个问题是你如何配置你的服务器。举例来说,你是否使用像 Puppet 这样工具配置大量的服务器?你是否基于你自己的镜像创建大量的服务器?当你复制你的服务器,是否每一个的密钥都一样?不同的云服务器软件允许你配置如何选择;你可以让这些服务器使用相同的密钥,也可以给每一个服务器生成一个新的密钥。

如果你在操作这些复制的服务器,如果用户需要使用不同的密钥登录两个不同但是大部分都一样的系统,它可能导致混淆。但是另一方面,服务器共享相同的密钥会有安全风险。或者,第三,如果你的密钥有除了登录之外的需要(比如挂载加密的驱动),那么你会在很多地方需要相同的密钥。正如你所看到的,你是否需要在不同的服务器上使用相同的密钥不是我能为你做的决定;这其中有权衡,你需要自己去决定什么是最好的。

最终,你可能会有:

  • 需要登录的多个服务器
  • 多个用户登录到不同的服务器,每个都有自己的密钥
  • 每个用户使用多个密钥登录到不同的服务器

(如果你正在别的情况下使用密钥,这个同样的普适理论也能应用于如何使用密钥,需要多少密钥,它们是否共享,你如何处理公私钥等方面。)

安全方法

了解你的基础设施和特有的情况,你需要组合一个密钥管理方案,它会指导你如何去分发和存储你的密钥。比如,正如我之前提到的,如果我的平板被偷了,我会从我服务器上删除公钥,我希望这在平板在用于访问服务器之前完成。同样的,我会在我的整体计划中考虑以下内容:

  1. 私钥可以放在移动设备上,但是必须包含口令;
  2. 必须有一个可以快速地从服务器上删除公钥的方法。

在你的情况中,你可能决定你不想在自己经常登录的系统上使用口令;比如,这个系统可能是一个开发者一天登录多次的测试机器。这没有问题,但是你需要调整一点你的规则。你可以添加一条规则:不可以通过移动设备登录该机器。换句话说,你需要根据自己的状况构建你的准则,不要假设某个方案放之四海而皆准。

软件

至于软件,令人吃惊的是,现实世界中并没有很多好的、可靠的存储和管理私钥的软件解决方案。但是应该有吗?考虑下这个,如果你有一个程序存储你所有服务器的全部密钥,并且这个程序被一个快捷的密钥锁住,那么你的密钥就真的安全了吗?或者类似的,如果你的密钥被放置在你的硬盘上,用于 SSH 程序快速访问,密钥管理软件是否真正提供了任何保护吗?

但是对于整体基础设施和创建/管理公钥来说,有许多的解决方案。我已经提到了 Puppet,在 Puppet 的世界中,你可以创建模块以不同的方式管理你的服务器。这个想法是服务器是动态的,而且不需要精确地复制彼此。这里有一个聪明的方法,在不同的服务器上使用相同的密钥,但是对于每一个用户使用不同的 Puppet 模块。这个方案可能适合你,也可能不适合你。

或者,另一个选择就是完全换个不同的档位。在 Docker 的世界中,你可以采取一个不同的方式,正如关于 SSH 和 Docker 博客所描述的那样。

但是怎么样管理私钥?如果你搜索过的话,你无法找到很多可以选择的软件,原因我之前提到过;私钥存放在你的硬盘上,一个管理软件可能无法提到更多额外的安全。但是我使用这种方法来管理我的密钥:

首先,我的 .ssh/config 文件中有很多的主机项。我要登录的都有一个主机项,但是有时我对于一个单独的主机有不止一项。如果我有很多登录方式,就会出现这种情况。对于放置我的 git 库的服务器来说,我有两个不同的登录项;一个限制于 git,另一个用于一般用途的 bash 访问。这个为 git 设置的登录选项在机器上有极大的限制。还记得我之前说的我存储在远程开发机器上的 git 密钥吗?好了。虽然这些密钥可以登录到我其中一个服务器,但是使用的账号是被严格限制的。

其次,大部分的私钥都包含口令。(对于需要多次输入口令的情况,考虑使用 ssh-agent。)

再次,我有一些我想要更加小心地保护的服务器,我不会把这些主机项放在我的 host 文件中。这更加接近于社会工程方面,密钥文件还在,但是可能需要攻击者花费更长的时间去找到这个密钥文件,分析出来它们对应的机器。在这种情况下,我就需要手动打出来一条长长的 SSH 命令。(没那么可怕。)

同时你可以看出来我没有使用任何特别的软件去管理这些私钥。

无放之四海而皆准的方案

我们偶尔会在 linux.com 收到一些问题,询问管理密钥的好软件的建议。但是退一步看,这个问题事实上需要重新思考,因为没有一个普适的解决方案。你问的问题应该基于你自己的情景。你是否简单地尝试找到一个位置去存储你的密钥文件?你是否寻找一个方法去管理多用户问题,其中每个人都需要将他们自己的公钥插入到 authorized_keys 文件中?

通过这篇文章,我已经囊括了这方面的基础知识,希望到此你明白如何管理你的密钥,并且,只有当你问出了正确的问题,无论你寻找任何软件(甚至你需要另外的软件),它都会出现。


via: http://www.linux.com/learn/tutorials/838235-how-to-best-manage-encryption-keys-on-linux

作者:Jeff Cogswell 译者:mudongliang 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

大家好,今天我来向大家介绍如何在 Ubuntu12.04 上设置 SSH 的无密码登录功能。仅在工作站上有正确的(公私)密钥对以供匹配时SSH服务端才会允许你登录,反之访问将不会被允许。

正常情况下,我们需要连上SSH的控制台输入用户名及其密码才行。如果两者全部正确,我们就可以访问,反之访问被服务端拒绝。不过相比而言还有一种比用密码更安全的登录方式,我们可以在登录SSH时通过加密密钥进行无密码登录。

如果你想启用这个安全的方式,我们只需简单的禁用密码登录并只允许加密密钥登录即可。使用这种方式时,客户端计算机上会产生一对私钥和公钥。接着客户端得把公钥上传到SSH服务端的authorized\_key文件中去。在授予访问前,服务器及客户端电脑会校验这个密钥对。如果服务器上的公钥与客服端提交的私钥匹配则授予访问权限,否则访问被拒绝。

这是认证到SSH服务器的非常安全的一种做法,如果你想为单一的SSH用户登录实现安全登录,这也是备受推崇的方式。这里快速的过一遍如何启用无密码登录SSH的配置过程。

1.安装Openssh服务端

首先,我们需要更新我们的本地库索引。所以如下所见,我们需要先输入“apt-get update”

$ sudo apt-get update

Updating Repo Index

现在我们可以通过以下命令安装openssh-server:

$ sudo apt-get install openssh-server

Installing openssh server

2. 开启openssh服务

在OpenSSH已经成功安装在Ubuntu14.04操作系统上了之后,我们要启动OpenSSH的服务。以下命令让你启动/开启服务。

$ sudo service ssh start

$ sudo /etc/init.d/ssh start

3. 配置密钥对

在我们安装并启动了OpenSSH服务以后。现在终于到了要我们搞定公私钥对的时候了,在终端中运行以下命令:

$ ssh-keygen -t rsa

在运行完以上命令了以后,我们需要回答一系列的问题。首先选择保存密钥的路径,按回车将会选择默认路径即家目录的一个隐藏的.ssh文件夹。下一个提示是请输入口令提醒。我个人将此留空(直接回车)。之后密钥对就会创建,大功告成。

Generating Key Pair

在密钥对生成以后,我们需要将客户端上的公钥复制到SSH服务端或者主机,来创建对客户端的信任关系。运行以下命令复制客户端的公钥到服务端。

$ ssh-copy-id user@ip_address

在公钥上传之后,我们现在可以禁用通过密码登陆SSH的方式了。为此,我们需要通过以下命令用文本编辑器打开/etc/ssh/ssh\_config

$ sudo nano /etc/ssh/sshd_config

现在,我们需要按照下图所示去掉几行注释并进行一些赋值。

Configuring sshd Config

4. 重启SSH服务

最后,在我们配置完SSH服务端后,为了使改动生效我们需要重启SSH服务。在终端或控制台运行以下命令重启。

$ sudo service ssh restart

$ sudo /etc/init.d/ssh restart

Restarting ssh

现在,我们可以试试不用密码仅用密钥对的方式登录ssh服务端了。

总结

太好了!我们成功的配置了无密码登录SSH。使用加密密钥对进行SSH服务器认证是非常安全的一种做法,如果你想为SSH的单一用户登录实施安全的认证这也是备受推崇的方式。所以,如果你还有什么问题或建议,请在意见框中向我们反馈。很欣慰你能读完,希望你能喜欢加密的SSH安全登录 :-)


via: http://linoxide.com/ubuntu-how-to/setup-passwordless-ssh-logon-ubuntu-14-04/

作者:Arun Pyasi 译者:martin2011qi 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

问题:我在配置一个需要访问我的亚马逊AWS帐号的应用时被要求提供AWS访问密钥ID秘密访问密钥,我怎样创建一个新的AWS访问密钥呢?

亚马逊AWS安全凭证用于验证你以及授权任何第三方应用访问你的AWS帐号,有各种不同的AWS安全凭证可用,如密码、访问密钥、多因素身份验证、X.509证书等。

如果你想要创建新的访问密钥(访问密钥ID和秘密访问密钥),请按一下步骤进行。

首先,登录到AWS控制台

从顶部栏选择“安全凭证”菜单(图中红色方框所示)。

在下一页中,选择“访问密钥(访问密钥ID和秘密访问密钥)”选项(图中红色方框所示)。

在下一页中,你将看到一个现存访问密钥ID列表(如果有的话)。注意,你不能恢复现存访问密钥ID的“秘密访问密钥”。出于安全的原因,秘密访问密钥只能在你创建新访问密钥时才可见。

点击“创建新访问密钥”(见图示),将会立即创建一个新的访问密钥ID和密码访问密钥对。

要么下载一个包含有新访问密钥的密钥文件,要么复制并粘贴新访问密钥信息。再次提请牢记,一旦你关闭该窗口,秘密访问密钥将不再可用,除非你下载一个密钥文件。

多用户AWS帐号

如果你是作为公司身份创建的帐号,多个雇员共享这一公司帐号,你可能想要使用身份和访问管理(IAM)来创建并管理他们的访问密钥。

IAM是一个web服务,它允许一个公司管理多个用户及其与一个AWS帐号关联的安全凭证。使用IAM,多个用户可以作为不同身份登入单一的AWS帐号,并管理他们的安全凭证而不会相互干预对方的密钥。

要管理IAM用户,点击“安全凭证”页面上的“用户”菜单(见图示)。

然后,你就可以创建一个新的IAM用户并管理他们的安全凭证,比如访问密钥之类的东西。


via: http://ask.xmodulo.com/create-amazon-aws-access-key.html

译者:GOLinux 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出

你可能已经知道如果你想要加锁自己的WIFI无线网络,你最好选择WPA加密方式,因为WEP加密很容易被人破解。但是,你知道有多么的容易么?下面我们来看看吧。

注意:此帖是验证如何破解很少使用而陈旧的WEP加密协议。如果你希望破解的网络采用了更受欢迎的WPA加密,请看这篇:如何使用Reaver破解Wi-Fi网络的WPA密码

今天我们来看看如何一步一步的破解采用WEP加密方法加密的WIFI网络。但是,有言在先:知识是一种力量,但是力量并不意味着你应该成为一个混球或者做任何违法的事。知道如何挑选一把锁具并不会让你成为一个贼。请将此帖用于教育性质或者概念验证性试验。

关于如何使用这个方案破解WEP加密的教程在互联网上有很多。认认真真的谷歌下,这个并不能被称作新闻。但是,让人惊讶的是如笔者一般的只有很少的网络经验的菜鸟,也可以使用一些免费的软件和廉价的WIFI适配器来完成这个做破解。下面就来看看吧!

你需要些什么

除非你是一个电脑网络安全的忍者,否则你不太可能具有完成实验的所有工具。以下是你需要的:

  • 一个兼容的无线适配器.这是最主要的需求。你需要一个无线适配器,能用来完成包注入,你的电脑很可能不具备这个功能。在和我的安全专家邻居讨论了以后,我从亚马逊上花了50美元购买了一个Alfa AWUS050NH适配器,图片如上。更新:别学我,其实应该买Alfa AWUS036H而不是US050NH。视频里的哥们儿用$12美金在Ebay上买了一个解调器(同时可以选择把自己的路由器卖掉)。网上有很多可以兼容aircrack的适配器
  • 一个BackTrack Live CD. 我们已经提供了一个完整的BackTrack 3的安装使用教程,Linux Live CD可以让你完成所有的安全测试和测试工作。请自行下载一个CD镜像,然后刻录或者从VMware中启动它。
  • 一个靠近的WEP加密的WIFI网络. 信号需要足够的强,理想的情况下最好有用户正在使用、连接和断开设备。越多的人使用网络,你就可以的到更多的破解数据,这样你就更可能成功。
  • 使用命令行的耐心. 这里总共有10步,总共需要输入很长、很难懂的命令,然后等你的wifi网卡收集足够破解密码的数据。就像一个医生和一个急躁的病人说,要有点耐心。

破解WEP

为了破解WEP,你需要启动一个Konsole,它是BackTrack内置的命令行界面,它在任务栏的左下角,从左往右第二个图标。现在,输入命令吧。

第一步,运行下面的命令,获得你网卡列表:

airmon-ng

笔者只看见了一个ra0的结果。你的可能不一样;记录下这些内容(找个纸或者截图)。现在开始,更改替换掉命令中每一个包括(interface)的地方。

现在,运行下面的四个命令。看看截图里的输入结果。

airmon-ng stop (interface)
ifconfig (interface) down
macchanger —mac 00:11:22:33:44:55 (interface)
airmon-ng start (interface)

如果你没有获得像截图一样的结果,最可能的情况就是你的无线网卡不能在特殊破解模式下工作。如果你成功了,你应该已经成功的在你的无线网卡上伪造了一个新的MAC地址,00:11:22:33:44:55.

现在,开始使用的你网络接口,运行:(译者注:interface在范例中就是ra0)

airodump-ng (interface)

就可以看见你周围的wifi网络列表了。当你认准了你的目标后,按Ctrl+C结束列表。高亮你感兴趣的网络,同时记录下两样数据:它的BSSID和它的Channel(讯道,标签为CH的那列),就像下面的截图。很明显你想要破解的网络需要是WEP加密的,而不是WPA或者其他加密方式。

就像我说的,按Ctrl+C来终止列表。(我需要重复一两次来找到我需要的网络)一旦你找到了你需要破解的网络,高亮BSSID然后复制它到你的剪切板来为将要输入的命令做准备。

现在我们需要观察你选中的目标网络,并捕捉信息存入一个文件里,运行如下命令:

airodump-ng -c (channel) -w (file name) —bssid (bssid) (interface)

其中,(channel),(bssid)就是你之前获取的那些信息。你可以使用Shift+Insert来将剪切板中的bssid信息粘贴到命令行中。随便给你的文件取个名字。我用的是“YoYo”,我破解的网络的名字。

你能够得到如截图中的窗口输出。就这么放着这个窗口。在前台新建一个konsole窗口,输入如下命令:

aireplay-ng -1 0 -a (bssid) -h 00:11:22:33:44:55 -e (essid) (interface)

这里的ESSID是接入点SSID的名字,例如我的就是YoYo。你希望能在运行后得到“Association successful”的结果。

你如果到了这一步,现在是时候运行下面的命令了:

aireplay-ng -3 -b (bssid) -h 00:11:22:33:44:55 (interface)

现在,我们创建了一个路由通路来更快的抓取数据,从而加快我们的破解过程。几分钟以后,前台的窗口会开始疯狂的读写数据包。(这时,我也不能用YoYo的网络在另一台机器上上网)这里,你可以喝杯Java牌儿咖啡,然后出去走走。一般来说,你需要收集到足够的数据后再运行你的破解程序。看着“#Data”列里的数据,你需要它在10,000以上。(图里的数据只有854)

这个过程可能需要一些时间,这取决于你的网络信号强度(截图中可以看到,我的信号强度低于-32DB,虽然YoYo的AP和我的适配器在同一间屋里)。等待直到包数据到达10K,因为在此之前破解过程不会成功。实际上,你可能需要超过10K,虽然他可能是大多数情况下都足够了。

一旦你收集了足够多的数据,就是见证奇迹的时刻了。启动第三个终端窗口,同时输入下面的命令来破解你收集到的数据:

aircrack-ng -b (bssid) (filename-01.cap)

这里的filename就是你在上面输入的文件名。你可以在自己的Home目录下看到。他应该是一个.cap后缀名的文件。

如果你没有足够的数据,破解可能失败,aircrack会告诉你获得更多的数据后重新尝试。如果成功了,你会看到如图结果:

WEP密钥会接着显示“KEY FOUND”。去掉引号,然后输入他就可以登录到目标网络了。

这个过程中的问题

通过这篇文章,我们可以证明想要破解WEP加密的网络对于任何一个具有硬件和软件人来说是如此简单的过程。我一直认为是这样的,但是不像下面视频里的伙计,这个过程中我遇到了很多的问题。实际上,你应该可以注意到最后一张截图和其他的不一样,因为它不是我的截图。虽然我破解的AP是我自己的AP,和我的Alfa在同一间屋子里,而且读取的信号强度一直在-30左右,但是数据的收集速度依然很缓慢,而在数据收集完成以前,BackTrack不能破解他。在尝试了各种方案(在我的MAC和PC上),我始终没能抓取到足够的数据量来破解密钥。

所以,这个过程在理论上是很简单的,实际上因为设备、到AP的距离却又因人而异.

可以去Youtube上看看视频,感受下这个伙计的实际操作。

http://www.youtube.com/embed/kDD9PjiQ2_U?wmode=transparent&rel=0&autohide=1&showinfo=0&enablejsapi=1

感受到一点使用BackTrack破解WEP加密的作用了么?你想说些什么呢?赶快换掉它吧。


via: http://lifehacker.com/5305094/how-to-crack-a-wi+fi-networks-wep-password-with-backtrack

译者:stduolc 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出