SSH:可以将密码验证转发到远程机器上执行的命令吗?

SSH:可以将密码验证转发到远程机器上执行的命令吗?

关于我到底想做什么的简要背景介绍:

我经常需要设置从远程客户端到本地计算机的公钥身份验证。我试图通过运行一个脚本来自动化这个过程,该脚本将通过 SSH 依次执行 2 件事:

1)通过密码验证的 SSH,在远程机器上使用 ssh-keygen 生成 RSA 密钥并将其保存在预定义的位置

2)在远程机器上获取密钥并进行设置,以便远程机器可以与本地机器进行公钥认证。

我尝试在 ssh 会话中使用 ssh-copy-id 执行 #1 操作,类似地执行 #2 操作。但是,我只收到一个密码提示,即初始 SSH 连接的提示。此时 ssh-copy-id 需要密码验证,但是 SSH 不会发回密码提示,而是收到如下输出:

[localUser@localhost ~]$ ssh remoteUser@remoteIP ssh-copy-id -i ~/authenticationKey localuser@localhost
remoteUser@remoteIP's password: [ENTER]
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

我还应该在这里指出,通过调试消息,我已经确定 ssh 命令连接成功。权限被拒绝的消息来自 ssh-copy-id,而不是 ssh。

在我看来,这是密码提示未从远程客户端传播回 shell 的问题,或者 SSH 试图提交我不知道的密码(或至少不起作用)

我想我可以通过使用 scp 手动完成此操作,但我也部分想知道是否有办法做到这一点,或者至少 ssh 在这里做什么。

感谢你给与我的帮助!

—Bleck H.

答案1

ssh-copy-id在本地使用或直接使用cat将公钥复制到本地会更简单authorized_keys。下面是我操作的方法。

  1. 从本地ssh到远程,使用“ssh-keygen”,如步骤 #1 中所述
  2. 从本地,scp将远程的公钥复制到本地文件tmp.pub
  3. 在本地,“cat tmp.pub >> /home/jimmy/.ssh/authorized_keys

如果您在步骤 1 中将自己的公钥附加到远程用户的公钥authorized_keys,那么您可以执行步骤 2 而无需重新输入密码。

你的ssh命令ssh-copy-id在远程的子 shell 中执行没有 tty,因此您会看到输出回显到本地,但本地输入不会到达远程子 shell。在我的机器 (Debian Wheezy) 上,我执行了:

yba@tavas:~$ ssh localhost ssh localhost
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/yba/.ssh/id_rsa': 
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
yba@tavas:~$ 

注意打印的原因“不会分配伪终端,因为 stdin 不是终端”,结果与您在没有密码的情况下在遥控器上按下回车键两次相同。

相关内容