ssh multi-hop…适应ssh配置文件的命令


10

我正在尝试将多跳ssh命令放入ssh .ssh / config文件中。

这是我的连接图:笔记本电脑(我在这里)------> userver ------->工作站

我已经将ssh的公共rsa密钥放入了“ userver”和“ workstation”中。此时,我可以通过键入以下行来连接:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

但是,我希望能够使用〜/ .ssh / config中的配置文件的功能来达到相同的效果,但是使用一个简单的命令,这也将允许我使用“ scp”进行快速复制。唯一的问题是,“ userver”没有“ nc”命令,并且我那里没有超级用户,仅能控制我的主文件夹。不过,我尝试了一些方法:

我的笔记本电脑(〜/ .ssh / config)中有以下配置文件:

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

也是用户版本中的另一个配置文件(〜/ .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

有了这个配置文件,我可以连接为

ssh -A -t userver ssh -A workstation

这是一个改进,但还不够。我尝试在笔记本电脑配置中添加另一个主机,如下所示:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

然后,当我做

ssh hop

我得到以下输出错误,并且无法连接:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

有任何想法吗?

Answers:


6

您需要的命令是ProxyCommand

您应该将以下行放入.ssh / config文件中:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

现在您可以通过以下方式连接到PC工作站

  ssh worksation

如果不清楚,或者您需要更多详细信息,建议您阅读ssh多跳的出色介绍

编辑:

您始终可以定义一个别名:在/ home /您的名字/.bashrc文件中,添加以下行:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(我插入了该-X选项,因此您可以在远程服务器上运行图形应用程序,并在本地查看它们;如果您不希望这样做,只需删除-X)。


嗨MariusMatutiae,我尝试了您的解决方案,但正如我在原始帖子中所说,“ userver”节点缺少程序netcat(nc)。所以我得到这个错误:ssh工作站bash:nc:找不到命令ssh_exchange_identification:连接被远程主机关闭
labotsirc 2013年

你不能安装吗?
MariusMatutiae

不幸的是,不,我在'userver'上没有超级用户,这就是为什么我尝试替代方法的原因。我不明白,如果它可以正常工作“ ssh -A -t userver ssh -A工作站”,为什么不对ProxyCommand进行相同的设置?
labotsirc

1
@labotsirc我已经稍微修改了我的答案。希望您会发现它有用。或者,您可以尝试在本地安装netcat(即,仅适合您自己!),在Proxycommand ....行中添加您自己的netcat副本的完整路径。由于权限问题,我不确定这是否可行,但是您可以尝试一下。
MariusMatutiae

复制了我的netcat二进制文件,删除了-q0选项,因为它给出了错误,现在可以使用了!谢谢
labotsirc 2013年

10

我发现以下解决方案比nc另一个示例中的使用netcat()更好。使用netcat时,我的连接速度很慢,并且会反复挂起,直到我按了一些键。另外,您不需要安装netcat。

将以下内容添加到您的~/.ssh/config

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

然后,您可以像这样ssh:

ssh workstation

还要注意,您ProxyCommand不工作的原因是因为您没有得到ProxyCommand应有的服务。 ProxyCommand必须创建一个ssh可以建立SSL连接的管道。换句话说,该命令必须启动一个进程,其中stdinstdout连接sshsshd端口。在您的配置中,您正在建立ssh连接,通过ProxyCommand该连接连接ssh到命令外壳而不是sshd端口。

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.