通过SSH跳过中间服务器

我刚刚被聘请在一个大型的ol linux集群的实验室工作。 我是一个mac / windows的家伙,所以我仍然试图找出如何使用'nix命令行导航。 到目前为止,我还没有遇到任何实际的问题,但是我遇到了大约5000种与学习一个新系统有关的一些烦人的事情。

到目前为止最大的烦恼是:无论出于何种原因(安全性,关于如何设置这些服务器的事情,我还没有足够的了解等等),通过SSH从校园外login到集群时,首先通过SSH连接到位于实验室桌面上的旧imac,然后从那里通过SSH连接到集群。 我一直在使用SCP命令将文件从我的家庭MAC复制到群集:

首先在一个terminal窗口中:

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

然后在另一个terminal窗口(我login到实验室imac):

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

问题是每次我这样做的时候,我都被迫先把SCP文件放到实验室的imac上(然后input一个密码),然后把文件从那里传到群集上(然后input另一个密码)。 我试图帮助开发这个被分割成4打文件的C程序,所以我正在移动大量的文件,这使我疯了。

我想我将不得不学习shell脚本,但同时,为了启动和运行,我还有几个问题:

  1. 我怎样才能在我的家用电脑上设置terminal,以便我不必总是input实验室imac或群集的密码?

  2. 有没有办法将SCP(或其他一些命令)的文件直接从我的家用mac传送到集群而不经过中间层?

  3. 有什么办法可以在家里的mac上设置Fugu(或者其他带有gui的SSH客户端),这样它就可以考虑到中间服务器(imac),并且直接连接到簇?

我是一个物理学家,实验室里的其他人都是生物学家,把所有这些东西放在一起的人早已不在了,所以我向你们大家伸出援助之手,在这里给我一个手。 谢谢。

在SSH中,可以使用Host和ProxyCommand条目将中间节点configuration为自动跳转,请参阅此

无需input密码,请参阅此链接

您可以设置密钥以避免input密码。 我确定这里已经介绍过了(请参阅如何从远程机器上使用SSH公用密钥 ; hint ssh-keygen ),而且我总是使用OpenSSH命令行客户机(在我的Mac上安装了fink ,在Linux上的本地包pipe理器),所以我不会去愚蠢的准graphics客户端。

通过网关转发sshscp配方

你将需要两个命令行在你原来的机器上(我将称为orig)。 网关被称为门户,而目的地的目的地。

第一个命令行:

 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 

(注意port指定选项需要sshscp不同大小写… arghhh!)请阅读文档以了解您可以使用的各种方法,但这是基本scheme。 如果您出于安全原因定期使用不在公共networking上的资源,这将非常有用。

为了避免在所有地方input密码,请使用SSH密钥。 SU和其他地方有很多资源如何做到这一点。 一个build议的话:总是把密码放在你的钥匙上!

要“绕过”网关MAC并直接访问实验室机器,您需要使用SSH的隧道function。 您build立了家庭Mac和实验室网关Mac之间的链接,将本地Mac上的端口转发到实验室中的计算机。 然后,在这些特定端口上连接到本地Mac机器,并将stream量转发到实验室机器。

鉴于以下情况:

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

您可以使用如下所示的SSH命令行:

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

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

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

当然,每个实验机器上的用户名可以不同。 这可能会有点罗嗦,所以你可以在SSH configuration文件中创build别名来帮助:

 host LAB01 hostname localhost port 2001 host LAB02 hostname localhost port 2002 host LAB03 hostname localhost port 2003 

然后,你可以跳过命令行上的port和localhost,一旦build立到实验室Mac的隧道,就做一些更自然的事情:

 ssh joe@LAB01 

你甚至可以通过使用configuration文件来简化隧道的build立:

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

所以每次你ssh到LABIMAC这些本地端口转发都是自动build立的:

 ssh joe@LABIMAC 

(并在第二个窗口中)

 ssh joe@LAB01 

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

1)已经回答:SSH密钥 – 自动login – 无密码和更安全

|

2)使用rsync传输文件:

(即)使用端口22:

rsync -av -e ssh / var / files / mysource / [email protected]:/ var / waytogo / example

使用不同的端口(推荐)

rsync -av -e'ssh -p 34xx'/ var / files / mysource / [email protected]:/ var / waytogo / example

^^^

以上示例不会删除目标服务器上剩余的额外文件。

3a)SSH客户端并不需要一个GUI,PuTTy很简单,而且很有趣。 :O)

3b)login前进可以编写脚本; 对于半自动只是做一个命令别名,你是在一个或两个击键。

注意:别名很容易学,在Linux中编辑/root/.bashrc

 alias job='ssh -p 34xx [email protected]' 

现在只需input“job”作为一个命令,并且你login到另一台机器(使用你的SSH密钥)

replace第二个命令的进一步改进是使用FileZilla作为GUI在本地和远程机器之间拖动,假设您已经设置了隧道

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

这可以让你上传文件。