ssh 多跳...将命令适配到 ssh 配置文件

ssh 多跳...将命令适配到 ssh 配置文件

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

这是我的连接图:笔记本电脑(我在这里)------>用户服务器------->工作站

我已将 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

有任何想法吗?

答案1

您需要的命令是ProxyCommand

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

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

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

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

  ssh worksation

如果这不清楚,或者你想要更多细节,我建议你阅读这个出色的介绍到 ssh 多跳。

编辑:

您随时可以定义别名:在您的 /home/your_name/.bashrc 文件中,添加以下行:

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

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

答案2

我发现以下解决方案比使用 netcat () 效果好得多,nc如另一个示例所示。使用 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必须创建一个可以建立 SSL 连接的管道ssh。换句话说,该命令必须启动一个进程,该进程标准输入标准输出连接sshsshd端口。在您的配置中,您正在建立一个 ssh 连接,ProxyCommand该连接连接ssh到命令 shell,而不是连接到端口sshd

答案3

使用相同的用户名从服务器 A ssh 进入服务器 B

Host target
  HostName <serverB_hostname>
  ForwardX11Trusted yes
  LogLevel verbose
  User <username>
  ProxyCommand ssh <username>@<serverA_hostname> -W %h:%p

相关内容