如何为 Linux 系统中的 SSH 添加双重认证

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何为 Linux 系统中的 SSH 添加双重认证相关的知识,希望对你有一定的参考价值。

第一步需要在运行着OpenSSH服务的Linux主机上安装Google认证器。按照如下步骤安装Google认证器及其PAM模块。

用安装包安装 Google Authenticator
如果你不想自己构建 Google Authenticator,在几个 Linux 发行版上有已经编译好的安装包。安装包里面包含 Google Authenticator 二进制程序和 PAM 模块。

在 Ubuntu 上安装 Google Authenticator:
$ sudo apt-get install libpam-google-authenticator

在 Fedora 上安装 Google Authenticator:
$ sudo yum install google-authenticator
在 CentOS 上安装 Google Authenticator ,需要首先启用 EPEL 软件库,然后运行如下命令:

$ sudo yum install google-authenticator
如果不想使用已经编译好的安装包,或者你的 Linux 发行版不在此列,可以自行编译:

在 Linux 上 Google Authenticator
首先,安装构建 Google Authenticator 所需的软件包。

在 Debian、 Ubuntu 或 Linux Mint 上:

$ sudo apt-get install wget make gcc libpam0g-dev
在 CentOS、 Fedora 或 RHEL上:

$ sudo yum install wget make gcc pam-devel
然后下载 Google Authenticator 的源代码,并按如下命令编译。
$ tar xvfvj libpam-google-authenticator-1.0-source.tar.bz2
$ cd libpam-google-authenticator-1.0
$ make
如果构建成功,你会在目录中看到 pamgoogleauthenticator.so 和 google-authenticator 两个文件。

最后,将 Google Authenticator 安装到合适位置

$ sudo make install
排错
当编译 Google Authenticator 时出现如下错误:

fatal error: security/pam_appl.h: No such file or directory
要修复这个问题,请安装如下依赖包。

在 Debian、 Ubuntu 或 Linux Mint 上:

$ sudo apt-get install libpam0g-dev
在 CentOS、 Fedora 或 RHEL 上:

$ sudo yum install pam-devel
当Google认证器安装好后,你需要在Linux主机上创建验证密钥,并且在安卓设备上注册,注意这项配置操作是一次性的。我们将详细叙述如何完成这些操作:

生成验证密钥
在Linux主机上运行Google认证器

$ google-authenticator
你将看到一个QR码,它使用如下图形表示我们数字形态的密钥。一会我们要用到它在安卓设备上完成配置。

Google认证器会问一些问题,如果你不确定,就回答"Yes"。这个应急备用验证码(图中 emergency scratch codes)可以在你由于丢失了绑定的安卓设备的情况下(所以不能得到生成的一次性密码)恢复访问。最好将应急备用验证码妥善保存。

在安卓设备上运行Google认证器
我们需要在安卓设备上安装Google Authenticator app才能完成双因子认证,到Google Play下载并安装一个。在安卓设备上运行Google认证器,找到下图所示中的配置菜单。

你可以选择"Scan a barcode" 或者"Enter provided key"选项。"Scan a barcode"允许你扫描QR码来完成密钥的输入,在此可能需要先安装扫描软件Barcode Scanner app。如果选择"Enter provided key"选项,你可以使用键盘输入验证密钥,如下图所示:

为SSH服务器用Google认证器
最终我们需要修改两个文件来完成集成Google认证器和OpenSSH服务这临门一脚。

首先,修改PAM配置文件,命令和需添加的内容如下:

$ sudo vi /etc/pam.d/sshd
auth required pam_google_authenticator.so
然后打开SSH配置文件,找到参数ChallengeResponseAuthentication,并启用它。

$ sudo vi /etc/ssh/sshd_config
ChallengeResponseAuthentication yes

最后,重启SSH服务。

在 Ubuntu、 Debian 和 Linux Mint 上:

$ sudo service ssh restart
在Fedora (或 CentOS/RHEL 7)上:

$ sudo systemctl restart sshd
在CentOS 6.x或 RHEL 6.x上:

$ sudo service sshd restart
验证双因子认证
在绑定的安卓设备上运行Google认证器,获得一个一次性验证码,该验证码30秒内有效,一旦过期,将重新生成一个新的验证码。

现在和往常一样,使用SSH登录终端

$ ssh user@ssh_server
当提示你输入验证码的时候,输入我们刚获得的验证码。验证成功后,再输入SSH的登录密码。
参考技术A 用安装包安装 Google Authenticator如果你不想自己构建 Google Authenticator,在几个 Linux 发行版上有已经编译好的安装包。安装包里面包含 Google Authenticator 二进制程序和 PAM 模块。在 Ubuntu 上安装 Google Authenticator:$ sudo apt-get install libpam-google-authenticator在 Fedora 上安装 Google Authenticator:

如何设置公钥认证? [关闭]

【中文标题】如何设置公钥认证? [关闭]【英文标题】:How do I setup Public-Key Authentication? [closed] 【发布时间】:2010-09-05 15:43:54 【问题描述】:

如何为 SSH 设置公钥验证?

【问题讨论】:

【参考方案1】:

对于 windows this 是一个很好的介绍和指南

这里有一些不错的 ssh 代理,适用于 linux 以外的系统。

Windows - pageant OS X - SSHKeychain

【讨论】:

【参考方案2】:

如果你安装了 SSH,你应该可以运行..

ssh-keygen

然后执行这些步骤,您将拥有两个文件,id_rsaid_rsa.pub(第一个是您的私钥,第二个是您的公钥 - 您复制到远程机器的那个)

然后,连接到您要登录的远程计算机,到文件 ~/.ssh/authorized_keys 添加您的 id_rsa.pub 文件的内容。

哦,还有chmod 600 所有的id_rsa* 文件(本地和远程),所以没有其他用户可以读取它们:

chmod 600 ~/.ssh/id_rsa*

同样,确保远程~/.ssh/authorized_keys 文件也是chmod 600

chmod 600 ~/.ssh/authorized_keys

然后,当您执行ssh remote.machine 时,它应该询问您密钥的密码,而不是远程机器。


为了更好地使用,您可以使用ssh-agent 将解密的密钥保存在内存中——这意味着您不必每次都输入密钥对的密码。要启动代理,请运行(包括反引号,用于评估 ssh-agent 命令的输出)

`ssh-agent`

在某些发行版上,ssh-agent 会自动启动。如果你运行 echo $SSH_AUTH_SOCK 并且它显示了一个路径(可能在 /tmp/ 中)它已经设置好了,所以你可以跳过前面的命令。

然后添加你的密钥,你做

ssh-add ~/.ssh/id_rsa

并输入您的密码。它会一直存储,直到您将其删除(使用 ssh-add -D 命令,该命令会从代理中删除所有密钥)

【讨论】:

如果您必须创建 .ssh 文件夹,请不要像我一样将其设置为 600,否则您将度过难关。而是将其设置为 700。:-) 我可以使用为已知/配置的客户端生成的私钥从未知机器登录以与服务器通信吗?我的意思是,这个私钥是可移植的吗?如果有紧急需要,可以用来从其他机器向服务器验证我自己的身份吗?? @user01 可以,您可以将私钥复制到多个系统并访问另一个具有相应公钥的服务器。 @Charlie Gorichanaz:是不是反过来,我可以在服务器上生成一个密钥对并在我想连接到该服务器的所有其他机器上使用生成的公钥?跨度> 上传公钥到远程机器也可以由本地机器上的ssh-copy-id [-i identity] [user@]host处理。

以上是关于如何为 Linux 系统中的 SSH 添加双重认证的主要内容,如果未能解决你的问题,请参考以下文章

如何为本地 git (github) 存储库永久添加 SSH 密钥? [复制]

如何为 Github 帐户和 Bitbucket 公司帐户添加多个 SSH 密钥

如何为我的新 gitlab 帐户生成新的 ssh-key?

Linux之SSH密钥认证

Linux系统的ssh密钥认证

如何为同一主机的多个 gitlab 帐户使用多个 ssh 密钥[重复]