我刚刚被聘用在一个拥有大型 '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 脚本,但与此同时,为了开始运行,我有几个问题:
我该如何在家用 Mac 上设置终端,这样我就不必总是输入实验室 imac 或集群的密码?
有没有什么办法可以将文件从我的家用 Mac 直接 SCP(或其他命令)传输到集群,而无需经过中间环节?
有没有什么方法可以在我的家用 Mac 上设置 Fugu(或任何其他带有 GUI 的 SSH 客户端),以便它可以考虑中间服务器(实验室 imac)并像将我直接连接到集群一样?
我是一名物理学家,实验室里的其他人都是生物学家,而建立这一切的人早已不在人世了,所以我想向你们,向精彩的 Stack Overflow 社区的所有人寻求帮助。谢谢。
答案1
答案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
... scp
arghhh!)阅读文档以了解您可以调整此设置的各种方法,但这是基本方案。如果您经常使用出于安全原因而远离公共网络的资源,则非常有用。
答案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
这可以使您上传文件。