SSH中的SSH失败,并显示“ stdin:不是tty”


58

我正在尝试使用ssh连接到一台计算机,然后使用ssh连接到另一台计算机2,但是出现此错误。

ssh user@computerone.com 'ssh otheruser@computertwo.com'

stdin: is not a tty

为什么?


1
我认为第二秒不需要那些单引号ssh
coffeMug

Answers:


70

默认情况下,当您使用ssh在远程计算机上运行命令时,不会为远程会话分配TTY。这使您可以传输二进制数据等,而不必处理TTY怪癖。这是为在上执行的命令提供的环境computerone

但是,当您在没有远程命令的情况下运行ssh时,它确实会分配TTY,因为您可能正在运行Shell会话。该ssh otheruser@computertwo.com命令是预期的,但是由于前面的解释,该命令没有可用的TTY。

如果要使用shell computertwo,请改用它,这将在远程执行期间强制分配TTY:

ssh -t user@computerone.com 'ssh otheruser@computertwo.com'

当您最终在ssh链的末尾运行shell或其他交互式进程时,通常这是适当的。如果要传输数据,既不适当也不要求add -t,但是每个ssh命令都将包含一个产生数据或消耗数据的命令,例如:

ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'

9

有一种更好的方式将SSH用作中继:使用该ProxyCommand选项。您需要在客户端计算机上具有一个密钥,该密钥可以让您登录第二台计算机(无论如何,在大多数情况下,公钥是推荐的使用SSH的方式)。将此放入您的设备~/.ssh/config并运行ssh computertwo

Host computerone
HostName computerone.com
UserName user

Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p

nc是网。任何可用的几个版本都可以。


我们是否不需要在computerone的“ authorized_keys”中添加与“代理”相关的行?我一直想了解一下openSSH的“代理”功能,但还没有完全了解它。
Felipe Alvarez 2014年

7

期望在中间服务器上的tty设备上有一个交互式终端。

如果您尝试使用此命令,它应该可以工作:

ssh user@computer1 -t "ssh otheruser@computer2"

请参阅man ssh以获取-t选项。


2

我通过将RequestTTY Yes添加到位于〜/ .ssh / config的ssh配置文件中来解决此问题,如下所示...

Host myserver.com
  User my-ssh-username
  RequestTTY Yes

1

您可以在ssh中使用PROXY Jump选项

-J [user@]host[:port]
 Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there.  Multiple jump hops may be specified
 separated by comma characters.  This is a shortcut to specify a ProxyJump configuration directive.

因此,如果我需要连接到hostB,但必须先通过hostA才能到达那里。通常我会

 ssh hostA
 [user@hostA ~]$ ssh hostB

我现在这样做

ssh -J hostA hostB
[user@hostB ~]$

0

您可以从命令行覆盖SSH配置选项“ RequestTTY”。

我的工作示例在运行多个命令后以SSH会话cd-serv-one.sh启动/bin/bash

#!/bin/bash

ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"

现在我开始运行./cd-serv-one.sh所需的SSH会话。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.