ssh 多跳...使命令适应 ssh 配置文件

lab*_*irc 11 networking linux ssh

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

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

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

ssh -A -t userserver@userver ssh -A userworkstation@workstation
Run Code Online (Sandbox Code Playgroud)

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

我的笔记本电脑中有这个配置文件(~/.ssh/config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user
Run Code Online (Sandbox Code Playgroud)

还有用户中的另一个配置文件(~/.ssh/config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username
Run Code Online (Sandbox Code Playgroud)

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

ssh -A -t userver ssh -A workstation
Run Code Online (Sandbox Code Playgroud)

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

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation
Run Code Online (Sandbox Code Playgroud)

然后,当我做

ssh hop
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

jco*_*and 11

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

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

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p
Run Code Online (Sandbox Code Playgroud)

然后你可以像这样ssh:

ssh workstation
Run Code Online (Sandbox Code Playgroud)

另请注意,您ProxyCommand不工作的原因是因为您没有得到什么ProxyCommandProxyCommand必须创建一个ssh可以建立 SSL 连接的管道。换句话说,该命令必须启动一个进程,其stdinstdout连接ssh到一个sshd端口。在您的配置中,您正在建立一个 ssh 连接,ProxyCommand用于连接ssh到命令外壳而不是sshd端口。


Mar*_*iae 6

您需要的命令是ProxyCommand.

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

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

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22
Run Code Online (Sandbox Code Playgroud)

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

  ssh worksation
Run Code Online (Sandbox Code Playgroud)

如果这还不清楚,或者你想了解更多细节,我建议你阅读这篇关于 ssh 多跳的优秀介绍

编辑:

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

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 
Run Code Online (Sandbox Code Playgroud)

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

  • @labotsirc 我稍微修改了我的答案。希望您会发现它有用。或者,您可以尝试在本地安装 netcat(即,只为您安装!),在 Proxycommand .... 行中添加您自己的 netcat 副本的完整路径。由于权限的原因,我不确定这是否有效,但您可以尝试一下。 (2认同)