• SSH 密钥一键配置脚本使用教程

    在我们平时使用Linux系统时候,通常使用的Linux SSH登录方式是用户名加密码的登录方式,今天来探讨另外的一种相对安全的登录方式"密钥登录"。我们知道SSH登录是用的RSA非对称加密的,所以我们在SSH登录的时候就可以使用RSA密钥登录。 前言 对于新入手或重装后的 VPS 配置密钥登录需要创建 ~/.ssh 目录、把公钥写入到 ~/.ssh/authorized_keys、设置权限、禁用密码登录等操作,虽然都是很简单的基础操作,但过程麻烦且枯燥: mkdir -p ~/.ssh curl -fsSL >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys sudo sed -i "s@.*\(PasswordAuthentication \).*@\1no@" /etc/ssh/sshd_config sudo service sshd restart SSH 密钥一键配置脚本是一套用于简化 SSH 密钥配置过程的解决方案。使用它以上操作只需要一行命令: bash <(curl -fsSL git.io/key.sh) -g P3TERX -d 语法及选项说明 bash <(curl -fsSL git.io/key.sh) [选项...] <参数> -o - 覆盖模式,必须写在最前面才会生效 -g - 从 GitHub 获取公钥,参数为 GitHub 用户名 -u - 从 URL 获取公钥,参数为 URL -f - 从本地文件获取公钥,参数为本地文件路径 -p - 修改 SSH 端口,参数为端口号 -d - 禁用密码登录 使用方法 生成 SSH 密钥对 如果没有密钥需要先生成,执行以下命令后一路回车即可。 ssh-keygen -t ecdsa -b 521 TIPS: 此方法适用于 Win­dows 10 (1803后)的 Pow­er­Shell 或 WSL,Linux 发行版和 ma­cOS 自带的终端,但不仅限于这些环境。 科普: 521 位的 ECDSA 密钥比起 RSA 密钥更安全且验证速度更快。 操作完后会在 ~/.ssh 目录中生两个密钥文件,id_ecdsa 为私钥,id_ecdsa.pub 为公钥。公钥就是我们需要安装在远程主机上的。 科普:~符号代表用户主目录,俗称家目录。其路径与当前登陆的用户有关,在 Linux 中普通用户家目录的路径是/home/用户名,而 root 用户是/root。Win­dows 10 中路径是C:\Users\用户名。在 ma­cOS 中路径是/Users/用户名。 安装公钥 从 GitHub 获取公钥 在 GitHub 密钥管理页面 添加公钥,比如我的用户名是 P3TERX,那么在主机上输入以下命令即可: bash <(curl -fsSL git.io/key.sh) -g P3TERX 从 URL 获取公钥 把公钥上传到网盘,通过网盘链接获取公钥: bash <(curl -fsSL git.io/key.sh) -u 从本地文件获取公钥 通过 FTP 的方式把公钥传到 VPS 上,然后指定公钥路径: bash <(curl -fsSL git.io/key.sh) -f ~/key.pub 覆盖模式 使用覆盖模式(-o)将覆盖 /.ssh/authorized_keys 文件,之前的密钥会被完全替换掉,选项必须写在最前面才会生效,比如: bash <(curl -fsSL git.io/key.sh) -o -g P3TERX 禁用密码登录 在确定使用密钥能正常登录后禁用密码登录: bash <(curl -fsSL git.io/key.sh) -d 修改 SSH 端口 把 SSH 端口修改为 2222: bash <(curl -fsSL git.io/key.sh) -p 2222 一键操作 安装密钥、修改端口、禁用密码登录一键操作: bash <(curl -fsSL git.io/key.sh) -og P3TERX -p 2222 -d

    2021.09.12 浏览:1188
  • 在Ubuntu服务器上设置SSH双因素身份验证(2FA)

    本教程将向您展示如何使用著名的Google Authenticator在Ubuntu服务器上设置SSH双因素身份验证。这将大大提高Ubuntu服务器上SSH服务的安全性。 双因素身份验证的工作原理 通常,您只需要输入密码或使用SSH密钥即可远程登录到Ubuntu服务器。双因素身份验证(2FA)要求您输入两条信息才能登录。因此,您还需要输入基于时间的一次性密码才能登录到SSH服务器。该一次性密码使用TOTP算法计算,该算法是IETF标准。如今,许多网站和服务(Facebook、谷歌、Twitter等)为用户提供2FA来保护他们的帐户,在SSH服务器上启用2FA也是一个好主意。 本教程将向您展示如何设置 使用2FA进行密码验证 使用2FA进行公钥认证 注意:本文中使用的开源服务器软件名为libpam google authenticator,它是从默认的Ubuntu存储库安装的。谷歌公司不以任何形式参与认证过程。服务器软件和移动应用不需要网络访问。 第一步:在Ubuntu服务器上安装并配置Google Authenticator 登录Ubuntu服务器,运行以下命令,从默认的Ubuntu软件包存储库安装Google Authenticator。 sudo apt安装-y libpam谷歌认证器 然后运行google authenticator命令在主目录中创建一个新密钥。 谷歌认证器 当被问及“您希望身份验证令牌基于时间吗?”回答y。 然后你会看到一个二维码,你可以在手机上使用TOTP应用程序扫描。我推荐两款应用: Google Authenticator是最著名的TOTP移动应用程序。你可以通过Google Play或Apple app store在手机上安装它。 Google Authenticator移动应用程序不是开源的。如果你不信任谷歌,你可以使用FreeOTP,一个由Red Hat开发的开源TOTP移动应用。 用谷歌验证器或FreeOTP在手机上扫描二维码。请注意,您需要放大终端窗口来扫描完整的二维码。 二维码代表密钥,只有SSH服务器和TOTP移动应用程序知道该密钥。扫描二维码后,您可以在手机上看到六位数的一次性密码。默认情况下,它每30秒更改一次。以后需要输入这个一次性密码,才能通过SSH登录Ubuntu服务器。 在终端窗口中,您可以看到密钥、验证码和紧急刮擦码。建议您将此信息保存到安全的地方,以便以后使用。 然后您可以输入y来回答所有剩余的问题。这将更新Google Authenticator配置文件,禁用同一身份验证令牌的多次使用,增加时间窗口,并启用速率限制以防止暴力登录尝试。 第2步:配置SSH守护进程以使用Google Authenticator 使用2FA进行密码验证 使用2FA进行公钥认证 使用2FA进行密码验证 如果不使用SSH密钥,请按照以下说明操作。 打开SSH服务器配置文件。 sudo nano/etc/ssh/sshd_config 在文件中找到以下两个参数,并确保它们都设置为“是”。 UsePAM yes ChallengeResponseAuthentication yes PAM代表可插拔身份验证模块。它提供了一种将不同的身份验证方法插入Linux系统的简单方法。要使用SSH启用Google Authenticator,必须启用PAM和质询响应身份验证。 如果要允许root用户使用2FA,请找到permitrotlogin参数并将其值设置为yes。它不能是PermitroLogin no或PermitroLogin prohibit password。 Permitrotlogin是的 保存并关闭文件。接下来,编辑SSH守护程序的PAM规则文件。 sudo nano/etc/pam。d/sshd 在这个文件的开头,您可以看到下面一行,当ChallengeResponseAuthentication设置为yes时,它将启用密码验证。 @包括公共授权 要在SSH中启用2FA,请添加以下两行。 #通过Google Authenticator进行双因素身份验证需要pam_Google_Authenticator。所以 保存并关闭文件。然后重启SSH守护进程,使更改生效。 sudo systemctl重启ssh 从现在起,SSH守护进程将要求您输入用户密码和验证码(由Google Authenticator生成的一次性密码)。下面的屏幕截图显示了从CentOS box到Ubuntu 20.04服务器的SSH登录会话。 使用2FA进行公钥认证 如果使用SSH密钥登录SSH服务器,请按照以下说明操作。 打开SSH服务器配置文件。 sudo nano/etc/ssh/sshd_config 在文件中找到以下两个参数,并确保它们都设置为“是”。 UsePAM yes ChallengeResponseAuthentication yes PAM代表可插拔身份验证模块。它提供了一种将不同的身份验证方法插入Linux系统的简单方法。要使用SSH启用Google Authenticator,必须启用PAM和质询响应身份验证。 如果要允许root用户使用2FA,请找到permitrotlogin参数并将其值设置为yes。它不能是PermitroLogin no或PermitroLogin prohibit password。 Permitrotlogin是的 接下来,在文件末尾添加以下行。这会告诉SSH守护进程,用户必须同时通过公钥身份验证和质询响应身份验证。 身份验证方法公钥、键盘交互 保存并关闭文件。接下来,编辑SSH守护程序的PAM规则文件。 sudo nano/etc/pam。d/sshd 在这个文件的开头,您可以看到下面一行,当ChallengeResponseAuthentication设置为yes时,它将启用密码验证。我们需要注释掉这一行,因为我们将使用SSH密钥而不是密码。 @包括公共授权 要在SSH中启用2FA,请添加以下两行。 #通过Google Authenticator进行双因素身份验证需要pam_Google_Authenticator。所以 保存并关闭文件。然后重启SSH守护进程,使更改生效。 sudo systemctl重启ssh 从现在起,您需要使用SSH密钥和Google Authenticator验证码登录。 笔记 Ubuntu服务器上的每个用户都需要运行google authenticator命令并扫描二维码才能使用双因素身份验证。如果用户未设置并尝试登录,将显示错误消息“权限被拒绝(键盘交互)”。 紧急恢复码是你的备份码。如果手机丢失,您可以输入五个紧急刮擦码中的一个,而不是一次性密码,以完成两步验证。这些代码仅供一次性使用。 如果您想更改密钥,只需登录服务器并再次运行google authenticator命令来更新~/。谷歌认证文件。 由于一次性密码是使用共享密钥和当前时间计算的,所以在Ubuntu服务器上启用NTP时间同步以保持准确时间是一个好主意,尽管之前我们允许Ubuntu服务器和移动应用之间的时间偏差为4分钟。你的Ubuntu服务器和TOTP移动应用可以使用不同的时区。 如何禁用SSH双因素身份验证 编辑SSH守护程序的PAM规则文件。 sudo nano/etc/pam。d/sshd 注释掉下面这行。 身份验证需要pam_google_身份验证程序。所以 保存并关闭文件。如果在/etc/ssh/sshd_config文件中添加了以下行, 身份验证方法公钥、键盘交互 删除键盘交互身份验证方法。 身份验证方法公钥 保存并关闭文件。然后重启SSH守护进程。 sudo systemctl重启ssh 收尾 我希望本教程能帮助您在Ubuntu服务器18.04和20.04上设置SSH双因素身份验证。一如既往,如果你觉得这篇文章有用,那么订阅我们的免费时事通讯。你也可以在Google+、Twitter或我们的Facebook页面上关注我们。

    2022.03.23 浏览:96
  • 在Ubuntu上设置无密码SSH登录的2个简单步骤

    本教程介绍如何在Ubuntu桌面上设置无密码SSH登录。使用OpenSSH服务器验证用户登录基本上有两种方法:密码验证和公钥验证。后者也称为无密码SSH登录,因为您不需要输入密码。 设置无密码SSH登录的2个简单步骤 第一步:在你的Ubuntu桌面上生成一个公共/私有密钥对 在Ubuntu桌面(而不是服务器)上,在终端窗口中输入以下命令。 ssh-keygen -t rsa -b 4096 哪里: -t代表类型。上面的命令生成RSA类型的密钥对。RSA是默认类型。 -b代表比特。默认情况下,密钥长度为3072位。我们使用4096位的密钥来增强安全性。 当被问及要保存密钥的文件时,只需按Enter键即可使用默认文件。接下来,输入至少20个字符长的好密码短语。密码短语用于加密私钥。 私钥(您的身份证)将保存在中。主目录下的ssh/id_rsa文件。 公钥将保存在中。ssh/id_rsa。酒吧档案。 从randomart图像中,我们可以看到密钥的长度(RSA 4096)。现在运行以下命令。 file ~/.ssh/id_rsa 您应该会看到以下输出: /home/username/.ssh/id_rsa: OpenSSH private key 如果您看到“没有这样的文件或目录”错误,这意味着没有创建SSH密钥对。运行ssh-keygen-t rsa-b4096命令再次创建它。 第2步:将公钥上传到远程Linux服务器 提示:远程服务器可以运行任何Linux发行版:Debian、Ubuntu、RHEL、CentOS等等,只要它运行OpenSSH服务器,就可以使用以下方法。 使用openssh客户端软件包附带的ssh copy id命令可以轻松完成这一点。 ssh-copy-id remote-user@server-ip 输入远程用户的密码。 公钥将存储在中。ssh/authorized_keys文件位于远程用户的主目录下。现在SSH进入远程服务器。 ssh remote-user@server-ip 这一次,您需要输入RSA密钥密码来解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。 输入正确的密钥密码短语后,即可登录到远程Linux服务器。现在从远程服务器退出。 exit 然后再次将SSH连接到远程服务器: ssh remote-user@server-ip 这一次,您将自动登录到远程服务器,尽管您没有键入密码或密钥密码短语。此外,在使用scp命令传输文件时,不必键入密码或密钥密码短语。scp命令也由openssh客户端软件包提供,该软件包默认安装在Ubuntu桌面上。 禁用密码身份验证 虽然默认情况下使用SSH密钥登录服务器,但您仍然可以使用普通密码登录另一台计算机上的服务器。您不希望黑客发起暴力攻击来侵入您的服务器,因此在OpenSSH服务器中禁用密码验证是一种很好的做法。 要禁用密码身份验证,请在远程服务器上编辑/etc/ssh/sshd_config文件。 sudo nano /etc/ssh/sshd_config 找到这一行: #PasswordAuthentication yes 将其更改为: PasswordAuthentication no 然后找到ChallengeResponseAuthentication热线。确保它的值设置为no,如下所示。如果设置为“是”,您仍然可以使用密码登录。 ChallengeResponseAuthentication no 保存文件并重新启动SSH服务。 Debian/Ubuntu sudo systemctl restart ssh 瑞尔/森托斯 sudo systemctl restart sshd 现在如果~/中没有相应的私钥。在ssh目录下,当您尝试ssh到远程服务器时,您将看到以下错误。 Permission denied (publickey). 或 Read: Connection reset by peer 这意味着远程服务器只允许使用SSH密钥进行SSH登录,不允许密码身份验证。请注意,如果您将PasswordAuthentication设置为no,将ChallengeResponseAuthentication设置为yes,则仍然可以使用password登录。要禁用密码登录,必须将两者都设置为“否”。 备份您的公钥/私钥对 禁用SSH密码身份验证后,备份SSH密钥非常重要。如果丢失密钥,您将被锁定在服务器之外。将您的公钥/私钥对备份到USB驱动器等安全位置。 cp ~/.ssh/id_rsa* /path/to/safe/location/ 您还可以将密钥对存储在一个文件夹中,然后用加密压缩该文件夹,并将其发送到云存储,如NextCloud。 您还可以将密钥对(私钥和公钥)复制到新的Linux计算机上,并使用SSH密钥将SSH复制到服务器上。将密钥对复制到新计算机后,将其移动到新计算机。ssh/新用户的目录。 mv id_rsa* ~/.ssh/ 您需要将密钥对的所有者更改为新计算机上的用户。 sudo chown new-user:new-user ~/.ssh/id_rsa* 现在,您可以使用SSH密钥登录到新计算机上的远程服务器。 有时,我想在本地Ubuntu计算机上创建两个用户帐户来执行不同的任务。但是,我仍然希望在登录到其他用户帐户时使用SSH密钥。只需将SSH密钥对(私钥和公钥)复制到新用户的~/。ssh/folder。您需要输入RSA密钥密码短语才能解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。 在SSH代理中存储密钥密码短语 如果您使用的是仅限命令行的Linux框,您可能会发现每次SSH到其他Linux服务器时都需要输入密钥密码短语。这是因为SSH代理没有存储密钥密码短语。 在SSH客户端上安装并配置keychain。 sudo apt install keychain 然后编辑。bash_简介或。档案文件。在其中添加以下文本,以便用户每次登录时都会执行这两个命令。 /usr/bin/keychain $HOME/.ssh/id_rsa source $HOME/.keychain/$HOSTNAME-sh 现在注销并重新登录。你会看到这样的情况: Last login: Thu Dec 17 20:38:39 2015 from 74.125.128.103 * keychain 2.7.1 ~ http://www.funtoo.org * Found existing ssh-agent: 17651 * Adding 1 ssh key(s): /home/<username>/.ssh/id_rsa Enter passphrase for /home/<username>/.ssh/id_rsa: * ssh-add: Identities added: /home/<username>/.ssh/id_rsa 当密钥链启动时,它会检查正在运行的ssh代理,否则会启动一个。这次需要输入密钥密码短语。用户登录时会记住密钥密码,但当系统重新启动时,您必须再次输入。 现在,只要ssh服务器具有公钥,并且您正在使用的ssh客户端成功配置了私钥/公钥对和密钥链,您就可以通过ssh连接到ssh服务器,而无需键入密钥密码短语。 更改私钥密码短语 如果需要更改私钥密码短语,可以使用以下命令: ssh-keygen -f ~/.ssh/id_rsa -p 输入旧密码,然后输入新密码。 专业提示:使用屏幕让你的会话保持活跃 您是否一直在远程服务器上工作,突然您的计算机与Internet断开连接,无法继续在服务器上运行作业?您可以使用精彩的屏幕实用程序来保持会话的活力。在Ubuntu服务器上安装屏幕: sudo apt install screen 然后启动屏幕: screen 第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。 如果您在服务器上有一个长时间运行的作业,现在不需要在服务器上执行其他操作,可以按Ctrl+a,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。 [detached from 32113.pts-1.focal] 这表明上一屏幕会话ID为32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,服务器上的作业仍在运行。当需要返回并检查进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话ID。 screen -ls 样本输出: There is a screen on: 32113.pts-1.focal (05/19/2020 03:45:29 PM) (Detached) 1 Socket in /run/screen/S-linuxbabe. 然后可以重新连接到上一个屏幕会话。 screen -r 32113 如果您正在屏幕会话中,Internet连接突然中断,那么当您再次连接Internet时,可以在服务器上运行以下命令。 screen -d -r 32113 这次我们需要-d选项,因为之前的屏幕会话没有分离。我们需要先拆下它(-d),然后再重新连接到它(-r)。 下一步 我希望本教程能帮助您在Ubuntu上设置无密码ssh登录。您可能还需要设置自动安全更新。 在Ubuntu上设置自动安全更新(无人参与升级) 和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。

    2022.03.24 浏览:467