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

关于我正在尝试做什么的快速背景:

我经常需要从远程客户端设置公钥authentication到我的本地机器。 我试图通过运行一个脚本来自动完成这个过程,这个脚本通过SSH做了两件事:

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

2)取得远程机器上的密钥并进行设置,以便远程机器可以与本地机器进行pub-keyauthentication。

我试图做#2类似于我在ssh会话中使用ssh-copy-id做了#1。 但是我只能得到一个密码提示,提示input初始SSH连接。 ssh-copy-id在这一点上需要密码authentication,但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). 

我也应该注意到,通过debugging消息我已经确定ssh命令连接成功。 权限被拒绝的消息来自ssh-copy-id,而不是ssh。

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

我想我可以通过使用scp来手动解决这个问题,但是我也有一部分知道是否有办法做到这一点,或者至lessssh在这里做什么。

感谢你给与我的帮助!

-Bleck H.

在本地使用ssh-copy-id会更简单,或者使用cat将公钥复制到本地authorized_keys 。 下面是我如何做到的。

  1. 从本地, ssh到远程,并使用`ssh-keygen“到你的步骤#1
  2. 从本地,从公共密钥从远程到本地文件tmp.pub
  3. 在本地,`cat tmp.pub >> /home/jimmy/.ssh/authorized_keys

如果您在步骤1中将自己的公钥添加到远程用户的authorized_keys中,则可以在不重新input密码的情况下执行第2步。

你的ssh命令ssh-copy-id是在没有tty的情况下在远程的子shell中执行的,所以你看到输出回显到你的本地,但你的本地input不能到达远程子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:~$ 

注意打印的原因:“由于标准input不是terminal,所以不能分配伪terminal”,如果你在遥控器上按下回车键两次,没有input密码,结果是一样的。