我的新服务器实例配置为使用密码通过 ssh 登录 root。我希望我的 Ansible playbook 将其重新配置为使用密钥,并在第一次运行时禁用使用密码的 root 登录,所以我需要这样的东西:
如果无法使用密钥登录:
做其他任务
我怎样才能做到这一点?
编辑:要清楚,我不是在问如何添加密钥或禁用 root,这只是为了上下文。我问的是如果无法使用密钥进行身份验证,如何回退到密码。使用--ask-pass或ansible_ssh_pass设置,Ansible 甚至不会尝试使用公钥身份验证
我之前曾使用screen -dr control. 但是,有时此命令不会重新附加到屏幕,而是永远挂起(10 分钟后我中止)。这仅在 SSH 连接意外断开时发生,而不是在屏幕与Ctrl-A d. 其他开关,如screen -x或screen -D -RR也不起作用。
这篇文章建议杀死持有 screen 会话的 PTY,这将导致 screen 完成其断开连接。但是,它只是杀死从中screen -dr control调用的外壳。
例如:
$ ps -ef | grep control | grep -v grep
nomad 7387 7109 0 13:05 pts/50 00:00:00 screen -dr control
nomad 15299 1 0 Nov27 ? 00:13:47 SCREEN -S control
$ ps -ef | grep bash | grep 'pts/50'
nomad 7109 7108 0 12:49 pts/50 00:00:00 -bash
Run Code Online (Sandbox Code Playgroud)
链接的帖子建议杀死 …
我正在创建一个 bash 脚本来配置一个新服务器,我可以将一个 Web 应用程序部署到该服务器。我总是必须做的一件事是将 GitHub 视为使用ssh git@github.com. 如何在 bash 脚本中自动执行此过程,并以幂等方式执行此操作?
我们有两个主要环境有问题:
开发和质量保证
每个环境有两台服务器:
要连接应用服务器,必须先连接跳转盒,然后SSH连接应用服务器。
防火墙有一些规则:
我们的问题
我们有很多的内容(670 GB) DEVELOPMENT APPLICATION SERVER,我们需要得到这个的QA APPLICATION SERVER。
将此数据复制到跳转框不是一种选择,因为它们缺少所需的空间量。
我做了一些研究,并了解到我们可以通过这些服务器建立一系列隧道,以便我们可以通过隧道将数据直接从一个应用程序服务器传输到另一个应用程序服务器。但是,我们无法从应用服务器连接到跳转盒的问题。
我们有什么选择吗?这将是一个绝望的局面,时间至关重要。我们没有时间下载数据并重新上传。在服务器上通过网络进行复制会很快,因为它是千兆连接。
在我的机器上,我使用的是使用 tun0 接口的 OpenVPN。我希望 sshd 只在这个接口上监听。
我知道,我可以指定要收听的 IP 地址
/etc/ssh/sshd_config
Run Code Online (Sandbox Code Playgroud)
与
ListenAddress 0.0.0.0
Run Code Online (Sandbox Code Playgroud)
指示。但是我的IP地址会改变,所以我不能在这里选择一个总是有效的IP。我知道只有当 VPN 启动时我才能启动守护程序 - 这不是问题。
如何让 sshd 只侦听特定接口 (tun0)?
所以首先,我知道,我应该在 SSH 中使用密钥身份验证。不需要向我解释。
这里的问题是我有一堆(大)服务器,我需要一个脚本来连接每一个。
我尽可能使用密钥身份验证,但不可能在每台服务器上都使用(我无法控制)。所以SSH登录,或者有时telnet。
因此,对于某些人,我只是将密码存储在 db 中,我的脚本会在需要时使用它。问题是这样做看起来并不安全。有没有办法让它更安全一点?
喜欢一些特定的存储方式?
我有一台运行 Debian 和 sshd 的服务器,如果我需要重新启动服务器,我的 SSH 会话会在客户端挂起,直到 TCP 超时。我认为这是因为在sshd终止时它没有明确关闭与主机的打开的 SSH 会话。我应该怎么做才能让sshd所有人先断开连接,然后正常终止?到目前为止,我没有看到man sshd_config与关闭行为相关的参数。
我试图通过 SSH 从办公室 X 到办公室 Y 中的几个 Linux 机器。办公室 Y 中的 Linux 机器在 NAT 之后,每个机器都在自己的端口上运行。我可以通过 SSH 成功访问所有这些,但我无法进行身份验证。
我能够通过 SSH 进入第一个框,但是当我到达第二个框时,它说:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
[edited out fingerprint]
Please contact your …Run Code Online (Sandbox Code Playgroud) 许多教程告诉您像这样配置 ssh 服务器:
ChallengeResponseAuthentication no
PasswordAuthentication no
UsePAM no
Run Code Online (Sandbox Code Playgroud)
但是使用此设置,您无法使用 PAM,因为我计划将 2 Factor Auth 与 Google Authenticator(OTP 一次性密码)一起使用,我需要 PAM。
那么如何配置一个新的 debian jessie ssh 守护进程,如果我想阻止使用普通密码登录但仍然允许使用 PAM。
也许确切的问题是如何配置 pam 以禁止密码?
PAM 身份验证的详细信息
禁用基于 PAM 的密码身份验证相当不直观。几乎所有 GNU/Linux 发行版(Slackware 除外)以及 FreeBSD 都需要它。如果您不小心,您可以将 PasswordAuthentication 设置为“no”,并且仍然通过 PAM 身份验证仅使用密码登录。事实证明,您需要将“ChallengeResponseAuthentication”设置为“no”才能真正禁用 PAM 身份验证。FreeBSD 手册页有这样的说法,这可能有助于澄清情况:
请注意,如果 ChallengeResponseAuthentication 为“yes”,并且 sshd 的 PAM 身份验证策略包括 pam_unix(8),则无论 PasswordAuthentication 的值如何,都将允许通过质询-响应机制进行密码身份验证。
http://www.unixlore.net/articles/five-minutes-to-more-secure-ssh.html
我经常发现自己打开了多个 ssh 连接,以便使用tail -f.
当我在家时这不是问题,因为我使用公钥加密进行无密码登录。但是,我会经常在我的大学使用计算机来执行此操作,因此我无法选择使用我的私钥。输入我的密码 4 或 5 次以获取多个终端窗口会很烦人。
如何通过单个连接获得多个终端?