我刚刚被聘请在一个大型的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脚本,但同时,为了启动和运行,我还有几个问题:
我怎样才能在我的家用电脑上设置terminal,以便我不必总是input实验室imac或群集的密码?
有没有办法将SCP(或其他一些命令)的文件直接从我的家用mac传送到集群而不经过中间层?
有什么办法可以在家里的mac上设置Fugu(或者其他带有gui的SSH客户端),这样它就可以考虑到中间服务器(imac),并且直接连接到簇?
我是一个物理学家,实验室里的其他人都是生物学家,把所有这些东西放在一起的人早已不在了,所以我向你们大家伸出援助之手,在这里给我一个手。 谢谢。
在SSH中,可以使用Host和ProxyCommand条目将中间节点configuration为自动跳转,请参阅此
无需input密码,请参阅此链接
您可以设置密钥以避免input密码。 我确定这里已经介绍过了(请参阅如何从远程机器上使用SSH公用密钥 ; hint ssh-keygen ),而且我总是使用OpenSSH命令行客户机(在我的Mac上安装了fink ,在Linux上的本地包pipe理器),所以我不会去愚蠢的准graphics客户端。
ssh或scp配方 你将需要两个命令行在你原来的机器上(我将称为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指定选项需要ssh和scp不同大小写… arghhh!)请阅读文档以了解您可以使用的各种方法,但这是基本scheme。 如果您出于安全原因定期使用不在公共networking上的资源,这将非常有用。
为了避免在所有地方input密码,请使用SSH密钥。 SU和其他地方有很多资源如何做到这一点。 一个build议的话:总是把密码放在你的钥匙上!
要“绕过”网关MAC并直接访问实验室机器,您需要使用SSH的隧道function。 您build立了家庭Mac和实验室网关Mac之间的链接,将本地Mac上的端口转发到实验室中的计算机。 然后,在这些特定端口上连接到本地Mac机器,并将stream量转发到实验室机器。
鉴于以下情况:
您可以使用如下所示的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
这可以让你上传文件。