伪终端不会被分配,因为 stdin 不是终端

伪终端不会被分配,因为 stdin 不是终端

我正在尝试通过没有 nc 的服务器设置自动 SSH 跳跃。

这可以从命令行运行:

ssh -A gateway ssh steve@target

(我已将我的公钥添加到 SSH 代理中)。

但是,将其添加到 ~/.ssh/config 不会:

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

试图强行解决这个问题-t很有趣,但没有帮助。

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

更多-t的?不好。

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

这可能吗?大多数教程(例如http://www.arrfab.net/blog/?p=246)建议使用nc.

答案1

不带 netcat 的 SSH 代理命令

当主机只能间接访问时,ProxyCommand 非常有用。对于 netcat 来说,它是相对前进的:

ProxyCommand ssh {gw} netcat -w 1 {host} 22

这里的 {gw } 和 {host} 是网关和主机的占位符。

但网关上未安装netcat时也有可能:

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

/dev/tcp 是标准 bash 的内置功能。这些文件不存在。要检查 bash 是否内置此功能,请运行:

cat < /dev/tcp/google.com/80 

...在网关上。

要确保使用 bash,请使用:

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

它甚至可以与 ControlMaster 配合使用。

(于 10 月 22 日更新,包括 Kill 以清理后台猫)(于 2011 年 3 月 3 日更新,使占位符更加清晰并解释 /dev/tcp)

100% 归功于罗兰·舒尔茨。这是来源:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
在评论中查看更多有用的信息。

这里还有更多:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack-4r1ubuntu/

更新: 这是新的东西马可

参考 ~/.ssh/config 中的 ProxyCommand,其中有这样一行:

ProxyCommand ssh gateway nc localhost %p

马可 说:

如果您使用最新版本的 OpenSSH,则不需要 netcat。您可以将 nc localhost %p 替换为 -W localhost:%p。

结果如下:

ProxyCommand ssh gateway -W localhost:%p

答案2

大T,不是小T。

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

我的脚本曾经返回该消息,现在不再返回。

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

authorized_key在 other_system 上使用 来使其运行命令:

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

答案3

尝试一下:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip

答案4

您可以尝试以下技术:先通过 ssh 连接到 server1,然后再通过 ssh 连接到 server2。

$ ssh -t user1@server1 ssh -t user2@server2 

像这样做对我有用。

相关内容