通过 SSH 跳过中间服务器

通过 SSH 跳过中间服务器

我刚刚被聘用在一个拥有大型 'ol linux 集群的实验室里。我是一名 mac/windows 用户,所以我仍在尝试弄清楚如何使用 'nix 命令行进行导航。到目前为止,我还没有遇到任何实际问题,但我遇到了大约 5000 个与学习新系统相关的小麻烦。

到目前为止最大的烦恼是:无论出于什么原因(安全、这些服务器的设置方式我还不太了解等),当通过 SSH 从校外登录到集群时,您必须首先通过 SSH 连接到实验室桌子上的旧 imac,然后从那里通过 SSH 进入集群。我一直在使用 SCP 命令将文件从我的家用 mac 复制到集群:

首先在一个终端窗口中:

 my-home-mac:scp file [email protected]:~/target

然后在另一个终端窗口(我已在该窗口登录到实验室 imac)中:

 lab-imac:scp file [email protected]:~/target

问题是每次我这样做时,我都被迫先将文件 SCP 到实验室 imac 上(并输入一个密码),然后将文件从那里 SCP 到集群上(并输入另一个密码)。我正在尝试帮助开发这个分成 40 多个文件的 C 程序,所以我移动了很多文件,这让我很抓狂。

我想我必须学习 shell 脚本,但与此同时,为了开始运行,我有几个问题:

  1. 我该如何在家用 Mac 上设置终端,这样我就不必总是输入实验室 imac 或集群的密码?

  2. 有没有什么办法可以将文件从我的家用 Mac 直接 SCP(或其他命令)传输到集群,而无需经过中间环节?

  3. 有没有什么方法可以在我的家用 Mac 上设置 Fugu(或任何其他带有 GUI 的 SSH 客户端),以便它可以考虑中间服务器(实验室 imac)并像将我直接连接到集群一样?

我是一名物理学家,实验室里的其他人都是生物学家,而建立这一切的人早已不在人世了,所以我想向你们,向精彩的 Stack Overflow 社区的所有人寻求帮助。谢谢。

答案1

在 SSH 中,您可以使用 Host 和 ProxyCommand 条目配置要自动跳转到的中间节点,请参阅

如需无需输入密码,请参阅此链接

答案2

您可以设置密钥以避免输入密码。我相信之前已经介绍过了(请参阅如何从远程机器使用 SSH 公钥?; 提示ssh-keygen),我总是使用 OpenSSH 命令行客户端(安装有芬克在我的 Mac 上,使用 Linux 上的本地包管理器),所以我不会讨论愚蠢的准图形客户端。

ssh转发或scp通过网关的方案

您需要在原始机器(我将称之为 orig)上设置两个命令行。网关称为 gate,目的地称为 dest。

第一个命令行:

orig$ ssh -L 1111:dest.tld:22 gate.tld

这将链接端口 1111 传出原件到端口 22 传入目的地通过 ssh 隧道

现在,如果您需要此转发一段时间,请将其设置为执行某些不会让会话超时的操作。我使用top

第二行命令行:

orig$ ssh -p 1111 username_on_dest@localhost

或者

orig$ scp -P 1111 path/to/file/on/orig/filename username_on_dest@localhost:path/on/dest/new_filename

(请注意,端口指定选项采用不同的大小写形式ssh... scparghhh!)阅读文档以了解您可以调整此设置的各种方法,但这是基本方案。如果您经常使用出于安全原因而远离公共网络的资源,则非常有用。

答案3

为了避免到处输入密码,请使用 SSH 密钥。有很多资源在 SU 上别处如何做到这一点。一句忠告:始终在密钥上设置密码!

要“绕过”网关 Mac 并直接访问实验室机器,您需要使用 SSH 的隧道功能。您需要在家用 Mac 和实验室网关 Mac 之间建立链接,将本地 Mac 上的端口转发到实验室中的机器。然后,您可以通过这些特定端口连接到本地 Mac 的机器,流量将转发到实验室机器。

鉴于以下情况:

  • LABIMAC = 网关 MAC
  • LAB01 = 网关后面实验室中的服务器 #1
  • LAB02 = 网关后面实验室中的服务器 #2
  • LABNN = 网关后面实验室中的服务器 #N

您可能拥有如下所示的 SSH 命令行:

ssh -L 2001:LAB01:22 -L 2002:LAB02:22 2003:LABNN:22 joe@LABIMAC

建立隧道,然后对实验室机器执行单独的 SSH 命令:

ssh -p 2001 joe@localhost
ssh -p 2002 joe@localhost
ssh -p 2003 joe@localhost

当然,每个实验室机器上的用户名可能不同。这可能会有点冗长,因此您可以在 SSH 中创建别名配置文件帮助:

host LAB01
hostname localhost
port 2001

host LAB02
hostname localhost
port 2002

host LAB03
hostname localhost
port 2003

然后,一旦建立了到实验室 Mac 的隧道,您就可以跳过命令行上的端口和本地主机并做一些更自然的事情:

ssh joe@LAB01

您甚至可以使用配置文件来简化隧道的建立:

host LABIMAC
LocalForward 2001 LAB01:22
LocalForward 2002 LAB02:22
LocalForward 2003 LABNN:22

这样,每次你 ssh 到 LABIMAC 时,这些本地端口转发都会自动建立:

ssh joe@LABIMAC

(在第二个窗口中)

ssh joe@LAB01

您还可以研究使用autossh在非活动期间保持初始隧道连接打开。

答案4

另一个改进方法是使用 FileZilla 作为 GUI 在本地和远程机器之间进行拖拽,假设你已经设置了隧道

orig$ ssh -L 1111:dest.tld:22 gate.tld

这可以使您上传文件。

相关内容