无密码 SSH 无法在终端上运行,因为我需要输入 RSA 密码

无密码 SSH 无法在终端上运行,因为我需要输入 RSA 密码

我们已经设置了一个 CentOS 6.4 机器,可以使用无密码 SSH 连接到多个其他系统。当在 CentOS 计算机上以正确的用户身份直接使用终端时,这可以正常工作。但是,如果我以另一个系统中的相同用户之一身份登录 CentOS 机器,系统会提示我输入 RSA 密钥密码。当我以正确的用户身份登录时,为什么需要这样做?

因此,如果我们有三台机器(A、B 和 C)。A 已设置为无需密码即可通过 SSH 连接到机器 B。这样就没问题了。但是,如果我们从机器 C 通过 SSH 连接到 A,然后从该远程 SSH 终端尝试通过 SSH 连接到 B,则需要输入密码。

机器 A 上有访问其他几台机器的脚本(无需密码)。我们需要能够从机器 C 远程登录机器 A,然后启动访问机器 B 的脚本。

答案1

您的问题有些不清楚。看起来您正在使用 SSH 密钥,但 SSH 密钥受密码保护。但实际上,当您直接登录时,它也应该要求您输入该密码。

我会做什么:

  1. 在机器 A 上创建一个特殊用户(我们称之为“runscripts”),用于运行脚本。
  2. 为此用户创建一个未通过密码加密的 SSH 密钥。
  3. 配置 sudo 以允许机器 A 上的“普通”用户以用户“runscripts”的用户权限执行这些脚本,而无需输入密码。

以下是如何进行设置的完整示例:

创建一个无法登录的新用户(在我的系统上,这还将创建一个同名的新组,我将在下面使用它):

# adduser --disabled-password runscripts

成为此用户并创建 ssh 密钥。不要在密钥上设置密码,只需在密码提示符下按 Enter 即可。

# su runscripts
$ ssh-keygen

将公钥(在 ~/.ssh/id_rsa.pub 中)添加到目标机器(示例中为机器 B)上的 authorized_keys,然后短暂尝试通过 SSH 密钥登录(这也会将远程公钥添加到 known_hosts,以便它稍后不会再次提示)。

$ ssh [email protected]

回到机器 A:将普通用户帐户添加到组:

# adduser kju runscripts

创建一些使用 SSH 密钥的脚本并在 B 上执行某些操作:

# cat > /usr/local/bin/script1
#!/bin/sh
echo -n "Running as "
whoami
ssh remoteuser@machineB whoami
^D
# chmod +x /usr/local/bin/script1

最后允许 runscripts 组中的用户以用户 runscript 身份执行此脚本,无需密码。这是 /etc/sudoers 中的行:

%runscripts  ALL=(runscripts) NOPASSWD:/usr/local/bin/script1

现在,作为 runscripts 组中的一个用户尝试运行该脚本:

$ sudo -u runscripts /user/local/bin/script1
Running as user runscripts
remoteuser
$

从此输出中可以看出,脚本以用户 runscripts 的身份执行。然后,它以用户“remoteuser”的身份登录到计算机 B,并执行“whoami”命令(然后当然返回“remoteuser”)。

这样做的好处是没有人能够窃取(未受保护的) SSH 密钥,因为它只能作为用户运行脚本访问,但人们只能使用此用户权限运行预定的脚本。

答案2

如果要避免这种情况,您需要生成没有密码的密钥并使用公钥身份验证。请执行以下操作:

a@A:~> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/a/.ssh/id_rsa): 
Created directory '/home/a/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/a/.ssh/id_rsa.
Your public key has been saved in /home/a/.ssh/id_rsa.pub.
The key fingerprint is:
3e:4f:05:79:3a:9f:96:7c:3b:ad:e9:58:37:bc:37:e4 a@A

换句话说,当系统提示你输入Enter passphrase (empty for no passphrase):

https://hkn.eecs.berkeley.edu/~dhsu/ssh_public_key_howto.html

答案3

你说,

作为之一那些相同的用户

所以我认为我们谈论的是多个用户

如果我是对的,那么我认为可能发生的情况如下:

  • 您以用户 A 身份登录foo
  • 机器B上的用户bar拥有B:/home/bar/.ssh/authorized_keys的公钥foo,其身份为A:/home/foo/.ssh/identity.rsa
  • 所以当然foo可以从 A 发出ssh bar@B并让它工作无密码

现在如果bar来自机器 C 的用户登录到机器 A就像他自己一样(“那些相同的用户之一”),即作为bar,他成为bar@A;而不是foo@A。当他尝试以 身份登录时, 检索到的用于执行登录bar@B的身份密钥是 ;它不是 A:/home/sshbar/.ssh/identity.rsa,但是 A:/home/酒吧/.ssh/identity.rsa 。也许文件被密码锁定。

所以:检查您的用户以及他们正在使用的身份。

答案4

要么生成没有密码的密钥,要么创建一个特殊的脚本,该脚本将使用变量从当前终端读取密码SSH_ASKPASS。这在从相关脚本调用 ssh-add 时特别有用。例如:

install -vm700 <(echo "echo 'my_passphrase'") $HOME/.ps
cat /path/id_rsa | ssh-add DISPLAY= SSH_ASKPASS=$HOME/.ps -

笔记:

  • 创建.ps脚本只是一次性的工作,其余的可以添加到你的rc文件。
  • ssh如果有关联终端或DISPLAY已设置终端,它将不起作用。
  • 如果您的 ssh-agent 没有运行,请运行:eval "$(ssh-agent -s)"

相关内容